:root{color-scheme:dark;--bg:#0c1217;--panel:#131e26;--line:#2c3b45;--ink:#f1f5f5;--muted:#a1b2bd;--mint:#9ee0bf;--gold:#f3cd83;--red:#f59e9e}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Arial,Helvetica,sans-serif;min-height:100vh}header{min-height:102px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:20px 4vw;gap:16px}.brand{display:flex;align-items:center;gap:14px}.mark{width:44px;height:44px;background:var(--mint);color:#0c2219;display:grid;place-items:center;font-size:30px;font-weight:700;border-radius:10px}.brand strong{font-size:25px;letter-spacing:1px}.brand em{font-style:normal;font-weight:400;color:var(--mint)}.brand small{display:block;color:var(--muted);font-size:10px;letter-spacing:1.6px;margin-top:6px}.header-right{display:flex;align-items:center;gap:18px}.demo{font-size:10px;letter-spacing:1.2px;color:var(--gold);padding:8px;border:1px solid #655337;border-radius:5px}.connection{font-size:13px;color:var(--mint)}.connection:before{content:'●';margin-right:8px}.connection.offline{color:var(--red)}main{padding:34px 4vw 24px;max-width:1700px;margin:auto;min-height:calc(100vh - 156px)}footer{display:flex;justify-content:space-between;gap:12px;padding:18px 4vw;color:#899da9;border-top:1px solid var(--line);font-size:12px}.eyebrow{font-size:12px;color:var(--mint);letter-spacing:1.5px;font-weight:bold;text-transform:uppercase}h1,h2,p{margin:0}h1{font-size:38px;letter-spacing:-1px;line-height:1.15}h2{font-size:22px}p{color:var(--muted);line-height:1.6}button,input,select,textarea{font:inherit}button,a.button{padding:14px 20px;border:1px solid var(--line);border-radius:8px;background:#1d2c36;color:var(--ink);cursor:pointer;font-weight:bold;text-decoration:none;display:inline-block}button:hover{border-color:var(--mint)}button:disabled{cursor:default;opacity:.45}button.primary{background:var(--mint);color:#102b20;border:0}button.danger{color:var(--red)}input,select,textarea{background:#0c151d;border:1px solid #465965;color:var(--ink);padding:15px;border-radius:8px;width:100%}input:focus,select:focus,textarea:focus{outline:2px solid var(--mint)}label{display:block;font-size:13px;color:var(--muted);margin:20px 0 8px}textarea{min-height:112px;resize:vertical}.signin{max-width:690px;margin:25px auto}.signin h1{margin:17px 0}.signin .form{margin-top:30px;padding:28px;background:var(--panel);border:1px solid var(--line);border-radius:13px}.signin input{font-size:28px;text-transform:uppercase;letter-spacing:2px}.signin button{width:100%;margin-top:18px;font-size:20px}.samples{margin-top:24px;display:flex;gap:9px;flex-wrap:wrap}.samples button{font-size:13px;padding:10px 14px;margin:0;width:auto}.caption{font-size:12px;color:var(--muted);margin-top:16px}.dashboard{display:grid;grid-template-columns:minmax(250px,28%) 1fr;gap:25px}.history{border:1px solid var(--line);background:var(--panel);border-radius:12px;padding:22px;max-height:calc(100vh - 200px);overflow:auto}.history-head{display:flex;justify-content:space-between;margin-bottom:22px;align-items:center}.history-head span{color:var(--muted);font-size:12px}.history-item{border-top:1px solid var(--line);padding:19px 0}.history-item p{color:#d1dde3;font-size:16px;margin:10px 0}.history-item small{color:var(--muted);font-size:11px}.pill{display:inline-block;padding:6px 9px;font-size:11px;border:1px solid #496659;border-radius:5px;color:var(--mint)}.pill.pending{color:var(--gold);border-color:#655337}.pill.cancelled{color:var(--red);border-color:#6b4646}.empty{font-size:15px;color:var(--muted);padding:35px 0;line-height:1.7}.car-head{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:23px}.plate{font-size:28px;letter-spacing:2px;margin-bottom:7px}.meta{color:var(--muted);font-size:13px}.text-button{font-size:12px;background:transparent;padding:9px 12px}.current{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:38px;min-height:430px;display:flex;flex-direction:column;justify-content:center;position:relative}.current.active{border-color:var(--mint);background:#13281f}.current.acknowledged{border-color:#5b8170}.current .eyebrow{margin-bottom:24px}.current h1{font-size:clamp(36px,4.6vw,70px);max-width:970px}.current p{margin-top:20px;font-size:20px;max-width:680px}.current .action{margin-top:32px;font-size:23px;min-height:65px}.notice{color:var(--red);border:1px solid #714a4a;border-radius:8px;padding:15px 20px;margin-bottom:20px;background:#291d20;font-size:17px}.small-note{margin-top:17px;font-size:13px;color:var(--muted);line-height:1.5}.wait-symbol{font-size:50px;color:#5e8177;margin-bottom:24px}.control-title{display:flex;justify-content:space-between;gap:20px;margin-bottom:25px;align-items:center}.control-title p{margin-top:10px}.control-grid{display:grid;grid-template-columns:1fr 1.15fr;gap:24px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:26px}.panel h2{margin-bottom:10px}.publish{width:100%;font-size:19px;margin-top:22px}.control-current{margin-bottom:24px;border-left:4px solid var(--mint)}.control-current .plate{margin:18px 0 8px}.control-current p{color:#d6e2e6}.actions{display:flex;gap:10px;margin-top:20px;flex-wrap:wrap}.queue-list{max-height:350px;overflow:auto}.queue-list .history-item{display:flex;justify-content:space-between;gap:15px}.queue-list .history-item:first-child{border-top:0}.queue-list button{font-size:12px;padding:9px}.saved{color:var(--mint);font-size:14px;margin-top:16px}.loading{margin:80px auto;text-align:center;color:var(--muted)}#toast:not(:empty){position:fixed;bottom:25px;left:50%;transform:translateX(-50%);padding:16px 22px;background:#e9f4ed;color:#142c21;box-shadow:0 8px 40px #0008;border-radius:8px;max-width:90vw;z-index:10}.error{color:var(--red)!important}.control-note{font-size:13px;color:var(--gold);margin:18px 0}.status-time{font-size:12px;margin-top:15px;color:var(--muted)}a{color:var(--mint)}@media(max-width:800px){header{padding:16px 20px;min-height:86px}.header-right{gap:8px}.demo{display:none}.brand small{font-size:8px}.brand strong{font-size:20px}main{padding:22px 18px}.dashboard{display:flex;flex-direction:column-reverse}.history{max-height:350px}.current{min-height:370px;padding:25px}.current h1{font-size:38px}.current p{font-size:18px}.car-head .plate{font-size:24px}.control-grid{grid-template-columns:1fr}.control-title{align-items:flex-start}h1{font-size:30px}.panel{padding:22px}footer{font-size:10px;padding:16px 20px}.signin{margin:10px auto}.signin .form{padding:20px}}

#dispatch-queue .section-boundary{padding:16px 12px;border-radius:9px;margin:6px 0;border:2px solid transparent;color:#151b24}#dispatch-queue .boundary-right{background:#F45B5B;border-color:#F45B5B}#dispatch-queue .boundary-left{background:#CCA8E5;border-color:#CCA8E5}#dispatch-queue .section-boundary p,#dispatch-queue .section-boundary small{color:#151b24}#dispatch-queue .section-boundary button{background:#ffffffd9;border-color:#151b2440;color:#151b24}.boundary-label{display:block;font-size:10px;font-weight:bold;letter-spacing:1px;margin-bottom:8px}

.plate-error-dialog{background:var(--panel);color:var(--ink);border:2px solid var(--red);border-radius:14px;padding:28px;max-width:480px;width:calc(100% - 36px);box-shadow:0 20px 80px #0009}.plate-error-dialog::backdrop{background:#000b}.plate-error-dialog h2{font-size:26px;margin-bottom:18px}.plate-error-dialog p{margin:14px 0}.plate-error-dialog button{width:100%;margin-top:16px;min-height:52px}
/* Shared portal: readable touch layouts on phones, landscape car screens and laptops. */
body{font-size:16px}p,.small-note,.caption,label,.meta,.status-time,.history-item small,.pill,.queue-list button,.connection,.text-button,footer{font-size:16px}button,a.button{min-height:48px;min-width:48px}input,select,textarea{font-size:18px}#portal-nav{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:12px 4vw;border-bottom:1px solid var(--line);position:sticky;top:0;background:#0c1217f5;z-index:4}#portal-nav a{padding:12px 16px;min-height:48px;border-radius:8px;text-decoration:none;color:var(--ink)}#portal-nav a[aria-current]{background:var(--mint);color:#102b20;font-weight:bold}#portal-nav button{margin-left:auto}.page-title{margin-bottom:24px}.page-title h1{margin:10px 0}.page-title p{max-width:900px}.mode-panel{margin-bottom:20px}.mode-panel .button,.mode-panel button{margin:12px 10px 0 0}.saved-confirmation{padding:18px 22px;background:#143e2b;color:#bcf1d3;border:2px solid var(--mint);border-radius:10px;margin:18px 0;font-size:18px}.attendance-card{border-top:1px solid var(--line);padding:24px 0}.attendance-card h2{font-size:28px;letter-spacing:1px}.attendance-card button{display:block;width:100%;margin-top:18px;font-size:20px}.attendance-card p{margin:14px 0}.map-tabs,.map-tools{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px}.map-tabs button[aria-pressed]{background:var(--mint);color:#102b20}.formation-frame{height:clamp(330px,56vh,700px);overflow:hidden;border:1px solid var(--line);border-radius:14px;background:#0c161e;touch-action:none}.formation-svg{display:block;width:100%;height:100%;touch-action:none;user-select:none}.map-car{cursor:pointer}.map-car:focus{outline:none}.map-car:focus rect{stroke:#ffe56c;stroke-width:8}.site-label,.section-label,.row-label,.tree-label,.map-digits,.map-role,.map-position,.own-label{text-anchor:middle;font-family:Arial,sans-serif;font-weight:bold;fill:#eff7f4}.site-label{font-size:24px}.section-label{font-size:26px;letter-spacing:2px}.row-label{font-size:16px;fill:#c0d5ca}.tree-label{font-size:13px}.map-digits{font-size:17px;fill:#13232c}.map-role{font-size:16px;fill:#13232c}.map-position{font-size:17px}.own-label{font-size:18px;fill:#ffe56c}.allocation-detail{margin:20px 0}.allocation-detail h2{font-size:30px;margin:10px 0}.legend{display:flex;flex-wrap:wrap;gap:16px;margin:20px 0}.legend span{display:flex;align-items:center;gap:8px;font-size:16px}.legend i{width:20px;height:20px;display:inline-block;border-radius:4px}.front-juniper{background:#93C47D}.rear-juniper{background:#D9EAD3}.front-other{background:#6FA8DC}.rear-other{background:#CFE2F3}details summary{cursor:pointer;font-size:18px;padding:14px 0}.signin details{margin-top:24px}.signin details input{text-transform:none;font-size:18px;letter-spacing:0}.signin a{display:inline-block;margin-top:20px}.panel+ .panel{margin-top:20px}.map-tools button{font-size:18px}.plate-error-dialog p{font-size:18px}
@media(max-width:800px){#portal-nav{padding:8px;gap:4px}#portal-nav a{font-size:16px;padding:12px 10px}#portal-nav button{font-size:16px;margin-left:0}.current h1{font-size:36px}.brand small{font-size:10px}footer{font-size:16px;flex-direction:column}.map-tools button{flex:1 0 auto}.formation-frame{height:52vh;min-height:340px}.control-title{flex-direction:column}.panel{padding:20px}.plate-error-dialog{padding:22px}input{min-height:54px}}
@media(min-width:1000px) and (orientation:landscape){.current{min-height:480px}.current h1{font-size:clamp(42px,4.5vw,76px)}.map-tools{justify-content:flex-start}}

#identity-badge{padding:10px 4vw;color:var(--mint);font-size:16px;border-bottom:1px solid var(--line)}#identity-badge:empty{display:none}

.eyebrow,.boundary-label{font-size:16px}.tree-label{font-size:16px}
.control-note,.saved,.empty,.history-head span,.demo{font-size:16px}

/* Messaging: keep dispatch and release controls together on landscape screens. */
.messaging-page{max-width:1480px;margin:auto}
.lineup-source{margin-bottom:20px;padding:16px 22px}
.lineup-source summary{cursor:pointer;font-weight:700;min-height:32px;line-height:32px}
.lineup-source summary span{font-weight:400;color:var(--muted);margin-left:18px}
.lineup-source[open] summary{margin-bottom:16px}
.messaging-workspace{display:grid;grid-template-columns:minmax(320px,.85fr) minmax(460px,1.15fr);gap:24px;align-items:start}
.messaging-workspace>.panel{margin-top:0}
.messaging-controls{display:flex;flex-direction:column;gap:20px;min-width:0}
.messaging-controls>.panel,.messaging-controls>section{margin:0;min-width:0}
.messaging-controls .control-current{margin:0 0 20px}
.dispatch-panel{min-width:0;position:sticky;top:100px}
.dispatch-panel #dispatch-queue{max-height:calc(100dvh - 320px);min-height:260px;margin-top:16px;scrollbar-gutter:stable}
.messaging-page .queue-list .history-item{align-items:center}
.messaging-page .queue-list .history-item>div{min-width:0;overflow-wrap:anywhere}
.messaging-page .queue-list button{align-self:center;flex-shrink:0;min-height:48px;padding:10px 14px;font-size:16px}
.messaging-page .history-item p{margin:8px 0;line-height:1.4}
.messaging-page textarea{min-height:100px}
.messaging-page .control-title h1{font-size:clamp(28px,3vw,42px)}
.messaging-page .control-title .button{flex-shrink:0}
.messaging-page .publish{margin-top:16px}
@media(min-width:1500px){.messaging-workspace{grid-template-columns:minmax(380px,.9fr) minmax(620px,1.4fr)}.messaging-controls{display:grid;grid-template-columns:1fr 1fr;gap:20px}.messaging-controls .panel{padding:22px}}
@media(max-width:1000px){.messaging-workspace{grid-template-columns:1fr}.dispatch-panel{position:static}.dispatch-panel #dispatch-queue{max-height:350px;min-height:0}.lineup-source summary span{display:block;margin-left:0}.messaging-controls{display:grid;grid-template-columns:1fr 1fr}.messaging-workspace{gap:20px}}
@media(max-width:700px){.messaging-controls{display:flex}.messaging-page .control-title .button{width:100%;text-align:center}.messaging-page .queue-list button{padding:10px}.lineup-source{padding:16px}.messaging-page .control-title h1{font-size:30px}}

.driver-attendance{padding:14px 18px;border:1px solid var(--line);border-radius:10px;margin-bottom:18px;font-size:18px;font-weight:700}.attendance-arrived{background:#193e30;color:#a8edc9;border-color:#73b995}.attendance-pending{background:#362f1e;color:#ffe09b;border-color:#9c8754}
.lineup-lock{padding:18px 22px;border:1px solid var(--line);border-radius:12px;margin-bottom:16px;background:var(--panel)}.lineup-lock p{margin:8px 0 12px}

.group-messages{margin-top:20px!important;grid-column:1/-1}.help-panel{margin-bottom:20px}.help-active{border:2px solid #f3b563;background:#35291e}.help-panel button{margin-top:10px}.help-panel h3{font-size:22px}.help-panel input{margin-bottom:12px}
