:root{--ui-font:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--ui-bg:#f5f6f8;--ui-surface:#fff;--ui-text:#1f2328;--ui-muted:#59636e;--ui-border:#d1d9e0;--ui-primary:#0b5cad;--ui-primary-hover:#094a8c;--ui-danger:#c62828;--ui-success-bg:#e6f4ea;--ui-success-text:#1b5e20;--ui-info-bg:#e8f0fe;--ui-info-text:#0b3d91;--ui-warning-bg:#fff4e5;--ui-warning-text:#7a4100;--ui-error-bg:#fdecea;--ui-error-text:#8a1c1c;--ui-radius:8px;--ui-focus:0 0 0 3px #0b5cad4d}body{background:var(--ui-bg);color:var(--ui-text);font-family:var(--ui-font);margin:0;font-size:15px;line-height:1.5}.ui-button{border-radius:var(--ui-radius);min-height:38px;font:inherit;cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:.5rem;padding:0 1rem;font-weight:600;display:inline-flex}.ui-button:focus-visible{box-shadow:var(--ui-focus);outline:none}.ui-button:disabled{opacity:.55;cursor:not-allowed}.ui-button--primary{background:var(--ui-primary);color:#fff}.ui-button--primary:hover:not(:disabled){background:var(--ui-primary-hover)}.ui-button--secondary{background:var(--ui-surface);border-color:var(--ui-border);color:var(--ui-text)}.ui-button--danger{background:var(--ui-surface);border-color:var(--ui-danger);color:var(--ui-danger)}.ui-button--link{color:var(--ui-primary);background:0 0;min-height:auto;padding:0}.ui-field{flex-direction:column;gap:.25rem;margin-bottom:1rem;display:flex}.ui-field__label{font-weight:600}.ui-field__hint{color:var(--ui-muted);font-size:.85rem}.ui-field__error{color:var(--ui-danger);font-size:.85rem}.ui-input{border:1px solid var(--ui-border);border-radius:var(--ui-radius);background:var(--ui-surface);min-height:38px;color:var(--ui-text);font:inherit;padding:0 .75rem}.ui-input:focus{border-color:var(--ui-primary);box-shadow:var(--ui-focus);outline:none}.ui-input[aria-invalid=true]{border-color:var(--ui-danger)}.ui-alert{border-radius:var(--ui-radius);margin-bottom:1rem;padding:.75rem 1rem}.ui-alert--info{background:var(--ui-info-bg);color:var(--ui-info-text)}.ui-alert--success{background:var(--ui-success-bg);color:var(--ui-success-text)}.ui-alert--warning{background:var(--ui-warning-bg);color:var(--ui-warning-text)}.ui-alert--error{background:var(--ui-error-bg);color:var(--ui-error-text)}.ui-card{background:var(--ui-surface);border:1px solid var(--ui-border);border-radius:var(--ui-radius);margin-bottom:1.5rem;padding:1.5rem}.ui-card__title{margin:0 0 1rem;font-size:1.15rem}.ui-spinner{vertical-align:middle;border:2px solid;border-right-color:#0000;border-radius:50%;width:1.1em;height:1.1em;animation:.8s linear infinite ui-spin;display:inline-block}@keyframes ui-spin{to{transform:rotate(360deg)}}.ui-dialog{border:1px solid var(--ui-border);border-radius:var(--ui-radius);width:calc(100% - 2rem);max-width:560px;padding:1.5rem}.ui-dialog::backdrop{background:#00000059}.ui-copy-box{gap:.5rem;display:flex}.ui-copy-box .ui-input{flex:1;font-family:ui-monospace,monospace;font-size:.85rem}.ui-rules{color:var(--ui-muted);margin:.25rem 0 0;padding-left:1.25rem;font-size:.85rem}.ui-rules__ok{color:var(--ui-success-text)}.ui-table{border-collapse:collapse;background:var(--ui-surface);width:100%}.ui-table th,.ui-table td{text-align:left;border-bottom:1px solid var(--ui-border);vertical-align:top;padding:.5rem .75rem}.ui-table th{color:var(--ui-muted);font-size:.85rem}.ui-sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.app-header{background:var(--ui-surface);border-bottom:1px solid var(--ui-border);align-items:center;gap:1.5rem;padding:.75rem 1.5rem;display:flex}.app-header__brand{margin-right:auto;font-weight:700}.app-header nav{gap:1rem;display:flex}.app-header a{color:var(--ui-text);text-decoration:none}.app-header a.active{color:var(--ui-primary);font-weight:600}.app-header__user{color:var(--ui-muted);font-size:.9rem}.app-main{max-width:1100px;margin:0 auto;padding:2rem 1.5rem}.app-centered{max-width:420px;margin:10vh auto 0;padding:0 1rem}.app-actions{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.app-grid-3{grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;display:grid}@media (width<=720px){.app-grid-3{grid-template-columns:1fr}}.app-muted{color:var(--ui-muted)}
