:root{--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--fs-body: 14px;--fs-sm: 13px;--fs-xs: 12px;--fs-lg: 16px;--fs-xl: 20px;--fs-2xl: 28px;--lh: 1.5;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-8: 32px;--sp-10: 40px;--sp-12: 48px;--radius-sm: 4px;--radius: 6px;--radius-lg: 10px;--radius-pill: 999px;--sidebar-w: 240px;--header-h: 56px;--content-max: 1200px;--tap: 40px;--z-drawer: 40;--z-scrim: 39;--z-header: 30;--z-modal: 60;--z-toast: 80;--transition: .12s ease}:root[data-theme=light]{color-scheme:light;--bg: #fbfafd;--surface: #ffffff;--surface-2: #f4f2f8;--surface-3: #ece8f2;--surface-hover: #f0edf6;--text: #18171c;--text-muted: #6b6674;--text-faint: #9a94a6;--text-inverse: #ffffff;--border: #e0dce5;--border-strong: #cfc9d6;--accent: #6c5fc7;--accent-hover: #5b4fb0;--accent-fg: #ffffff;--accent-weak: #ece9f8;--accent-text: #5a4eb2;--success: #2da160;--success-weak: #e3f3ea;--success-fg: #ffffff;--warning: #b08018;--warning-weak: #f6efdc;--warning-fg: #ffffff;--danger: #cf3d3d;--danger-hover: #b83232;--danger-weak: #f9e3e3;--danger-fg: #ffffff;--info: #3d73c4;--info-weak: #e4edf9;--info-fg: #ffffff;--shadow-sm: 0 1px 2px rgba(24, 23, 28, .06), 0 1px 1px rgba(24, 23, 28, .04);--shadow-md: 0 4px 16px rgba(24, 23, 28, .12);--ring: #6c5fc7;--scrollbar-thumb: #cfc9d6;--overlay: rgba(24, 23, 28, .45);--skeleton: #ece8f2;--skeleton-hi: #f6f4fa}:root[data-theme=dark]{color-scheme:dark;--bg: #17151c;--surface: #221f29;--surface-2: #2b2733;--surface-3: #332e3d;--surface-hover: #2f2b38;--text: #e7e1ec;--text-muted: #a49dae;--text-faint: #756e80;--text-inverse: #17151c;--border: #3a3542;--border-strong: #4a4453;--accent: #6c5fc7;--accent-hover: #7d72cf;--accent-fg: #ffffff;--accent-weak: #2c2740;--accent-text: #b4a9f2;--success: #35c07d;--success-weak: #14301f;--success-fg: #0c1a12;--warning: #d0a53a;--warning-weak: #322914;--warning-fg: #1c1607;--danger: #e05a5a;--danger-hover: #ec6f6f;--danger-weak: #331a1a;--danger-fg: #ffffff;--info: #6fa3e6;--info-weak: #16233a;--info-fg: #0a1424;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow-md: 0 6px 24px rgba(0, 0, 0, .5);--ring: #8b7fd6;--scrollbar-thumb: #4a4453;--overlay: rgba(0, 0, 0, .6);--skeleton: #2b2733;--skeleton-hi: #353040}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4,p,figure{margin:0}a{color:var(--accent-text);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;color:inherit}code,kbd,.mono{font-family:var(--font-mono)}:focus-visible{outline:2px solid var(--ring);outline-offset:2px;border-radius:var(--radius-sm)}:focus:not(:focus-visible){outline:none}*{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:var(--radius-pill);border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-track{background:transparent}.app-shell{display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr);height:100%}.sidebar{grid-column:1;display:flex;flex-direction:column;min-height:0;background:var(--surface);border-right:1px solid var(--border)}.sidebar__brand{display:flex;align-items:center;gap:var(--sp-2);height:var(--header-h);padding:0 var(--sp-4);font-weight:700;font-size:var(--fs-lg);letter-spacing:-.01em;border-bottom:1px solid var(--border);flex:none}.sidebar__brand-mark{display:inline-flex;width:26px;height:26px;align-items:center;justify-content:center;background:var(--accent);color:var(--accent-fg);border-radius:var(--radius);font-size:15px;flex:none}.sidebar__nav{flex:1;min-height:0;overflow-y:auto;padding:var(--sp-3) var(--sp-2) var(--sp-6)}.nav-group{margin-bottom:var(--sp-4)}.nav-group__title{padding:var(--sp-1) var(--sp-3);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint)}.nav-link{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);min-height:36px;border-radius:var(--radius);color:var(--text-muted);font-size:var(--fs-body);cursor:pointer;white-space:nowrap}.nav-link:hover{background:var(--surface-hover);color:var(--text);text-decoration:none}.nav-link.is-active{background:var(--accent-weak);color:var(--accent-text);font-weight:600}.nav-link__icon{display:inline-flex;width:18px;height:18px;flex:none;align-items:center;justify-content:center}.nav-link__icon svg{width:18px;height:18px}.main{grid-column:2;display:flex;flex-direction:column;min-width:0;min-height:0}.topbar{display:flex;align-items:center;gap:var(--sp-3);height:var(--header-h);flex:none;padding:0 var(--sp-4);background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:var(--z-header)}.topbar .topbar__burger{display:none}.breadcrumb{display:flex;align-items:center;gap:var(--sp-2);min-width:0;font-size:var(--fs-body);color:var(--text-muted);overflow:hidden}.breadcrumb__sep{color:var(--text-faint)}.breadcrumb__current{color:var(--text);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar__spacer{flex:1}.content{flex:1;min-height:0;overflow-y:auto;padding:var(--sp-6) var(--sp-6) var(--sp-12)}.content__inner{max-width:var(--content-max);margin:0 auto}.page-head{margin-bottom:var(--sp-5)}.page-head__title{font-size:var(--fs-xl);font-weight:700;letter-spacing:-.01em}.page-head__desc{margin-top:var(--sp-1);color:var(--text-muted);font-size:var(--fs-sm)}.scrim{display:none;position:fixed;inset:0;background:var(--overlay);z-index:var(--z-scrim)}.auth{min-height:100%;display:grid;place-items:center;padding:var(--sp-6)}.auth__card{width:100%;max-width:380px}.auth__brand{display:flex;align-items:center;justify-content:center;gap:var(--sp-2);margin-bottom:var(--sp-5);font-weight:700;font-size:var(--fs-xl)}.center-screen{min-height:100%;display:grid;place-items:center}@media (max-width: 1023px){.content{padding:var(--sp-5) var(--sp-4) var(--sp-10)}}@media (max-width: 767px){.app-shell{grid-template-columns:minmax(0,1fr)}.sidebar{position:fixed;inset:0 auto 0 0;width:min(280px,84vw);z-index:var(--z-drawer);transform:translate(-100%);transition:transform .18s ease;box-shadow:var(--shadow-md)}.sidebar.is-open{transform:translate(0)}.main{grid-column:1}.topbar .topbar__burger{display:inline-flex}.scrim.is-open{display:block}.content{padding:var(--sp-4) var(--sp-3) var(--sp-10)}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation-duration:.001ms!important}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:34px;padding:0 var(--sp-4);border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);color:var(--text);font-size:var(--fs-body);font-weight:500;cursor:pointer;white-space:nowrap;transition:background var(--transition),border-color var(--transition)}.btn:hover:not(:disabled){background:var(--surface-hover)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}.btn-primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn-danger{background:var(--danger);border-color:var(--danger);color:var(--danger-fg)}.btn-danger:hover:not(:disabled){background:var(--danger-hover);border-color:var(--danger-hover)}.btn-ghost{background:transparent;border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--surface-hover)}.btn-sm{min-height:28px;padding:0 var(--sp-3);font-size:var(--fs-sm)}.btn-block{width:100%}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:1px solid transparent;border-radius:var(--radius);background:transparent;color:var(--text-muted);cursor:pointer}.icon-btn:hover{background:var(--surface-hover);color:var(--text)}.icon-btn svg{width:18px;height:18px}.icon-btn:disabled{cursor:default;opacity:.7}.icon-btn--spin svg{animation:icon-spin .9s linear infinite}@keyframes icon-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.icon-btn--spin svg{animation:none}}.input,.select,.textarea{width:100%;min-height:34px;padding:var(--sp-2) var(--sp-3);border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);color:var(--text);font-family:inherit;font-size:var(--fs-body)}.textarea{min-height:80px;resize:vertical}.input::placeholder,.textarea::placeholder{color:var(--text-faint)}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}.input:disabled,.select:disabled{background:var(--surface-2);color:var(--text-muted)}.input.mono{font-family:var(--font-mono)}.input.is-invalid{border-color:var(--danger)}.select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--text-muted) 50%),linear-gradient(135deg,var(--text-muted) 50%,transparent 50%);background-position:calc(100% - 16px) 50%,calc(100% - 11px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:var(--sp-8)}.field{display:flex;flex-direction:column;gap:var(--sp-1);margin-bottom:var(--sp-4)}.field__label{font-size:var(--fs-sm);font-weight:600;color:var(--text)}.field__label .req{color:var(--danger);margin-left:2px}.field__hint{font-size:var(--fs-xs);color:var(--text-muted)}.field__error{font-size:var(--fs-xs);color:var(--danger);min-height:1em}.field--check{flex-direction:row;align-items:center;gap:var(--sp-2)}.field--check input{width:16px;height:16px;accent-color:var(--accent)}.form-actions{display:flex;gap:var(--sp-2);margin-top:var(--sp-2)}.form-error{padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);border-radius:var(--radius);background:var(--danger-weak);color:var(--danger);font-size:var(--fs-sm)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.card__head{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-4);border-bottom:1px solid var(--border)}.card__title{font-size:var(--fs-body);font-weight:600}.card__body{padding:var(--sp-4)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--sp-4);margin-bottom:var(--sp-5)}.stat-card{padding:var(--sp-4);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.stat-card__label{font-size:var(--fs-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.stat-card__value{margin-top:var(--sp-2);font-size:var(--fs-2xl);font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}.stat-card__value.mono{font-family:var(--font-mono);font-size:var(--fs-xl)}.stat-card__sub{margin-top:var(--sp-1);font-size:var(--fs-xs);color:var(--text-faint)}.section-gap{margin-bottom:var(--sp-5)}.table-wrap{width:100%;overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface)}.card .table-wrap{border:0;border-radius:0}.table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}.table th,.table td{padding:var(--sp-2) var(--sp-3);text-align:left;white-space:nowrap;border-bottom:1px solid var(--border)}.table thead th{position:sticky;top:0;z-index:1;background:var(--surface-2);font-weight:600;color:var(--text-muted);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.03em}.table tbody tr:hover{background:var(--surface-hover)}.table tbody tr:last-child td{border-bottom:0}.table td.mono,.table th.mono{font-family:var(--font-mono);font-size:var(--fs-xs)}.table td.num{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--font-mono)}.table th.num{text-align:right}.table .cell-trunc{max-width:220px;overflow:hidden;text-overflow:ellipsis}.badge{display:inline-flex;align-items:center;gap:var(--sp-1);padding:2px var(--sp-2);border-radius:var(--radius-pill);font-size:var(--fs-xs);font-weight:600;line-height:1.4;background:var(--surface-3);color:var(--text-muted);white-space:nowrap}.badge-success{background:var(--success-weak);color:var(--success)}.badge-warning{background:var(--warning-weak);color:var(--warning)}.badge-danger{background:var(--danger-weak);color:var(--danger)}.badge-info{background:var(--info-weak);color:var(--info)}.badge-accent{background:var(--accent-weak);color:var(--accent-text)}.badge-dot:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.user-chip{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-2);border-radius:var(--radius);cursor:pointer;background:transparent;border:1px solid transparent}.user-chip:hover{background:var(--surface-hover)}.user-chip__avatar{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:var(--accent);color:var(--accent-fg);font-size:var(--fs-xs);font-weight:700;flex:none}.user-chip__meta{display:flex;flex-direction:column;line-height:1.2;min-width:0;text-align:left}.user-chip__name{font-size:var(--fs-sm);font-weight:600;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-chip__role{font-size:var(--fs-xs);color:var(--text-muted)}@media (max-width: 767px){.user-chip__meta{display:none}}.menu{position:absolute;right:0;top:calc(100% + 4px);min-width:200px;padding:var(--sp-1);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-md);z-index:var(--z-header)}.menu__head{padding:var(--sp-2) var(--sp-3);font-size:var(--fs-xs);color:var(--text-muted);word-break:break-all}.menu__item{display:block;width:100%;text-align:left;padding:var(--sp-2) var(--sp-3);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text);font-size:var(--fs-sm);cursor:pointer}.menu__item:hover{background:var(--surface-hover)}.menu__sep{height:1px;margin:var(--sp-1) 0;background:var(--border)}.pos-rel{position:relative}.tag-input{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-1);width:100%;min-height:34px;padding:var(--sp-1) var(--sp-2);border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);cursor:text}.tag-input.is-focused{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}.tag-input.is-invalid{border-color:var(--danger)}.tag-input.is-disabled{background:var(--surface-2);cursor:not-allowed}.tag-chip{display:inline-flex;align-items:center;gap:var(--sp-1);padding:2px var(--sp-1) 2px var(--sp-2);border-radius:var(--radius-pill);background:var(--surface-3);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:600;line-height:1.4;white-space:nowrap}.tag-chip__x{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:0;border-radius:50%;background:transparent;color:inherit;font-size:13px;line-height:1;cursor:pointer}.tag-chip__x:hover{background:var(--surface-hover);color:var(--text)}.tag-input__entry{flex:1;min-width:80px;border:0;outline:none;padding:var(--sp-1);background:transparent;color:var(--text);font-family:var(--font-mono);font-size:var(--fs-body)}.tag-input__entry::placeholder{color:var(--text-faint)}.tabs{display:flex;gap:var(--sp-1);border-bottom:1px solid var(--border);margin-bottom:var(--sp-4);overflow-x:auto}.tab{padding:var(--sp-2) var(--sp-3);border:0;border-bottom:2px solid transparent;background:transparent;color:var(--text-muted);font-size:var(--fs-body);font-weight:500;cursor:pointer;white-space:nowrap}.tab:hover{color:var(--text)}.tab.is-active{color:var(--accent-text);border-bottom-color:var(--accent)}.pager{display:flex;justify-content:center;padding:var(--sp-3);border-top:1px solid var(--border)}.skeleton{border-radius:var(--radius);background:linear-gradient(90deg,var(--skeleton) 25%,var(--skeleton-hi) 37%,var(--skeleton) 63%);background-size:400% 100%;animation:skeleton-shimmer 1.4s ease infinite}.skeleton-line{height:12px;margin:var(--sp-2) 0}@keyframes skeleton-shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}.state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-2);padding:var(--sp-10) var(--sp-4);text-align:center;color:var(--text-muted)}.state__icon{color:var(--text-faint);margin-bottom:var(--sp-1)}.state__icon svg{width:36px;height:36px}.state__title{font-size:var(--fs-body);font-weight:600;color:var(--text)}.state__desc{font-size:var(--fs-sm);max-width:42ch}.state--error .state__icon{color:var(--danger)}.spinner{width:20px;height:20px;border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-row{display:flex;align-items:center;justify-content:center;gap:var(--sp-2);padding:var(--sp-8);color:var(--text-muted)}.modal-backdrop{position:fixed;inset:0;display:grid;place-items:center;padding:var(--sp-4);background:var(--overlay);z-index:var(--z-modal)}.modal{width:100%;max-width:min(760px,92vw);max-height:90vh;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md)}.modal__head{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-4);border-bottom:1px solid var(--border)}.modal__title{flex:1;font-size:var(--fs-lg);font-weight:700}.modal__body{padding:var(--sp-4);overflow-y:auto}.modal__foot{display:flex;justify-content:flex-end;gap:var(--sp-2);padding:var(--sp-4);border-top:1px solid var(--border)}.toast-stack{position:fixed;right:var(--sp-4);bottom:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2);z-index:var(--z-toast);max-width:min(360px,92vw)}.toast{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--text-muted);box-shadow:var(--shadow-md);font-size:var(--fs-sm);animation:toast-in .16s ease}.toast--success{border-left-color:var(--success)}.toast--error{border-left-color:var(--danger)}.toast--warning{border-left-color:var(--warning)}.toast--info{border-left-color:var(--info)}.toast__msg{flex:1}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}.qr-box{display:grid;place-items:center;padding:var(--sp-3);background:#fff;border:1px solid var(--border);border-radius:var(--radius);width:200px;height:200px;margin:0 auto var(--sp-3)}.qr-box svg{width:100%;height:100%;display:block}.secret-code{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);font-family:var(--font-mono);font-size:var(--fs-sm);word-break:break-all}.secret-code__val{flex:1;letter-spacing:.08em}.otp-input{text-align:center;letter-spacing:.5em;font-family:var(--font-mono);font-size:var(--fs-xl)}.muted{color:var(--text-muted)}.faint{color:var(--text-faint)}.text-sm{font-size:var(--fs-sm)}.text-xs{font-size:var(--fs-xs)}.text-right{text-align:right}.nowrap{white-space:nowrap}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.gap-1{gap:var(--sp-1)}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.wrap{flex-wrap:wrap}.mt-1{margin-top:var(--sp-1)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.mb-2{margin-bottom:var(--sp-2)}.mb-3{margin-bottom:var(--sp-3)}.mb-4{margin-bottom:var(--sp-4)}.grow{flex:1}.full{width:100%}.hidden{display:none!important}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-4)}.toolbar .grow{min-width:140px}@media (max-width: 767px){.btn,.input,.select,.textarea{min-height:var(--tap)}.icon-btn{width:var(--tap);height:var(--tap)}.stat-grid{grid-template-columns:1fr 1fr;gap:var(--sp-3)}.stat-card__value{font-size:var(--fs-xl)}.form-actions{flex-direction:column;align-items:stretch}.modal{max-width:100%}.hide-mobile{display:none}}@media (max-width: 400px){.stat-grid{grid-template-columns:1fr}}
