:root{--color-surface: #ffffff;--color-on-surface: #1f2937;--color-surface-muted: #f7f7f5;--color-on-surface-muted: #4b5563;--color-surface-inset: #efefeb;--color-surface-inverse: #111827;--color-on-surface-inverse: #f9fafb;--color-on-surface-inverse-muted: #c9d1d9;--color-primary: #1e3a5f;--color-on-primary: #ffffff;--color-primary-strong: #152b47;--color-primary-soft: #dce6f2;--color-accent: #b45309;--color-on-accent: #ffffff;--color-accent-strong: #92400e;--color-accent-soft: #fef3c7;--color-danger: #dc2626;--color-on-danger: #ffffff;--color-danger-strong: #b91c1c;--color-danger-soft: #fee2e2;--color-success: #15803d;--color-on-success: #ffffff;--color-success-strong: #166534;--color-success-soft: #dcfce7;--color-info: #2563eb;--color-on-info: #ffffff;--color-info-strong: #1d4ed8;--color-info-soft: #dbeafe;--color-text-strong: #111827;--color-text-muted: #6b7280;--color-border: #e5e7eb;--color-border-strong: #9ca3af;--color-map-placeholder: #e8edea;--color-text: var(--color-on-surface);--color-text-inverse: var(--color-on-primary);--color-background: var(--color-surface-muted);--color-outline: var(--color-border-strong);--color-error: var(--color-danger);--color-on-error: var(--color-on-danger);--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--font-xs: 12px;--font-sm: 14px;--font-base: 16px;--font-lg: 18px;--font-xl: 22px;--font-2xl: 28px;--font-3xl: 34px;--w-regular: 400;--w-medium: 500;--w-semibold: 600;--w-bold: 700;--line-tight: 1.25;--line-normal: 1.5;--sp-0: 0px;--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;--sp-16: 64px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-full: 999px;--shadow-sm: 0 1px 2px rgba(16, 24, 40, .06);--shadow-md: 0 4px 12px rgba(16, 24, 40, .1);--shadow-lg: 0 8px 24px rgba(16, 24, 40, .14);--dur-fast: .12s;--dur-normal: .2s}@media(prefers-color-scheme:dark){:root{--color-surface: #1c1c1e;--color-on-surface: #e5e7eb;--color-surface-muted: #121214;--color-on-surface-muted: #9ca3af;--color-surface-inset: #2c2c2e;--color-surface-inverse: #1c1c1e;--color-on-surface-inverse: #e5e7eb;--color-on-surface-inverse-muted: #9ca3af;--color-primary: #8fb4e3;--color-on-primary: #0b1f38;--color-primary-strong: #b4cdf0;--color-primary-soft: #22354f;--color-accent: #fbbf24;--color-on-accent: #451a03;--color-accent-strong: #fcd34d;--color-accent-soft: #451a03;--color-danger: #f87171;--color-on-danger: #450a0a;--color-danger-strong: #fca5a5;--color-danger-soft: #450a0a;--color-success: #4ade80;--color-on-success: #052e16;--color-success-strong: #86efac;--color-success-soft: #052e16;--color-info: #60a5fa;--color-on-info: #172554;--color-info-strong: #93c5fd;--color-info-soft: #172554;--color-text-strong: #f9fafb;--color-text-muted: #9ca3af;--color-border: #3a3a3c;--color-border-strong: #636366;--color-map-placeholder: #242a28;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow-md: 0 4px 12px rgba(0, 0, 0, .5);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .6)}}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-family);background:var(--color-surface-muted);color:var(--color-text);font-size:var(--font-base);line-height:var(--line-normal)}a{color:var(--color-info-strong)}button{font-family:inherit}.layout{display:flex;min-height:100vh}.sidebar{width:220px;flex:none;background:var(--color-surface-inverse);color:var(--color-on-surface-inverse);padding:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-1)}.sidebar .brand{font-weight:var(--w-bold);font-size:var(--font-lg);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);color:var(--color-on-surface-inverse)}.sidebar a{color:var(--color-on-surface-inverse-muted);text-decoration:none;padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm);font-size:var(--font-sm);min-height:44px;display:flex;align-items:center;gap:var(--sp-2)}.sidebar a.active,.sidebar a:hover{background:#ffffff1f;color:var(--color-on-surface-inverse)}.sidebar .nav-count{margin-left:auto}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:var(--sp-3) var(--sp-5);display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap}.topbar h1{font-size:var(--font-lg);font-weight:var(--w-semibold)}.topbar .who{margin-left:auto;font-size:var(--font-sm);color:var(--color-text-muted);display:flex;align-items:center;gap:var(--sp-3)}.content{padding:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-4)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--sp-4);box-shadow:var(--shadow-sm)}.card h2{font-size:var(--font-base);font-weight:var(--w-semibold);margin-bottom:var(--sp-3);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--sp-3)}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--sp-4)}.grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--sp-2)}.two-col{display:grid;grid-template-columns:1fr 2fr;gap:var(--sp-4);align-items:start}.kpi{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--sp-4);box-shadow:var(--shadow-sm)}.kpi .l{font-size:var(--font-xs);color:var(--color-text-muted);margin-bottom:var(--sp-1)}.kpi .v{font-size:var(--font-2xl);font-weight:var(--w-bold);color:var(--color-text-strong)}.kpi .d{font-size:var(--font-xs);margin-top:var(--sp-1);color:var(--color-text-muted)}.kpi .d.up{color:var(--color-success-strong)}.kpi .d.down{color:var(--color-danger-strong)}.kpi.north{grid-column:1 / -1;border-color:var(--color-primary);background:var(--color-primary-soft)}.chip{display:inline-flex;align-items:center;gap:var(--sp-1);padding:2px var(--sp-2);border-radius:var(--radius-full);font-size:var(--font-xs);font-weight:var(--w-medium);white-space:nowrap}.chip-ok{background:var(--color-success-soft);color:var(--color-success-strong)}.chip-warn{background:var(--color-accent-soft);color:var(--color-accent-strong)}.chip-danger{background:var(--color-danger-soft);color:var(--color-danger-strong)}.chip-info{background:var(--color-info-soft);color:var(--color-info-strong)}.chip-off{background:var(--color-surface-inset);color:var(--color-text-muted)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:44px;padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-md);border:1px solid transparent;font-size:var(--font-base);font-weight:var(--w-semibold);cursor:pointer;text-decoration:none;color:var(--color-text);background:var(--color-surface);transition:background var(--dur-fast)}.btn:disabled{cursor:not-allowed;color:var(--color-text-muted)}.btn-primary:disabled{background:var(--color-primary-soft);color:var(--color-primary-strong)}.btn-danger:disabled{background:var(--color-danger-soft);color:var(--color-danger-strong)}.btn-outline:disabled{border-color:var(--color-border);color:var(--color-text-muted)}.btn-primary{background:var(--color-primary);color:var(--color-text-inverse)}.btn-primary:hover:not(:disabled){background:var(--color-primary-strong)}.btn-danger{background:var(--color-danger);color:var(--color-text-inverse)}.btn-danger:hover:not(:disabled){background:var(--color-danger-strong)}.btn-outline{border-color:var(--color-border-strong);background:var(--color-surface)}.btn-outline:hover:not(:disabled){background:var(--color-surface-muted)}.btn-block{width:100%}.btn-sm{min-height:36px;padding:var(--sp-2) var(--sp-3);font-size:var(--font-sm)}.field label{display:block;font-size:var(--font-sm);font-weight:var(--w-medium);margin-bottom:var(--sp-1)}.input,select.input,textarea.input{width:100%;min-height:44px;padding:var(--sp-3);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);font-size:var(--font-base);font-family:inherit;background:var(--color-surface);color:var(--color-text)}textarea.input{min-height:64px;resize:vertical}.table-scroll{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:var(--font-sm)}th,td{text-align:left;padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--color-border);vertical-align:top}th{font-weight:var(--w-semibold);color:var(--color-text-muted);font-size:var(--font-xs);text-transform:uppercase;letter-spacing:.02em;white-space:nowrap}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}tr.clickable{cursor:pointer}tr.clickable:hover{background:var(--color-surface-muted)}.mono{font-family:var(--font-mono);font-size:var(--font-sm)}.alert{display:flex;align-items:center;gap:var(--sp-3);background:var(--color-danger-soft);border:1px solid var(--color-danger);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);color:var(--color-danger-strong);font-size:var(--font-sm)}.alert-info{background:var(--color-info-soft);border-color:var(--color-info);color:var(--color-info-strong)}.alert-warn{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-accent-strong)}.note{border:1px dashed var(--color-border-strong);border-radius:var(--radius-md);padding:var(--sp-3);font-size:var(--font-xs);color:var(--color-text-muted)}.note b{color:var(--color-text)}.muted{color:var(--color-text-muted);font-size:var(--font-sm)}.center{text-align:center}.empty{border:1px dashed var(--color-border-strong);border-radius:var(--radius-md);padding:var(--sp-8);text-align:center;color:var(--color-text-muted);font-size:var(--font-sm)}.error-text{color:var(--color-danger-strong);font-size:var(--font-sm)}.qrow{display:flex;justify-content:space-between;align-items:center;padding:var(--sp-2) 0;border-bottom:1px solid var(--color-border);font-size:var(--font-sm);gap:var(--sp-2)}.qrow:last-child{border-bottom:none}.list-row{display:block;padding:var(--sp-3);border-bottom:1px solid var(--color-border);text-decoration:none;color:var(--color-text);cursor:pointer;background:none;border-top:none;border-left:none;border-right:none;width:100%;text-align:left;font-size:var(--font-sm)}.list-row:hover{background:var(--color-surface-muted)}.list-row .row-top{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-1)}.kv{display:grid;grid-template-columns:180px 1fr;gap:var(--sp-2);padding:var(--sp-1) 0;font-size:var(--font-sm)}.kv dt{color:var(--color-text-muted)}.kv dd{color:var(--color-text)}.tl{display:grid;grid-template-columns:88px 1fr;gap:var(--sp-3);padding:var(--sp-2) 0;border-bottom:1px solid var(--color-border);font-size:var(--font-sm)}.tl:last-child{border-bottom:none}.tl .time{font-family:var(--font-mono);font-size:var(--font-xs);color:var(--color-text-muted);white-space:nowrap}.imgbox{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-inset);min-height:96px;padding:var(--sp-3);font-size:var(--font-sm);display:flex;flex-direction:column;gap:var(--sp-2);justify-content:space-between}.imgbox .exp{align-self:flex-start}.imgs{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--sp-3)}.sw{width:44px;height:24px;border-radius:var(--radius-full);background:var(--color-border-strong);position:relative;flex:none;display:inline-block;cursor:pointer;border:none}.sw:after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:var(--color-surface);transition:left var(--dur-normal)}.sw.on{background:var(--color-primary)}.sw.on:after{left:23px}.flag{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:1px solid var(--color-border)}.flag:last-child{border-bottom:none}.filters{display:flex;gap:var(--sp-3);align-items:flex-end;flex-wrap:wrap}.filters .field{min-width:160px;flex:1}.alloc{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:1px solid var(--color-border)}.alloc .n{width:28px;height:28px;border-radius:50%;background:var(--color-primary-soft);color:var(--color-primary-strong);display:flex;align-items:center;justify-content:center;font-weight:var(--w-bold);flex:none}.alloc:last-of-type{border-bottom:none}.pager{display:flex;gap:var(--sp-2);justify-content:flex-end;margin-top:var(--sp-3)}.skeleton{background:linear-gradient(90deg,var(--color-surface-inset) 25%,var(--color-surface-muted) 50%,var(--color-surface-inset) 75%);background-size:200% 100%;animation:shimmer 1.4s infinite;border-radius:var(--radius-sm);min-height:20px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--sp-4);background:var(--color-surface-inset)}.login-card{width:100%;max-width:400px;display:flex;flex-direction:column;gap:var(--sp-4)}.login-logo{width:56px;height:56px;margin:0 auto var(--sp-2);border-radius:var(--radius-lg);background:var(--color-text-strong);color:var(--color-text-inverse);display:flex;align-items:center;justify-content:center;font-size:var(--font-xl);font-weight:var(--w-bold)}.legal-box{border:2px dashed var(--color-border-strong);border-radius:var(--radius-lg);padding:var(--sp-8);text-align:center;background:var(--color-surface)}@media(max-width:768px){.layout{flex-direction:column}.sidebar{width:100%;flex-direction:row;overflow-x:auto;padding:var(--sp-2);gap:var(--sp-1)}.sidebar .brand{display:none}.sidebar a{white-space:nowrap;min-height:44px}.two-col{grid-template-columns:1fr}.content{padding:var(--sp-3)}}@media(prefers-color-scheme:dark){.sidebar{border-right:1px solid var(--color-border)}.kpi.north{background:var(--color-primary-soft)}a{color:var(--color-info-strong)}}.palette-backdrop{position:fixed;inset:0;background:#0006;z-index:60;display:flex;align-items:flex-start;justify-content:center;padding:12vh var(--sp-4) var(--sp-4)}.palette{width:100%;max-width:560px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);overflow:hidden}.palette .card{border:none;box-shadow:none}.palette-input{border:none;border-bottom:1px solid var(--color-border);border-radius:0;font-size:var(--font-lg)}.palette-input:focus{outline:2px solid var(--color-primary);outline-offset:-2px}.palette-list{list-style:none;max-height:320px;overflow-y:auto}.palette-item{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);width:100%;padding:var(--sp-3) var(--sp-4);border:none;background:none;font-size:var(--font-sm);color:var(--color-text);cursor:pointer;text-align:left;min-height:44px}.palette-item.active,.palette-item:hover{background:var(--color-primary-soft)}.palette-empty{padding:var(--sp-4)}kbd{font-family:var(--font-mono);font-size:var(--font-xs);background:var(--color-surface-inset);border:1px solid var(--color-border-strong);border-bottom-width:2px;border-radius:var(--radius-sm);padding:1px 6px}.keys-row{display:contents}.keys-row dt{text-align:right}.table-wrap{position:relative}.table-tools{display:flex;justify-content:flex-end;margin-bottom:var(--sp-2);position:relative}.col-menu{position:absolute;right:0;top:100%;z-index:20;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);padding:var(--sp-2);min-width:180px;display:flex;flex-direction:column}.col-menu-item{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2);font-size:var(--font-sm);cursor:pointer;border-radius:var(--radius-sm)}.col-menu-item:hover{background:var(--color-surface-muted)}.th-sort{background:none;border:none;color:inherit;font:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer;padding:0;white-space:nowrap}.th-sort:hover{color:var(--color-text)}tr.cursor-on{outline:2px solid var(--color-primary);outline-offset:-2px;background:var(--color-primary-soft)}.heat{width:100%;border-radius:var(--radius-md);background:var(--color-surface-inset);display:block}.heat-legend{display:flex;gap:var(--sp-3);align-items:center;font-size:var(--font-xs);color:var(--color-text-muted);margin-top:var(--sp-2)}.heat-legend i{display:inline-block;width:14px;height:14px;border-radius:3px}.qactions{display:flex;gap:var(--sp-2);flex-wrap:wrap}.qactions .btn{min-height:44px}.sla-due{font-variant-numeric:tabular-nums;font-weight:var(--w-semibold)}.sla-over{color:var(--color-danger-strong)}.form-row{display:flex;gap:var(--sp-3);align-items:flex-end;flex-wrap:wrap}.form-row .field{flex:1;min-width:140px}@media(max-width:640px){.table-scroll table.responsive-cards,.table-scroll table.responsive-cards thead,.table-scroll table.responsive-cards tbody,.table-scroll table.responsive-cards tr,.table-scroll table.responsive-cards td{display:block;width:100%}.table-scroll table.responsive-cards thead{display:none}.table-scroll table.responsive-cards tr{border:1px solid var(--color-border);border-radius:var(--radius-md);margin-bottom:var(--sp-3);padding:var(--sp-2);background:var(--color-surface)}.table-scroll table.responsive-cards td{border-bottom:none;display:flex;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-2)}.table-scroll table.responsive-cards td:before{content:attr(data-label);font-size:var(--font-xs);color:var(--color-text-muted);font-weight:var(--w-semibold);text-transform:uppercase}.grid4{grid-template-columns:repeat(2,1fr)}.topbar .who{width:100%;justify-content:flex-end;flex-wrap:wrap}}
