:root{--window: #24283b;--base: #1f2335;--alt: #262b40;--text: #c0caf5;--dim: #565f89;--muted: #737aa2;--other: #4a5175;--highlight: #3d59a1;--terminal: #1a1b26;--gutter-bg: #16161e;--grid: #2f3549;--card: #1f2335;--good: #9ece6a;--warn: #e0af68;--bad: #f7768e;--blue: #7aa2f7;--mono: "Cascadia Mono", Consolas, "JetBrains Mono", "Courier New", monospace;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--window);color:var(--text);font:13px/1.35 Segoe UI,system-ui,-apple-system,sans-serif}input,select,button{font:inherit;color:var(--text);background:var(--base);border:1px solid var(--grid);border-radius:3px;padding:2px 6px}input:focus,select:focus,.list-body:focus,.terminal-body:focus{outline:1px solid var(--highlight)}button{cursor:pointer}button.link{background:none;border:none;color:var(--muted)}button.link:hover{color:var(--text)}.splash{display:grid;place-items:center;height:100%;color:var(--muted);font-size:16px}.login{display:grid;place-items:center;height:100%;padding:16px}.login form{display:flex;flex-direction:column;gap:12px;width:min(320px,100%);background:var(--base);border:1px solid var(--grid);border-top:3px solid var(--blue);border-radius:6px;padding:24px;align-items:stretch}.login img{align-self:center}.login h1{margin:0;font-size:18px;text-align:center}.login label{display:flex;flex-direction:column;gap:4px;color:var(--muted)}.login input{padding:6px 8px}.login button{padding:6px;background:var(--highlight);border-color:var(--highlight)}.login button:disabled{opacity:.5;cursor:default}.login .error{color:var(--bad)}.app{display:flex;flex-direction:column;height:100%;height:100dvh}.toolbar{display:flex;align-items:center;gap:12px;padding:4px 8px;border-bottom:1px solid var(--grid);flex-wrap:wrap}.toolbar .brand{font-weight:700}.toolbar .days{width:64px}.toolbar .shown{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px}.toolbar .shown input[type=date]{color-scheme:dark}.toolbar .filter{width:min(420px,60vw)}.toolbar .live.on{color:var(--good)}.toolbar .live.idle{color:var(--blue)}.toolbar .live.off{color:var(--bad)}.toolbar .updated{color:var(--muted)}.notify{position:relative}.notify>button.on{color:var(--text)}.notify-panel{position:fixed;z-index:20;background:var(--base);border:1px solid var(--grid);border-top:3px solid var(--blue);border-radius:6px;padding:10px 12px;box-shadow:0 8px 24px #0008}.notify-panel h3{margin:0 0 8px;font-size:14px}.notify-panel p{margin:8px 0 0}.notify-panel .dim{color:var(--muted)}.notify-panel .check{display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer}.notify-panel .check input{margin-top:3px}.notify-buttons{display:flex;gap:8px;margin-top:10px}.notify-buttons button{padding:3px 10px}.notify-buttons button:first-child{background:var(--highlight);border-color:var(--highlight)}.notify-note{color:var(--warn)}.spacer{flex:1}.main{flex:1;display:flex;flex-direction:column;min-height:0}.top{display:flex;flex-direction:column;min-height:80px}.counts{display:flex;flex-wrap:wrap;align-items:center;gap:2px 12px;padding:2px 8px;color:var(--text)}.counts .selection{background:var(--highlight);border-radius:3px;padding:0 4px 0 8px}.counts .selection button{color:var(--text);text-decoration:underline;padding:0 4px 0 10px}.splitter{height:6px;cursor:row-resize;background:var(--window);border-top:1px solid var(--grid)}.splitter:hover{background:var(--grid)}.bottom{flex:1;display:flex;flex-direction:column;min-height:80px}.tabs{display:flex;gap:2px;padding:0 4px}.tabs .follow{margin-left:auto;align-self:center;padding:0 8px;white-space:nowrap}.tabs button{border:none;border-bottom:2px solid transparent;border-radius:0;background:none;padding:4px 12px;color:var(--muted)}.tabs button.on{color:var(--text);border-bottom-color:var(--blue)}.tab-body{flex:1;min-height:0;display:flex;flex-direction:column}.statusbar{display:flex;gap:12px;padding:2px 8px;border-top:1px solid var(--grid);color:var(--muted);white-space:nowrap;overflow:hidden}.statusbar .version{color:var(--muted);padding:0}.statusbar .version:hover{color:var(--text)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;background:#000a;display:flex;align-items:center;justify-content:center;padding:16px}.modal{display:flex;flex-direction:column;width:min(820px,100%);max-height:min(86vh,100%);background:var(--base);border:1px solid var(--grid);border-top:3px solid var(--blue);border-radius:6px;box-shadow:0 8px 24px #0008}.modal-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--grid)}.modal-head h2{margin:0;font-size:16px}.modal-body{overflow-y:auto;padding:4px 14px 14px;line-height:1.45}.modal .dim{color:var(--muted);font-weight:400}.changelog section+section{border-top:1px solid var(--grid)}.changelog h3{margin:14px 0 4px;font-size:15px}.changelog h3 .this{margin-left:10px;padding:1px 6px;border-radius:8px;background:var(--highlight);color:var(--text);font-size:11px;font-weight:400;vertical-align:2px}.changelog h4{margin:10px 0 2px;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.04em}.changelog ul{margin:0;padding-left:20px}.changelog li{margin:3px 0}.changelog code{font-family:var(--mono);font-size:.92em;color:var(--blue)}.changelog a{color:var(--blue)}.pages{display:flex;gap:2px;padding:0 4px;border-bottom:1px solid var(--grid);background:var(--window)}.pages button{border:none;border-bottom:2px solid transparent;border-radius:0;background:none;padding:5px 14px;color:var(--muted);font-weight:600}.pages button.on{color:var(--text);border-bottom-color:var(--blue)}.homes-page{background:var(--terminal)}.homes{flex:1;min-height:0;display:flex;flex-direction:column}.homes-head{padding:4px 8px;color:var(--muted)}.homes-list{flex:2 1 0;min-height:90px;overflow:auto;border-top:1px solid var(--grid);border-bottom:1px solid var(--grid);background:var(--base)}.homes-list table{border-collapse:collapse;white-space:nowrap}.homes-list th{position:sticky;top:0;background:var(--window);color:var(--muted);font-weight:400;text-align:left;padding:2px 8px;border-bottom:1px solid var(--grid)}.homes-list td{padding:1px 8px}.homes-list .num{text-align:right;font-family:var(--mono)}.homes-list td.moved{color:#3987e5}.homes-list tr:nth-child(2n) td{background:var(--alt)}.homes-list tr.on td{background:var(--highlight)}.homes-list .dim{color:var(--muted)}.homes-list .warn{color:var(--warn)}.homes-charts{flex:3 1 0;min-height:0;overflow:auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:6px;padding:6px}.home-chart{position:relative;min-width:0;background:var(--terminal)}.home-chart svg{display:block;cursor:crosshair}.chart-tip{position:absolute;z-index:5;pointer-events:none;min-width:160px;padding:4px 8px;background:var(--base);border:1px solid var(--grid);border-radius:4px;box-shadow:0 4px 12px #0008;white-space:nowrap;font-size:12px}.chart-tip .dim{color:var(--muted)}@media(max-width:700px){.homes-charts{grid-template-columns:1fr}.homes-list{flex:0 0 38%}.homes-charts{flex:1 1 auto}}.dash-page{overflow:auto;background:var(--terminal)}.dashboard{padding:10px 12px 14px;display:flex;flex-direction:column;gap:10px}.dash-title{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px}.dash-days{position:relative;display:flex;gap:4px}.dash-days>button{padding:2px 10px}.dash-days>button.on{border-color:var(--blue)}.calendar{position:absolute;z-index:20;top:calc(100% + 6px);left:0;width:min(340px,calc(100vw - 24px));padding:8px 10px;background:var(--base);border:1px solid var(--grid);border-top:3px solid var(--blue);border-radius:6px;box-shadow:0 8px 24px #0008}.calendar-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.calendar-grid .weekday{color:var(--muted);font-size:11px;text-align:center}.calendar-grid button{position:relative;height:38px;padding:0;border:1px solid transparent;background:transparent;color:var(--text)}.calendar-grid button:hover:not(:disabled){border-color:var(--grid)}.calendar-grid button.other{color:var(--muted)}.calendar-grid button.today{border-color:var(--muted)}.calendar-grid button.on{background:var(--highlight)}.calendar-grid button:disabled{color:var(--other);cursor:default}.calendar-grid .badge{position:absolute;top:1px;right:1px;min-width:16px;height:16px;padding:0 3px;border-radius:8px;background:#3987e5;color:#fff;font-size:10px;font-weight:700;line-height:16px}.calendar .dim{margin:6px 0 0;color:var(--muted);font-size:11px}.dash-head h2{margin:0 0 6px;font-size:18px}.dash-figures{display:flex;flex-wrap:wrap;gap:8px 28px}.dash-figures>div{display:flex;flex-direction:column}.dash-figures .caption{color:var(--muted);font-weight:700}.dash-figures b{font-size:22px;font-weight:600}.dashboard .dim{color:var(--dim)}.breaks{margin:0;padding-left:18px}.dash-columns{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start}.dash-columns .shift{flex:2 1 560px;min-width:0}.dash-columns>.card:not(.shift){flex:1 1 320px;min-width:0}.shift-bar{position:relative;height:22px;margin:6px 0 22px;background:var(--terminal);border-radius:3px}.shift-seg{position:absolute;top:0;bottom:0;border-right:2px solid var(--card)}.shift-seg.break{background:repeating-linear-gradient(45deg,#3b4261 0,#3b4261 6px,#2a2f45 6px,#2a2f45 12px)!important}.shift-bar>.shift-seg{border-right-width:1px}.shift-tick{position:absolute;top:0;bottom:-3px;width:0;border-left:1px solid #2f3549}.shift-tick:after{content:"";position:absolute;top:22px;left:-1px;height:3px;border-left:1px solid var(--muted)}.shift-tick span{position:absolute;top:25px;transform:translate(-50%);font-size:11px;color:var(--muted)}.dash-title .page-title{margin:0;font-size:18px}.no-production{margin:4px 0 0;padding:22px 12px;text-align:center;font-size:18px;color:var(--muted);background:var(--card);border-radius:6px}.no-production span{font-size:13px}.week-none{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--dim)}.dash-figures b.running{color:var(--good);animation:pulse-running 1.6s ease-in-out infinite}@keyframes pulse-running{50%{color:#4f6b35}}@media(prefers-reduced-motion:reduce){.dash-figures b.running{animation:none}}.week-chart{display:flex;flex-direction:column;gap:6px;margin-top:6px}.week-row{display:grid;grid-template-columns:78px 1fr 64px;align-items:center;gap:6px;border-radius:3px;cursor:pointer}.week-row.on{background:#3d59a159}.week-row.ahead,.week-hours{cursor:default}.week-row.ahead .week-day{color:var(--dim)}.week-day{padding-left:4px;white-space:nowrap}.week-count{color:var(--muted);font-size:12px;white-space:nowrap}.week-bar{position:relative;height:20px;background:var(--terminal);border-radius:2px}.week-hours .week-bar{height:14px;background:none}.week-hours .week-bar span{position:absolute;transform:translate(-50%);font-size:11px;color:var(--muted)}.week-bar .shift-seg{border-right-width:1px}.dash-table{border-collapse:collapse;width:100%}.dash-table th{text-align:left;color:var(--muted);font-weight:600;padding:3px 8px;border-bottom:1px solid var(--grid)}.dash-table td{padding:3px 8px;white-space:nowrap}.dash-table .right{text-align:right}.dash-table tr.unit-slot,.dash-table tr.product,.dash-table tr.variant{cursor:pointer}.dash-table tr.unit-slot:hover,.dash-table tr.product:hover,.dash-table tr.variant:hover{background:#2a2f45}.dash-table tr.idle-slot td{color:var(--dim);font-style:italic}.dash-table tr.idle-slot.break td{color:var(--warn)}.dash-table tr.product td{font-weight:700;border-top:1px solid var(--grid)}.dash-table tr.variant td:first-child{padding-left:30px;color:var(--muted)}.card.shift{overflow-x:auto}.list{--cols: minmax(220px, 1fr) 160px 200px 45px 140px 140px 100px 190px 95px 55px;flex:1;min-height:0;display:flex;flex-direction:column;overflow-x:auto}.list-head,.list .row{display:grid;grid-template-columns:var(--cols);min-width:1400px}.list-head{background:var(--window);border-bottom:1px solid var(--grid);-webkit-user-select:none;user-select:none}.list-head .cell{padding:3px 6px;cursor:pointer;border-right:1px solid var(--grid)}.list-body{flex:1;overflow-y:auto;overflow-x:hidden;background:var(--base);min-width:1400px}.list .row{position:absolute;left:0;right:0;height:22px;line-height:22px;cursor:default;-webkit-user-select:none;user-select:none}.list .row.alt{background:var(--alt)}.list .row.selected{background:var(--highlight)}.list .row.current{box-shadow:inset 0 0 0 1px #7aa2f7aa}.list .row.unit{font-weight:700}.list .row.operation{font-style:italic}.list .cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 6px}.list .cell.right{text-align:right}.list .toggle{display:inline-block;width:14px;color:var(--muted);cursor:pointer}.list .toggle.none{cursor:default}.terminal{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--terminal)}.terminal-head{display:flex;align-items:center;gap:10px;padding:4px 6px 2px;background:var(--window)}.terminal-title{flex:1;min-width:0;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.terminal-head .find{width:280px}.terminal-body{flex:1;overflow:auto;font:13px/17px var(--mono);color:var(--text);padding:4px 0;white-space:pre}.terminal-body.wrap{white-space:pre-wrap;overflow-wrap:anywhere}.terminal-message{padding:12px;color:var(--muted);white-space:pre-wrap}.chunk{content-visibility:auto}.line{display:flex}.terminal-body:not(.wrap) .chunk,.terminal-body:not(.wrap) .line{width:max-content;min-width:100%}.terminal-body:not(.wrap) .line .text{flex:none}.line .gutter{position:sticky;left:0;z-index:1;flex:none;width:calc(var(--gutter) + 12px);padding-right:6px;margin-right:8px;text-align:right;color:var(--other);background:var(--gutter-bg);cursor:pointer;-webkit-user-select:none;user-select:none}.line .gutter.own{color:var(--muted)}.line .text{flex:1;min-width:0}.line.other .text{color:var(--other);font-style:italic}.line.extra .text{font-style:italic}.line.found{background:#33467c}.m-time,.m-default{color:var(--text)}.m-dim{color:var(--dim)}.m-muted{color:var(--muted)}.m-raw{color:var(--muted);font-style:italic}.m-marker{color:#9ece6a;font-weight:700}.m-unitinfo{color:#9ece6a}.m-finished{color:#bb9af7;font-weight:700}.m-step{color:#7dcfff;font-weight:700}.m-gui{color:#7aa2f7}.m-trace{color:var(--dim);font-style:italic}.m-warning{color:var(--warn)}.m-error{color:var(--bad);font-weight:700}.inspector{flex:1;overflow:auto;background:var(--terminal);padding:8px 10px 10px;display:flex;flex-direction:column;gap:8px}.inspector-message{flex:1;display:grid;place-items:center;color:var(--muted);font-size:15px;background:var(--terminal)}.inspector-title{font-size:17px;font-weight:700}.inspector p{margin:4px 0 0}.inspector .dim{color:var(--dim)}.times{display:flex;flex-wrap:wrap;gap:6px 22px}.field .caption{color:var(--muted);font-weight:700}.field .value{font-size:15px}.phase-bar{display:flex;height:26px;gap:2px}.phase-bar>div{display:grid;place-items:center;overflow:hidden;color:var(--terminal);white-space:nowrap;min-width:2px}.cards{display:flex;gap:8px;flex-wrap:wrap}.cards>.card{flex:1 1 360px;min-width:0}.card{background:var(--card);border:1px solid var(--grid);border-top:3px solid;border-radius:4px;padding:6px 10px 8px;min-width:0}.card h3{margin:0 0 4px;font-size:14px}.caption-row{display:flex;align-items:center;gap:8px;margin-top:4px}.caption-row .caption{color:var(--muted);font-weight:700;flex:1}select.history:disabled{opacity:.6}.corner-map{position:relative;height:150px;margin:4px 0;background:var(--terminal);border:1.5px solid var(--grid);border-radius:6px}.corner-map.empty{display:grid;place-items:center;color:var(--dim)}.corner{position:absolute;line-height:16px}.corner.UL{left:10px;top:8px}.corner.UR{right:10px;top:8px;text-align:right}.corner.LL{left:10px;bottom:8px}.corner.LR{right:10px;bottom:8px;text-align:right}.corner.Center{left:50%;top:50%;transform:translate(-50%,-50%);text-align:center}.corner-name{color:var(--dim)}.corner-note{position:absolute;bottom:8px;left:0;right:0;text-align:center;color:var(--muted);pointer-events:none}.chart-box{width:100%;min-width:0}.chart{display:block;font-size:11px}.chart text{font-family:inherit}.chart .small,.chart .via{font-size:10.5px}.chart-empty{display:grid;place-items:center;height:100%;min-height:60px;color:var(--dim)}.sequence{overflow-x:auto}.sequence-head{display:flex}.entity{margin:0 3px;border:1px solid;border-radius:4px;background:var(--card);font-size:11px;text-align:center;padding:0 3px 4px;min-height:44px;display:flex;flex-direction:column;justify-content:center;overflow:hidden}.entity-bar{height:3px;margin:0 -3px 3px}.summary{color:var(--text)}.legend{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px}.legend i,.swatch{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:-1px}.compare-table{max-height:330px;overflow:auto}.compare-table table{border-collapse:collapse;width:100%;white-space:nowrap}.compare-table th{position:sticky;top:0;background:var(--window);font-weight:600;text-align:left;padding:3px 8px;cursor:pointer;border-bottom:1px solid var(--grid)}.compare-table td{padding:3px 8px}.compare-table .right{text-align:right}.compare-table tbody tr:nth-child(2n){background:var(--alt)}.compare-table tbody tr{cursor:pointer}.compare-table tbody tr.picked{background:var(--highlight)}.list .row{-webkit-touch-callout:none}.splitter{touch-action:none}@media(pointer:coarse){.splitter{height:14px}.list .toggle{width:24px;text-align:center}input,select{font-size:16px}}@media(max-width:700px){.toolbar{gap:6px 10px}.toolbar label:has(.filter){flex:1 1 100%;display:flex;gap:6px;align-items:center}.toolbar .filter{flex:1;width:auto}.list{--cols: minmax(110px, 1fr) 146px 70px 92px;overflow-x:hidden}.list-head,.list .row,.list-body{min-width:0}.list .col-1,.list .col-2,.list .col-3,.list .col-5,.list .col-8,.list .col-9{display:none}.list .cell{padding:0 4px}.terminal-head{flex-wrap:wrap;gap:4px 10px}.terminal-title{flex:1 1 100%}.terminal-head .find{flex:1;width:auto;min-width:100px}.terminal-body{font-size:12px;line-height:16px}.inspector{padding:6px}.statusbar{font-size:11px}}@media(max-width:700px){.dashboard{padding:8px 8px 12px}.dash-head h2{font-size:16px}.dash-figures{gap:6px 18px}.dash-figures b{font-size:19px}.dash-columns{flex-direction:column;align-items:stretch}.dash-columns>.card,.dash-columns>.card:not(.shift){flex:none;width:100%}.dash-columns>.summary{order:-1}.dash-table .col-product{display:none}}@media(max-width:480px){.dash-table .col-variant{display:none}}@media(pointer:coarse){.dash-table td{padding-top:6px;padding-bottom:6px}}@media(max-width:480px){.list{--cols: minmax(96px, 1fr) 146px 66px}.list .col-7,.toolbar .brand{display:none}}
