.shell{display:grid;grid-template-columns:var(--sidebar-width) 1fr;min-height:100vh}.sidebar{background:var(--color-ink);color:#c7cfd8;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto}.sidebar__brand{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-5) var(--space-5) var(--space-4)}.sidebar__logo{width:32px;height:32px;border-radius:var(--radius-md);background:var(--color-primary);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:16px;flex-shrink:0}.sidebar__brand-name{font-size:var(--fs-lg);font-weight:var(--fw-bold);color:#fff;letter-spacing:-.01em}.sidebar__brand-sub{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#5b6775}.sidebar__nav{flex:1;padding:var(--space-2) var(--space-3)}.sidebar__section-label{font-size:10px;font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.08em;color:#5b6775;padding:var(--space-4) var(--space-3) var(--space-2)}.sidebar__link{display:flex;align-items:center;gap:var(--space-3);padding:9px var(--space-3);border-radius:var(--radius-md);color:#a6afba;font-size:var(--fs-md);font-weight:var(--fw-medium);transition:background .15s,color .15s;margin-bottom:2px}.sidebar__link:hover{background:#1c2733;color:#fff}.sidebar__link--active{background:var(--color-primary);color:#fff}.sidebar__link--active:hover{background:var(--color-primary)}.sidebar__foot{padding:var(--space-4);border-top:1px solid #1c2733;font-size:var(--fs-xs);color:#5b6775}.shell__main{display:flex;flex-direction:column;min-width:0}.topbar{height:var(--topbar-height);background:var(--color-white);border-bottom:1px solid var(--color-border);display:flex;align-items:center;gap:var(--space-4);padding:0 var(--space-6);position:sticky;top:0;z-index:20}.topbar__search{flex:1;max-width:420px}.topbar__spacer{flex:1}.topbar__icon-btn{position:relative;width:38px;height:38px;border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-white);color:var(--color-gray-600);display:flex;align-items:center;justify-content:center;transition:background .15s}.topbar__icon-btn:hover{background:var(--color-surface-2)}.topbar__badge{position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:var(--color-danger);color:#fff;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;border:2px solid var(--color-white)}.topbar__user{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-1) var(--space-2) var(--space-1) var(--space-1);border-radius:var(--radius-full);border:1px solid var(--color-border);background:var(--color-white);transition:background .15s;position:relative}.topbar__user:hover{background:var(--color-surface-2)}.topbar__user-name{font-size:var(--fs-base);font-weight:var(--fw-semibold);color:var(--color-ink);line-height:1.1}.topbar__user-role{font-size:var(--fs-xs);color:var(--color-gray-500)}.menu{position:absolute;right:0;top:calc(100% + 8px);background:var(--color-white);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);min-width:200px;padding:var(--space-2);z-index:30}.menu__item{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--fs-base);color:var(--color-ink);width:100%;background:none;border:none;text-align:left}.menu__item:hover{background:var(--color-surface-2)}.menu__item--danger{color:var(--color-danger)}.content{padding:var(--space-8);flex:1;max-width:1440px;width:100%}@media (max-width: 900px){.shell{grid-template-columns:1fr}.sidebar{display:none}.content{padding:var(--space-5)}}.auth{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}.auth__aside{background:var(--color-ink);color:#fff;padding:var(--space-12);display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.auth__aside:after{content:"";position:absolute;right:-120px;bottom:-120px;width:380px;height:380px;border-radius:50%;background:radial-gradient(circle,rgba(14,124,107,.55),transparent 70%)}.auth__brand{display:flex;align-items:center;gap:var(--space-3);position:relative;z-index:1}.auth__logo{width:40px;height:40px;border-radius:var(--radius-md);background:var(--color-primary);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:20px}.auth__tagline{position:relative;z-index:1}.auth__tagline h2{color:#fff;font-size:30px;font-weight:var(--fw-bold);line-height:1.25;letter-spacing:-.02em;max-width:420px}.auth__tagline p{color:#a6afba;font-size:var(--fs-lg);margin-top:var(--space-4);max-width:400px}.auth__footnote{position:relative;z-index:1;color:#5b6775;font-size:var(--fs-sm)}.auth__main{display:flex;align-items:center;justify-content:center;padding:var(--space-8);background:var(--color-white)}.auth__card{width:100%;max-width:380px}.auth__card h1{font-size:var(--fs-2xl);font-weight:var(--fw-bold)}.auth__card>p{color:var(--color-gray-500);margin-top:var(--space-2);margin-bottom:var(--space-8)}.auth__form{display:flex;flex-direction:column;gap:var(--space-5)}.auth__error{background:var(--color-danger-tint);color:var(--color-danger-strong);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);font-size:var(--fs-base)}.auth__hint{font-size:var(--fs-sm);color:var(--color-gray-500);text-align:center;margin-top:var(--space-4)}.auth__row{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-sm)}.auth__link{color:var(--color-primary);font-weight:var(--fw-medium)}.otp{display:flex;gap:var(--space-3);justify-content:center}.otp input{width:48px;height:56px;text-align:center;font-size:var(--fs-2xl);font-weight:var(--fw-semibold);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-ink)}.otp input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-tint)}@media (max-width: 820px){.auth{grid-template-columns:1fr}.auth__aside{display:none}}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-6);flex-wrap:wrap}.page-header__crumbs{font-size:var(--fs-sm);color:var(--color-gray-500);margin-bottom:var(--space-2);display:flex;align-items:center;gap:var(--space-2)}.page-header__sep{color:var(--color-gray-300)}.page-header__title{font-size:var(--fs-2xl);font-weight:var(--fw-bold);letter-spacing:-.01em}.page-header__subtitle{font-size:var(--fs-md);color:var(--color-gray-500);margin-top:var(--space-1)}.page-header__actions{display:flex;gap:var(--space-3);align-items:center}:root{--color-primary: #0e7c6b;--color-primary-hover: #0a6152;--color-primary-active: #0a4a3f;--color-primary-soft: #5fd3be;--color-primary-tint: #e3f2ee;--color-primary-tint-2: #b4d8d0;--color-ink: #101720;--color-ink-2: #16202b;--color-ink-3: #1c2733;--color-gray-700: #42505e;--color-gray-600: #5b6775;--color-gray-500: #77828f;--color-gray-400: #8a95a3;--color-gray-300: #a6afba;--color-gray-200: #c7cfd8;--color-border: #dfe4ea;--color-border-soft: #e4e9ee;--color-surface-3: #edf1f4;--color-surface-2: #f4f6f8;--color-surface-1: #f9fafb;--color-white: #ffffff;--color-success: #0e7c6b;--color-success-tint: #e3f2ee;--color-danger: #b3372f;--color-danger-strong: #8f2b24;--color-danger-tint: #fbebea;--color-warning: #b4761a;--color-warning-strong: #8a5a12;--color-warning-tint: #fbf0de;--color-warning-tint-soft: #fefbf5;--color-info: #2e6fa8;--color-info-strong: #5a92c0;--color-info-tint: #eaf1f7;--color-info-tint-2: #d5e2ef;--chart-1: #0e7c6b;--chart-2: #2e6fa8;--chart-3: #b4761a;--chart-4: #5fd3be;--chart-5: #5a92c0;--chart-6: #8f2b24;--chart-7: #4fa394;--chart-8: #a6afba;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--fs-xs: 11px;--fs-sm: 12px;--fs-base: 13px;--fs-md: 14px;--fs-lg: 16px;--fs-xl: 20px;--fs-2xl: 24px;--fs-3xl: 30px;--fw-regular: 400;--fw-medium: 500;--fw-semibold: 600;--fw-bold: 700;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 999px;--shadow-sm: 0 1px 2px rgba(16, 23, 32, .06);--shadow-md: 0 2px 8px rgba(16, 23, 32, .08);--shadow-lg: 0 8px 24px rgba(16, 23, 32, .12);--sidebar-width: 248px;--topbar-height: 60px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font-sans);font-size:var(--fs-base);line-height:1.5;color:var(--color-ink);background:var(--color-surface-2);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit}h1,h2,h3,h4,h5,h6{font-weight:var(--fw-semibold);color:var(--color-ink);line-height:1.3}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--color-gray-200);border-radius:var(--radius-full);border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:var(--color-gray-300);background-clip:content-box}.u-muted{color:var(--color-gray-500)}.u-mono{font-family:var(--font-mono)}.u-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid{display:grid;gap:var(--space-5)}.grid--kpi{grid-template-columns:repeat(4,1fr)}.grid--3{grid-template-columns:repeat(3,1fr)}.grid--2{grid-template-columns:repeat(2,1fr)}.grid--main-aside{grid-template-columns:2fr 1fr}.stack{display:flex;flex-direction:column;gap:var(--space-5)}.row{display:flex;align-items:center;gap:var(--space-3)}.row--between{justify-content:space-between}.row--wrap{flex-wrap:wrap}.mt-4{margin-top:var(--space-4)}.mt-6{margin-top:var(--space-6)}.toolbar{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-5);flex-wrap:wrap}.toolbar__grow{flex:1;min-width:200px;max-width:360px}.cell-main{font-weight:var(--fw-medium);color:var(--color-ink)}.cell-sub{font-size:var(--fs-sm);color:var(--color-gray-500)}.user-cell{display:flex;align-items:center;gap:var(--space-3)}.chart-legend{display:flex;flex-wrap:wrap;gap:var(--space-4);margin-top:var(--space-3);font-size:var(--fs-sm);color:var(--color-gray-600)}.chart-legend__item{display:flex;align-items:center;gap:var(--space-2)}.chart-legend__swatch{width:10px;height:10px;border-radius:3px}.stat-inline{display:flex;flex-direction:column;gap:2px}.stat-inline__value{font-size:var(--fs-xl);font-weight:var(--fw-bold);font-variant-numeric:tabular-nums}.stat-inline__label{font-size:var(--fs-sm);color:var(--color-gray-500)}@media (max-width: 1100px){.grid--kpi{grid-template-columns:repeat(2,1fr)}.grid--3,.grid--main-aside{grid-template-columns:1fr}}@media (max-width: 720px){.grid--kpi,.grid--2{grid-template-columns:1fr}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);font-size:var(--fs-base);font-weight:var(--fw-medium);line-height:1;border:1px solid transparent;border-radius:var(--radius-md);padding:0 var(--space-4);height:36px;white-space:nowrap;transition:background .15s,border-color .15s,color .15s,box-shadow .15s;-webkit-user-select:none;user-select:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--sm{height:30px;padding:0 var(--space-3);font-size:var(--fs-sm)}.btn--lg{height:44px;padding:0 var(--space-6);font-size:var(--fs-md)}.btn--block{width:100%}.btn--primary{background:var(--color-primary);color:var(--color-white)}.btn--primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn--primary:active:not(:disabled){background:var(--color-primary-active)}.btn--secondary{background:var(--color-white);border-color:var(--color-border);color:var(--color-ink)}.btn--secondary:hover:not(:disabled){background:var(--color-surface-2);border-color:var(--color-gray-200)}.btn--ghost{background:transparent;color:var(--color-gray-600)}.btn--ghost:hover:not(:disabled){background:var(--color-surface-3);color:var(--color-ink)}.btn--danger{background:var(--color-danger);color:var(--color-white)}.btn--danger:hover:not(:disabled){background:var(--color-danger-strong)}.btn--danger-soft{background:var(--color-danger-tint);color:var(--color-danger-strong)}.btn--danger-soft:hover:not(:disabled){background:#f7dedc}.card{background:var(--color-white);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.card__header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);padding:var(--space-5) var(--space-5) 0}.card__title{font-size:var(--fs-md);font-weight:var(--fw-semibold)}.card__subtitle{font-size:var(--fs-sm);color:var(--color-gray-500);margin-top:2px}.card__body{padding:var(--space-5)}.card__footer{padding:var(--space-4) var(--space-5);border-top:1px solid var(--color-border-soft)}.badge{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--fs-xs);font-weight:var(--fw-medium);line-height:1;padding:4px 8px;border-radius:var(--radius-full);white-space:nowrap}.badge__dot{width:6px;height:6px;border-radius:50%;background:currentColor}.badge--neutral{background:var(--color-surface-3);color:var(--color-gray-600)}.badge--success{background:var(--color-success-tint);color:var(--color-primary-active)}.badge--danger{background:var(--color-danger-tint);color:var(--color-danger-strong)}.badge--warning{background:var(--color-warning-tint);color:var(--color-warning-strong)}.badge--info{background:var(--color-info-tint);color:var(--color-info)}.field{display:flex;flex-direction:column;gap:var(--space-2)}.field__label{font-size:var(--fs-sm);font-weight:var(--fw-medium);color:var(--color-gray-700)}.field__hint{font-size:var(--fs-sm);color:var(--color-gray-500)}.field__error{font-size:var(--fs-sm);color:var(--color-danger)}.input{height:38px;padding:0 var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-white);color:var(--color-ink);font-size:var(--fs-base);transition:border-color .15s,box-shadow .15s;width:100%}.input::placeholder{color:var(--color-gray-400)}.input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-tint)}.input--invalid{border-color:var(--color-danger)}textarea.input{height:auto;padding:var(--space-3);resize:vertical;min-height:88px;line-height:1.5}select.input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2377828f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.input-group{position:relative;display:flex;align-items:center}.input-group__icon{position:absolute;left:12px;color:var(--color-gray-400);display:flex;pointer-events:none}.input-group__icon~.input{padding-left:38px}.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--color-primary-tint);color:var(--color-primary-active);font-weight:var(--fw-semibold);font-size:var(--fs-sm);flex-shrink:0;overflow:hidden}.avatar img{width:100%;height:100%;object-fit:cover}.table-wrap{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:var(--fs-base)}.table thead th{text-align:left;font-size:var(--fs-xs);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.04em;color:var(--color-gray-500);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border);white-space:nowrap}.table tbody td{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border-soft);color:var(--color-ink);vertical-align:middle}.table tbody tr:last-child td{border-bottom:none}.table tbody tr{transition:background .12s}.table--hover tbody tr:hover{background:var(--color-surface-1);cursor:pointer}.table__num{text-align:right;font-variant-numeric:tabular-nums}.tabs{display:flex;gap:var(--space-1);border-bottom:1px solid var(--color-border)}.tab{padding:var(--space-3) var(--space-4);font-size:var(--fs-base);font-weight:var(--fw-medium);color:var(--color-gray-500);border-bottom:2px solid transparent;margin-bottom:-1px;background:none;border-top:none;border-left:none;border-right:none;transition:color .15s,border-color .15s}.tab:hover{color:var(--color-ink)}.tab--active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.modal__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#10172080;display:flex;align-items:center;justify-content:center;padding:var(--space-6);z-index:100;animation:fade-in .15s ease}.modal{background:var(--color-white);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:480px;max-height:90vh;overflow:auto;animation:modal-in .18s ease}.modal__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);padding:var(--space-5);border-bottom:1px solid var(--color-border-soft)}.modal__body{padding:var(--space-5)}.modal__footer{padding:var(--space-4) var(--space-5);border-top:1px solid var(--color-border-soft);display:flex;justify-content:flex-end;gap:var(--space-3)}@keyframes fade-in{0%{opacity:0}}@keyframes modal-in{0%{opacity:0;transform:translateY(8px) scale(.98)}}.kpi{background:var(--color-white);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-5);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:var(--space-2)}.kpi__label{font-size:var(--fs-xs);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.04em;color:var(--color-gray-500)}.kpi__value{font-size:var(--fs-3xl);font-weight:var(--fw-bold);color:var(--color-ink);line-height:1.1;font-variant-numeric:tabular-nums}.kpi__foot{display:flex;align-items:center;gap:var(--space-2);font-size:var(--fs-sm)}.kpi__delta{display:inline-flex;align-items:center;gap:2px;font-weight:var(--fw-medium)}.kpi__delta--up{color:var(--color-primary)}.kpi__delta--down{color:var(--color-danger)}.kpi__delta--flat{color:var(--color-gray-500)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-12) var(--space-6);text-align:center;color:var(--color-gray-500)}.empty-state__icon{color:var(--color-gray-300)}.divider{height:1px;background:var(--color-border-soft);border:none;margin:var(--space-4) 0}.spinner{width:20px;height:20px;border:2px solid var(--color-primary-tint);border-top-color:var(--color-primary);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
