.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-sm)}.card__header{justify-content:space-between;align-items:flex-start;gap:var(--s-4);padding:var(--s-4) var(--s-5);border-bottom:1px solid var(--border);display:flex}.card__title{font-size:var(--t-lg)}.card__subtitle{font-size:var(--t-sm);color:var(--text-muted);margin-top:2px}.card__actions{gap:var(--s-2);flex-shrink:0;display:flex}.badge{align-items:center;gap:var(--s-1);padding:2px var(--s-2);border-radius:var(--r-full);font-size:var(--t-xs);white-space:nowrap;font-weight:600;line-height:1.6;display:inline-flex}.badge--neutral{background:var(--surface-3);color:var(--text-muted)}.badge--ok{background:var(--ok-bg);color:var(--ok)}.badge--warn{background:var(--warn-bg);color:var(--warn)}.badge--danger{background:var(--danger-bg);color:var(--danger)}.badge--info{background:var(--info-bg);color:var(--info)}.badge--brand{background:var(--brand-soft);color:var(--brand)}.skeleton{border-radius:var(--r-sm);background:linear-gradient(90deg, var(--surface-2) 25%, var(--surface-3) 37%, var(--surface-2) 63%);background-size:400% 100%;animation:1.4s infinite skeleton;display:block}@keyframes skeleton{0%{background-position:100%}to{background-position:0}}.spinner{border:2px solid var(--border-strong);border-right-color:var(--brand);border-radius:50%;animation:.6s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.empty{align-items:center;gap:var(--s-2);padding:var(--s-7) var(--s-5);text-align:center;flex-direction:column;display:flex}.empty__icon{color:var(--text-subtle)}.empty__title{font-weight:600}.empty__desc{font-size:var(--t-sm);color:var(--text-muted);max-width:46ch}.empty__action{margin-top:var(--s-2)}.errorstate{align-items:center;gap:var(--s-2);padding:var(--s-6) var(--s-5);text-align:center;flex-direction:column;display:flex}.errorstate__title{color:var(--danger);font-weight:600}.errorstate__msg{font-size:var(--t-sm);color:var(--text-muted);max-width:52ch}.errorstate__id{font-family:var(--font-mono);font-size:var(--t-xs);color:var(--text-subtle);background:var(--surface-2);padding:2px var(--s-2);border-radius:var(--r-sm)}.errorstate__retry{margin-top:var(--s-2);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--s-2) var(--s-4);font-size:var(--t-sm);background:0 0}.errorstate__retry:hover{background:var(--surface-2)}.emoji{margin-right:.35em;font-style:normal}.btn{justify-content:center;align-items:center;gap:var(--s-2);border-radius:var(--r-md);white-space:nowrap;border:1px solid #0000;font-weight:500;transition:background-color .12s,border-color .12s,opacity .12s;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn--full{width:100%}.btn--sm{height:30px;padding:0 var(--s-3);font-size:var(--t-sm)}.btn--md{height:36px;padding:0 var(--s-4);font-size:var(--t-md)}.btn--lg{height:44px;padding:0 var(--s-5);font-size:var(--t-lg)}.btn--primary{background:var(--brand);color:var(--brand-contrast)}.btn--primary:hover:not(:disabled){background:var(--brand-hover)}.btn--secondary{background:var(--surface);color:var(--text);border-color:var(--border)}.btn--secondary:hover:not(:disabled){background:var(--surface-2)}.btn--ghost{color:var(--text-muted);background:0 0}.btn--ghost:hover:not(:disabled){background:var(--surface-2);color:var(--text)}.btn--danger{background:var(--danger);color:#fff}.btn--danger:hover:not(:disabled){filter:brightness(.92)}.btn__spinner{border:2px solid;border-right-color:#0000;border-radius:50%;width:14px;height:14px;animation:.6s linear infinite btn-spin}@keyframes btn-spin{to{transform:rotate(360deg)}}.field{gap:var(--s-1);flex-direction:column;display:flex}.field__label{font-size:var(--t-sm);color:var(--text-muted);font-weight:500}.field__required{color:var(--danger)}.field__control{align-items:center;gap:var(--s-2);height:38px;padding:0 var(--s-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);transition:border-color .12s,box-shadow .12s;display:flex}.field__control:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px var(--focus)}.field__control--error{border-color:var(--danger)}.field__control--error:focus-within{box-shadow:0 0 0 3px color-mix(in srgb, var(--danger) 25%, transparent)}.field__control input{background:0 0;border:none;outline:none;flex:1;min-width:0}.field__control input::placeholder{color:var(--text-subtle)}.field__icon,.field__suffix{color:var(--text-subtle);flex-shrink:0;display:inline-flex}.field__error{font-size:var(--t-sm);color:var(--danger)}.field__hint{font-size:var(--t-sm);color:var(--text-subtle)}.field__control--area{height:auto;padding:var(--s-2) var(--s-3);align-items:stretch}.field__control--area textarea{resize:vertical;min-width:0;font:inherit;color:inherit;line-height:var(--lh-normal);background:0 0;border:none;outline:none;flex:1}.field__control--area textarea::placeholder{color:var(--text-subtle)}.tagpicker{background:var(--surface-2);border:1px solid var(--border-1);border-radius:var(--r-2);flex-wrap:wrap;align-items:center;gap:6px;padding:6px 10px;display:flex}.tagpicker:focus-within{border-color:var(--brand,#6366f1)}.tagpicker__tag{background:var(--surface-1);border:1px solid var(--border-1);border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:.8rem;display:inline-flex}.tagpicker__tag button{color:var(--text-2);cursor:pointer;background:0 0;border:none;place-items:center;padding:0;display:grid}.tagpicker__tag button:hover{color:var(--danger,#e0426f)}.tagpicker input{min-width:120px;font:inherit;color:inherit;background:0 0;border:none;outline:none;flex:1;padding:2px 0}.shell{grid-template-columns:var(--sidebar-w) 1fr;height:100%;transition:grid-template-columns .16s;display:grid}.shell--collapsed{grid-template-columns:var(--sidebar-w-collapsed) 1fr}.shell__sidebar{gap:var(--s-2);padding:var(--s-4) var(--s-3);background:var(--surface);border-right:1px solid var(--border);flex-direction:column;display:flex;position:relative;overflow:hidden}.shell__brand{align-items:center;gap:var(--s-3);padding:0 var(--s-2) var(--s-4);display:flex}.shell__mark{border-radius:var(--r-md);background:var(--brand);width:32px;height:32px;color:var(--brand-contrast);flex-shrink:0;place-items:center;font-weight:700;display:grid}.shell__brandname{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.shell__nav{flex-direction:column;gap:2px;display:flex}.shell__link{align-items:center;gap:var(--s-3);padding:var(--s-2) var(--s-3);border-radius:var(--r-md);color:var(--text-muted);font-size:var(--t-md);white-space:nowrap;font-weight:500;display:flex}.shell__link:hover{background:var(--surface-2);color:var(--text);text-decoration:none}.shell__link--active{background:var(--brand-soft);color:var(--brand)}.shell--collapsed .shell__brandname,.shell--collapsed .shell__linklabel{display:none}.shell__collapse{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);width:28px;height:28px;color:var(--text-muted);align-self:flex-start;place-items:center;margin-top:auto;transition:transform .16s;display:grid}.shell--collapsed .shell__collapse{transform:rotate(180deg)}.shell__body{flex-direction:column;min-width:0;min-height:0;display:flex}.shell__topbar{align-items:center;gap:var(--s-4);height:var(--topbar-h);padding:0 var(--s-5);background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;display:flex}.shell__spacer{flex:1}.shell__user{align-items:center;gap:var(--s-3);display:flex}.shell__avatar{border-radius:var(--r-full);background:var(--surface-3);width:32px;height:32px;color:var(--text-muted);font-size:var(--t-sm);place-items:center;font-weight:600;display:grid}.shell__userinfo{flex-direction:column;line-height:1.2;display:flex}.shell__username{font-size:var(--t-sm);font-weight:600}.shell__userrole{font-size:var(--t-xs);color:var(--text-subtle);text-transform:capitalize}.shell__logout{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);width:32px;height:32px;color:var(--text-muted);place-items:center;display:grid}.shell__logout:hover{background:var(--surface-2);color:var(--danger)}.shell__main{min-height:0;padding:var(--s-5);flex:1;overflow:auto}@media (width<=860px){.shell,.shell--collapsed{grid-template-rows:1fr auto;grid-template-columns:1fr}.shell__sidebar{border-right:none;border-top:1px solid var(--border);padding:var(--s-2);flex-direction:row;order:2;align-items:center}.shell__brand,.shell__collapse{display:none}.shell__nav{flex-direction:row;flex:1;justify-content:space-around}.shell__link{font-size:var(--t-xs);flex-direction:column;gap:2px}.shell__linklabel{display:block!important}.shell__main{padding:var(--s-4) var(--s-3)}}.login{min-height:100%;padding:var(--s-5);background:radial-gradient(1000px 500px at 50% -10%, var(--brand-soft), transparent 70%), var(--bg);place-items:center;display:grid}.login__panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);width:100%;max-width:380px;box-shadow:var(--shadow-lg);padding:var(--s-6) var(--s-5) var(--s-5)}.login__brand{align-items:center;gap:var(--s-2);margin-bottom:var(--s-5);text-align:center;flex-direction:column;display:flex}.login__logo{max-width:180px;max-height:48px}.login__mark{border-radius:var(--r-md);background:var(--brand);width:48px;height:48px;color:var(--brand-contrast);font-size:var(--t-xl);place-items:center;font-weight:700;display:grid}.login__title{font-size:var(--t-xl)}.login__subtitle{font-size:var(--t-sm);color:var(--text-muted)}.login__form{gap:var(--s-4);flex-direction:column;display:flex}.login__error{font-size:var(--t-sm);color:var(--danger);background:var(--danger-bg);border-radius:var(--r-md);padding:var(--s-2) var(--s-3)}.login__back{font-size:var(--t-sm);color:var(--text-muted);background:0 0;border:none;text-decoration:underline}.login__support{margin-top:var(--s-5);padding-top:var(--s-4);border-top:1px solid var(--border);font-size:var(--t-sm);color:var(--text-muted);text-align:center}.login__demo{margin-bottom:var(--s-5);padding:var(--s-4);border:1px dashed var(--border-strong);border-radius:var(--r-lg);background:var(--surface-2)}.login__demo-title{margin:0 0 var(--s-1);font-size:var(--t-xs);letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);font-weight:600}.login__demo-note{margin:0 0 var(--s-3);font-size:var(--t-sm);line-height:var(--lh-normal);color:var(--text-muted)}.login__demo-creds{margin:0 0 var(--s-4);gap:var(--s-2);display:grid}.login__demo-creds>div{align-items:center;gap:var(--s-3);display:flex}.login__demo-creds dt{min-width:4.5rem;font-size:var(--t-sm);color:var(--text-muted);flex:none}.login__demo-creds dd{min-width:0;margin:0}.login__demo-creds code{padding:.15rem var(--s-2);border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface);font-family:var(--font-mono);font-size:var(--t-sm);color:var(--text);-webkit-user-select:all;user-select:all;word-break:break-all;display:inline-block}:root{--brand:#3f3f8f;--brand-contrast:#fff;--brand-soft:color-mix(in srgb, var(--brand) 10%, transparent);--brand-border:color-mix(in srgb, var(--brand) 28%, transparent);--brand-hover:color-mix(in srgb, var(--brand) 88%, black);--bg:#f6f7fb;--surface:#fff;--surface-2:#f1f3f9;--surface-3:#e7eaf3;--overlay:#0f122273;--text:#14172a;--text-muted:#5b6280;--text-subtle:#858ba6;--text-inverse:#fff;--border:#dfe3ee;--border-strong:#c6cbdd;--focus:color-mix(in srgb, var(--brand) 45%, transparent);--ok:#0f7b4f;--ok-bg:#e6f6ee;--warn:#9a6100;--warn-bg:#fdf3e0;--danger:#b3261e;--danger-bg:#fdeceb;--info:#1f5fa8;--info-bg:#e8f1fc;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:24px;--s-6:32px;--s-7:48px;--s-8:64px;--r-sm:6px;--r-md:10px;--r-lg:14px;--r-full:999px;--shadow-sm:0 1px 2px #1014280f;--shadow-md:0 4px 12px #10142814;--shadow-lg:0 12px 32px #10142824;--font:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono:"SF Mono", ui-monospace, "Cascadia Mono", Menlo, monospace;--t-xs:11px;--t-sm:13px;--t-md:14px;--t-lg:16px;--t-xl:20px;--t-2xl:26px;--lh-tight:1.25;--lh-normal:1.5;--sidebar-w:232px;--sidebar-w-collapsed:64px;--topbar-h:56px;--z-dropdown:100;--z-sticky:200;--z-modal:400;--z-toast:500}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f1220;--surface:#171a2b;--surface-2:#1e2136;--surface-3:#272b44;--overlay:#0009;--text:#eceefa;--text-muted:#a2a8c4;--text-subtle:#7b819c;--border:#2b2f47;--border-strong:#3b4060;--ok:#4ade80;--ok-bg:#10331f;--warn:#fbbf24;--warn-bg:#3a2c08;--danger:#f87171;--danger-bg:#3a1613;--info:#7dd3fc;--info-bg:#0e2c45;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 4px 12px #00000059;--shadow-lg:0 12px 32px #00000073}}:root[data-theme=dark]{--bg:#0f1220;--surface:#171a2b;--surface-2:#1e2136;--surface-3:#272b44;--overlay:#0009;--text:#eceefa;--text-muted:#a2a8c4;--text-subtle:#7b819c;--border:#2b2f47;--border-strong:#3b4060;--ok:#4ade80;--ok-bg:#10331f;--warn:#fbbf24;--warn-bg:#3a2c08;--danger:#f87171;--danger-bg:#3a1613;--info:#7dd3fc;--info-bg:#0e2c45;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 4px 12px #00000059;--shadow-lg:0 12px 32px #00000073}*,:before,:after{box-sizing:border-box}*{margin:0}html,body,#root{height:100%}body{font-family:var(--font);font-size:var(--t-md);line-height:var(--lh-normal);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}.tabular{font-variant-numeric:tabular-nums}h1,h2,h3,h4{line-height:var(--lh-tight);font-weight:600}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--r-sm)}:focus:not(:focus-visible){outline:none}::selection{background:var(--brand-soft)}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--r-full);background-clip:padding-box;border:2px solid #0000}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}
