:root{color-scheme:dark;--color-paper-0: oklch(17% .012 250);--color-paper-1: oklch(20% .014 250);--color-paper-2: oklch(24% .016 250);--color-paper-3: oklch(29% .018 250);--color-paper-glass: oklch(20% .014 250 / .82);--color-ink-0: oklch(96% .006 250);--color-ink-1: oklch(78% .01 250);--color-ink-2: oklch(62% .012 250);--color-ink-3: oklch(48% .012 250);--color-line: oklch(30% .016 250);--color-line-soft: oklch(26% .014 250);--color-line-strong: oklch(38% .02 250);--color-accent: oklch(62% .18 258);--color-accent-hi: oklch(70% .17 258);--color-accent-dim: oklch(45% .12 258);--color-accent-ink: oklch(97% .02 258);--color-accent-ghost: oklch(62% .18 258 / .14);--color-ok: oklch(74% .16 158);--color-ok-ghost: oklch(74% .16 158 / .14);--color-warn: oklch(78% .15 78);--color-warn-ghost: oklch(78% .15 78 / .15);--color-danger: oklch(66% .2 26);--color-danger-ghost: oklch(66% .2 26 / .16);--color-info: oklch(74% .13 220);--color-cool: oklch(64% .15 240);--color-hot: oklch(64% .2 26);--color-focus: oklch(80% .14 258);--font-display: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif;--font-body: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Code", Menlo, monospace;--text-xs: 10.5px;--text-sm: 12px;--text-base: 13px;--text-md: 14px;--text-lg: 16px;--text-xl: 19px;--text-2xl: 24px;--text-display: 30px;--space-2xs: 2px;--space-xs: 4px;--space-sm: 8px;--space-md: 12px;--space-lg: 16px;--space-xl: 24px;--space-2xl: 32px;--space-3xl: 48px;--radius-xs: 5px;--radius-sm: 8px;--radius-md: 11px;--radius-lg: 16px;--radius-pill: 999px;--shadow-sm: 0 1px 2px oklch(0% 0 0 / .3);--shadow-md: 0 8px 24px oklch(0% 0 0 / .36);--shadow-lg: 0 16px 48px oklch(0% 0 0 / .48);--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--dur-fast: .12s;--dur-mid: .2s;--dur-slow: .32s}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;width:100%;overflow:clip}body{font-family:var(--font-body);font-size:var(--text-base);color:var(--color-ink-0);background:var(--color-paper-0);-webkit-font-smoothing:antialiased}.app{position:relative;height:100vh;width:100vw;overflow:clip;background:var(--color-paper-0)}.app>.scene-layer{position:absolute;top:0;right:0;bottom:0;left:0}.topbar{position:absolute;top:0;left:0;right:0;height:52px;display:flex;align-items:center;gap:var(--space-lg);padding:0 var(--space-lg);background:linear-gradient(to bottom,var(--color-paper-1),var(--color-paper-glass));-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--color-line);z-index:40}.brand{display:flex;align-items:center;gap:var(--space-sm);font-family:var(--font-display);font-weight:700;font-size:var(--text-lg);letter-spacing:-.01em;color:var(--color-ink-0);white-space:nowrap}.brand .mark{width:22px;height:22px;border-radius:var(--radius-xs);background:radial-gradient(circle at 30% 25%,var(--color-accent-hi),var(--color-accent-dim));box-shadow:inset 0 0 0 1px #ffffff1a,0 0 12px var(--color-accent-ghost)}.brand small{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:500;color:var(--color-ink-2);letter-spacing:.02em;padding:2px 6px;border:1px solid var(--color-line);border-radius:var(--radius-pill)}.breadcrumb{display:flex;align-items:center;gap:var(--space-xs);font-size:var(--text-sm);color:var(--color-ink-2);min-width:0}.breadcrumb .crumb{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border-radius:var(--radius-sm);color:var(--color-ink-1);cursor:pointer;border:1px solid transparent;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);white-space:nowrap}.breadcrumb .crumb:hover{background:var(--color-paper-3);color:var(--color-ink-0)}.breadcrumb .crumb.current{color:var(--color-ink-0);font-weight:600}.breadcrumb .sep{color:var(--color-ink-3)}.breadcrumb .swatch{width:9px;height:9px;border-radius:3px;flex:none}.topbar-spacer{flex:1}.topbar-right{display:flex;align-items:center;gap:var(--space-sm)}.scene-switch{display:flex;padding:3px;gap:2px;background:var(--color-paper-2);border:1px solid var(--color-line);border-radius:var(--radius-pill)}.scene-switch button{border:none;background:transparent;color:var(--color-ink-2);padding:5px 12px;border-radius:var(--radius-pill);font-size:var(--text-sm);font-weight:550}.scene-switch button:hover{color:var(--color-ink-0);background:transparent}.scene-switch button.active{background:var(--color-accent);color:var(--color-accent-ink);box-shadow:var(--shadow-sm)}.panel{position:absolute;top:68px;left:var(--space-lg);width:322px;max-height:calc(100vh - 84px);overflow-y:auto;padding:var(--space-lg);background:var(--color-paper-glass);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--color-line);border-radius:var(--radius-lg);color:var(--color-ink-0);font-size:var(--text-base);box-shadow:var(--shadow-lg);animation:panel-in var(--dur-slow) var(--ease-out)}@keyframes panel-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.panel h1{margin:0;font-family:var(--font-display);font-size:var(--text-xl);font-weight:700;letter-spacing:-.01em}.subtitle{margin:2px 0 var(--space-lg);color:var(--color-ink-2);font-size:var(--text-sm)}.row{margin-bottom:var(--space-sm)}button{font:inherit;font-weight:550;cursor:pointer;border-radius:var(--radius-sm);border:1px solid var(--color-line-strong);background:var(--color-paper-2);color:var(--color-ink-0);padding:8px 12px;transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}button:hover{background:var(--color-paper-3);border-color:var(--color-line-strong)}button:active{transform:translateY(1px)}button:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}button.primary{width:100%;background:var(--color-accent);border-color:var(--color-accent);color:var(--color-accent-ink);font-weight:650;padding:10px 12px}button.primary:hover{background:var(--color-accent-hi);border-color:var(--color-accent-hi)}button.primary:disabled{opacity:.5;cursor:default;transform:none}button.wide{width:100%}button.active{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-accent-ink)}.segmented{display:flex;gap:4px;padding:3px;background:var(--color-paper-2);border:1px solid var(--color-line);border-radius:var(--radius-md)}.segmented button{flex:1;border:none;background:transparent;color:var(--color-ink-2);padding:7px 10px;font-size:var(--text-sm)}.segmented button:hover{background:var(--color-paper-3);color:var(--color-ink-0)}.segmented button.active{background:var(--color-accent);color:var(--color-accent-ink)}.section{margin-top:var(--space-lg);padding-top:var(--space-md);border-top:1px solid var(--color-line-soft)}.section h2{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--color-ink-2);font-weight:600;margin:0 0 var(--space-sm)}.section h3{margin:0 0 var(--space-sm);font-size:var(--text-md);font-family:var(--font-display);font-weight:650}.kv{display:flex;justify-content:space-between;gap:var(--space-sm);padding:4px 0;border-bottom:1px solid var(--color-line-soft);font-size:var(--text-sm)}.kv:last-child{border-bottom:none}.kv span:first-child{color:var(--color-ink-2)}.kv span:last-child{font-family:var(--font-mono);color:var(--color-ink-0);font-variant-numeric:tabular-nums}.status{font-size:var(--text-sm);margin:var(--space-sm) 0 var(--space-md);padding:8px 10px;border-radius:var(--radius-sm);background:var(--color-paper-2);border:1px solid var(--color-line-soft)}.ok{color:var(--color-ok)}.warn{color:var(--color-warn)}.muted{color:var(--color-ink-3)}.footnote{margin-top:var(--space-lg);font-size:var(--text-xs);color:var(--color-ink-3);line-height:1.55}.hint{margin:var(--space-sm) 0 0;font-size:var(--text-xs);color:var(--color-ink-3);line-height:1.55}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:6px}.grid2 button{font-size:var(--text-sm);padding:7px 8px}.tool-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}.tool-grid button{font-size:var(--text-xs);padding:8px 4px}.preset-row{display:flex;gap:4px}.preset-row button{flex:1;padding:6px 4px;font-size:var(--text-xs)}.field{display:block;margin:var(--space-sm) 0}.field span{display:block;color:var(--color-ink-2);font-size:var(--text-sm);margin-bottom:var(--space-xs)}.field input[type=range]{width:100%;accent-color:var(--color-accent)}.field b.warn{color:var(--color-danger)}.field b.ok{color:var(--color-ok)}.ef{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin:6px 0}.ef span{color:var(--color-ink-2);font-size:var(--text-sm)}.ef input,.ef select{width:128px;background:var(--color-paper-2);color:var(--color-ink-0);border:1px solid var(--color-line-strong);border-radius:var(--radius-xs);padding:6px 8px;font:inherit;font-size:var(--text-sm)}.ef input:focus-visible,.ef select:focus-visible{outline:2px solid var(--color-focus);outline-offset:1px;border-color:var(--color-accent)}.predict{margin-top:var(--space-sm);padding:var(--space-sm) 10px;background:var(--color-accent-ghost);border:1px solid var(--color-accent-dim);border-radius:var(--radius-sm)}.predict .kv{border-bottom:none;padding:2px 0}.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:var(--radius-pill);font-size:var(--text-xs);font-weight:600;letter-spacing:.01em;border:1px solid var(--color-line);background:var(--color-paper-2);color:var(--color-ink-1)}.badge.accent{background:var(--color-accent-ghost);border-color:var(--color-accent-dim);color:var(--color-accent-hi)}.badge.ok{background:var(--color-ok-ghost);border-color:transparent;color:var(--color-ok)}.badge.warn{background:var(--color-warn-ghost);border-color:transparent;color:var(--color-warn)}.badge.danger{background:var(--color-danger-ghost);border-color:transparent;color:var(--color-danger)}.scope-note{margin:var(--space-sm) 0;padding:8px 10px;border-radius:var(--radius-sm);background:var(--color-warn-ghost);border:1px solid transparent;color:var(--color-warn);font-size:var(--text-xs);line-height:1.5}.warn-item{display:flex;gap:var(--space-xs);font-size:var(--text-sm);line-height:1.45;margin:6px 0;padding:7px 9px;border-radius:var(--radius-sm);background:var(--color-danger-ghost);color:var(--color-ink-1);cursor:pointer;transition:background var(--dur-fast) var(--ease-out)}.warn-item:hover{background:var(--color-danger-ghost);color:var(--color-ink-0)}.warn-item .dot{color:var(--color-danger);flex:none}.section p.warn{font-size:var(--text-sm);line-height:1.45;margin:4px 0}.section p.warn.click{cursor:pointer}.section p.warn.click:hover{color:var(--color-danger)}.section-chips{display:flex;flex-direction:column;gap:6px}.section-chip{display:flex;align-items:center;gap:var(--space-sm);padding:8px 10px;border-radius:var(--radius-sm);background:var(--color-paper-2);border:1px solid var(--color-line-soft);cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),background var(--dur-fast) var(--ease-out)}.section-chip:hover{border-color:var(--color-line-strong);background:var(--color-paper-3)}.section-chip.active{border-color:var(--color-accent);background:var(--color-accent-ghost)}.section-chip .swatch{width:12px;height:12px;border-radius:4px;flex:none}.section-chip .name{flex:1;min-width:0;font-weight:600;font-size:var(--text-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.section-chip .count{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-ink-2)}.plant-dash{position:absolute;top:68px;right:var(--space-lg);width:380px;max-height:calc(100vh - 84px);overflow-y:auto;padding:var(--space-lg);background:var(--color-paper-glass);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--color-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);animation:panel-in var(--dur-slow) var(--ease-out)}.plant-dash-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:var(--space-md)}.plant-dash-head h2{margin:0;font-family:var(--font-display);font-size:var(--text-lg);font-weight:700}.kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}.kpi-card{position:relative;padding:var(--space-md);border-radius:var(--radius-md);background:var(--color-paper-2);border:1px solid var(--color-line-soft);cursor:pointer;overflow:hidden;transition:transform var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}.kpi-card:hover{transform:translateY(-2px);border-color:var(--color-line-strong)}.kpi-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent, var(--color-accent))}.kpi-card .kpi-name{display:flex;align-items:center;gap:6px;font-weight:650;font-size:var(--text-sm);margin-bottom:var(--space-sm)}.kpi-card .kpi-name .swatch{width:9px;height:9px;border-radius:3px;flex:none}.kpi-metrics{display:grid;grid-template-columns:1fr 1fr;gap:6px var(--space-sm)}.kpi-metric b{display:block;font-family:var(--font-mono);font-size:var(--text-md);font-variant-numeric:tabular-nums;color:var(--color-ink-0)}.kpi-metric span{font-size:var(--text-xs);color:var(--color-ink-2)}.kpi-card .kpi-foot{margin-top:var(--space-sm);display:flex;justify-content:space-between;align-items:center;font-size:var(--text-xs);color:var(--color-ink-2)}.dash-summary{display:flex;gap:var(--space-sm);margin-bottom:var(--space-md)}.dash-summary .metric{flex:1;padding:var(--space-sm);border-radius:var(--radius-sm);background:var(--color-paper-2);border:1px solid var(--color-line-soft);text-align:center}.dash-summary .metric b{display:block;font-family:var(--font-mono);font-size:var(--text-lg);font-variant-numeric:tabular-nums;color:var(--color-accent-hi)}.dash-summary .metric span{font-size:var(--text-xs);color:var(--color-ink-2)}.empty-hint{padding:var(--space-lg);text-align:center;color:var(--color-ink-2);font-size:var(--text-sm);line-height:1.6;border:1px dashed var(--color-line-strong);border-radius:var(--radius-md)}.dashboard{position:absolute;right:var(--space-lg);bottom:var(--space-lg);width:300px;background:var(--color-paper-glass);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--color-line);border-radius:var(--radius-lg);padding:var(--space-md) var(--space-lg);color:var(--color-ink-0);box-shadow:var(--shadow-lg)}.dash-head{display:flex;align-items:center;gap:7px;font-size:var(--text-xs);letter-spacing:.08em;color:var(--color-ink-1);font-weight:700}.live-dot{width:8px;height:8px;border-radius:50%;background:var(--color-ok);box-shadow:0 0 0 0 var(--color-ok-ghost);animation:pulse 1.8s infinite}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--color-ok-ghost)}70%{box-shadow:0 0 0 7px #30c88300}to{box-shadow:0 0 #30c88300}}.dash-metrics{display:flex;gap:var(--space-sm);margin:var(--space-md) 0}.dash-metrics .metric{flex:1;background:var(--color-paper-2);border:1px solid var(--color-line-soft);border-radius:var(--radius-sm);padding:8px 6px;text-align:center}.dash-metrics .metric b{display:block;font-family:var(--font-mono);font-size:var(--text-lg);font-variant-numeric:tabular-nums;color:var(--color-info)}.dash-metrics .metric span{font-size:var(--text-xs);color:var(--color-ink-2)}.dash-row{display:flex;align-items:center;gap:7px;margin:5px 0}.dash-id{width:52px;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-bar-track{flex:1;height:11px;background:#ffffff0f;border-radius:var(--radius-pill);overflow:hidden}.dash-bar{height:100%;border-radius:var(--radius-pill);background-image:repeating-linear-gradient(115deg,var(--c) 0,var(--c) 8px,oklch(100% 0 0 / .4) 8px,oklch(100% 0 0 / .4) 14px);background-size:200% 100%;animation:flowstripe linear infinite}@keyframes flowstripe{0%{background-position:0 0}to{background-position:-28px 0}}.dash-val{width:44px;text-align:right;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-ink-1)}.chart-dock{position:absolute;right:var(--space-lg);bottom:var(--space-lg);background:var(--color-paper-glass);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--color-line);border-radius:var(--radius-lg);padding:var(--space-md);box-shadow:var(--shadow-lg)}.chart-title{font-size:var(--text-xs);color:var(--color-ink-2);margin-bottom:6px}.chart canvas{display:block;border-radius:var(--radius-sm)}.chart-legend{display:flex;align-items:center;gap:6px;font-size:var(--text-xs);color:var(--color-ink-2);margin-top:6px}.chart-legend .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-left:8px}.chart-legend .dot.surge{background:var(--color-danger)}.chart-legend .dot.ref{background:var(--color-ink-3)}.chart-legend .dot.drop{background:var(--color-info)}.tag{pointer-events:none;transform:translateY(-50%);background:var(--color-paper-glass);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--color-line-strong);border-radius:var(--radius-xs);padding:3px 7px;font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.35;color:var(--color-ink-0);white-space:nowrap;text-align:center}.tag b{display:block;color:var(--color-warn);font-size:var(--text-xs)}.tag span{color:var(--color-ink-1);font-size:var(--text-xs)}.tag-hot{border-color:var(--color-danger);box-shadow:0 0 10px var(--color-danger-ghost)}.tag-hot span,.tag-hot b{color:var(--color-danger)}.navbar{padding-top:var(--space-md)}.panel::-webkit-scrollbar,.plant-dash::-webkit-scrollbar{width:10px}.panel::-webkit-scrollbar-thumb,.plant-dash::-webkit-scrollbar-thumb{background:var(--color-line-strong);border-radius:var(--radius-pill);border:3px solid transparent;background-clip:padding-box}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
