:root{--text-small:14px;--text-body:16px;--text-heading:22px;--text-title:28px}
@font-face{font-family:'Golos Text';src:url('/fonts/golos-text-400.ttf') format('truetype');font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:'Golos Text';src:url('/fonts/golos-text-600.ttf') format('truetype');font-style:normal;font-weight:600;font-display:swap}
:root{--bg:#f7f6fa;--ink:#271831;--muted:#94869d;--line:#eee8f2;--blue:#a617d8;--blue-soft:#f8ecff;--nav:#211129;--green:#168568;--orange:#bd7620;--radius:20px;--shadow:0 6px 28px #38184504}
body{font-family:'Golos Text',Arial,sans-serif;color:var(--ink);background:var(--bg)}
.app{grid-template-columns:238px minmax(0,1fr)}.sidebar{background:radial-gradient(ellipse at 0 0,#58206b 0,transparent 53%),linear-gradient(175deg,#2f153c,#1d1025);padding:32px 20px;min-height:720px}.brand{gap:13px;margin:0 12px}.wordmark{font-size:34px;letter-spacing:-2.5px;font-weight:600;line-height:1}.wordmark>span{color:#ec4ed2;font-size:var(--text-heading);margin-left:3px}.brand-name{font-size:var(--text-title);letter-spacing:-1.5px;font-weight:400;border-left:1px solid #ffffff30;padding-left:13px}.brand-caption{font-size:var(--text-small);letter-spacing:1.5px;color:var(--muted);margin:17px 12px 43px}.nav-caption{color:var(--muted);font-size:var(--text-small);letter-spacing:1.5px}.nav{gap:9px}.nav button{font-size:var(--text-small);padding:14px 12px;color:var(--muted);gap:10px;position:relative;letter-spacing:-.2px;border:1px solid transparent}.nav button.active{background:linear-gradient(100deg,#aa20ce38,#a020c912);border-color:#cd61f035;color:white;box-shadow:inset 3px 0 #e05be5}.nav button.active:before{display:none}.nav button:hover{background:#ffffff0a}.nav button .nav-count{background:none;color:var(--muted);font-size:var(--text-small);padding:0}.sidebar-note{margin:45px 12px 0;padding:22px 0;border-color:#ffffff12;color:var(--muted);line-height:1.9;font-size:var(--text-small)}.sidebar-note strong{font-size:var(--text-small);color:#ebdaf0;margin:12px 0 6px}.network-pulse{display:block;height:8px;width:8px;border-radius:50%;background:#ce57eb;box-shadow:0 0 0 5px #b734d31c}.sidebar-bottom{display:flex;align-items:center;gap:10px;padding:23px 3px 0;border-color:#ffffff12}.sidebar-bottom strong{font-size:var(--text-small);color:#e9ddec}.sidebar-bottom p{margin:4px 0 0;font-size:var(--text-small);color:var(--muted)}.team-avatar{width:33px;height:33px;border:1px solid #9867aa55;background:#4d2e58;border-radius:11px;display:grid;place-items:center;font-size:var(--text-small);color:#e0c4ea}
.topbar{padding:18px 38px;background:#ffffffd9;border-color:var(--line)}.breadcrumb{font-size:var(--text-small);color:var(--muted)}.breadcrumb strong{color:var(--muted)}.top-actions{gap:13px}.version-chip{font-size:var(--text-small);color:var(--muted)}.avatar{background:#f2e8f7;color:#a249ba;border:1px solid #ead9f1}.content{padding:33px 38px 24px;max-width:1640px}.eyebrow{font-size:var(--text-small);font-weight:600;letter-spacing:1.6px;color:#ad28c9;margin-bottom:10px}h1{font-size:34px;font-weight:600;line-height:1.25;letter-spacing:-1.5px}.subtitle{color:var(--muted);font-size:var(--text-small);margin-top:11px}.title-row{margin-bottom:25px}.button{border:1px solid #e9deee;border-radius:10px;min-height:37px;padding:9px 13px;font-size:var(--text-small);font-weight:600;box-shadow:0 2px 3px #27183103}.button.primary{background:linear-gradient(110deg,#d022b0,#9518db);border-color:transparent;box-shadow:0 5px 12px #a617d81c}.button.primary:hover{background:linear-gradient(110deg,#bd1aa1,#7f12bd);transform:translateY(-1px)}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline-color:#ce8be8}button:disabled{opacity:.45;transform:none!important}.badge{border-radius:7px;font-size:var(--text-small);letter-spacing:.1px}.badge.blue{background:#f6eafa;color:#ab27c9}.badge.gray{background:#f3f0f6;color:var(--muted)}.badge.green{background:#eaf7f1;color:#168568}.badge.orange{background:#fff3e3;color:#b97720}.badge.red{background:#fff0f0;color:#d35368}.demo-banner{background:#f4edf8;border:1px solid #eadff0;color:var(--muted);font-size:var(--text-small);border-radius:12px;padding:11px 15px;margin-bottom:20px}.demo-banner strong{color:var(--muted)}.demo-banner svg{color:var(--muted)}.filters{padding:0 0 20px;gap:20px;border-bottom:0}.field{color:var(--muted);font-size:var(--text-small)}.field select{border:1px solid #eadff0;background:white;color:var(--muted);border-radius:9px;padding:8px 30px 8px 10px;font-size:var(--text-small)}.cutoff{color:var(--muted);font-size:var(--text-small)}.stats{gap:15px;margin:0 0 23px}.stat{border:1px solid #eee6f2;background:#fff;border-radius:16px;padding:19px 21px;box-shadow:none}.stat-top{font-size:var(--text-small);color:var(--muted)}.stat-top svg{color:var(--muted);width:17px}.stat-value{font-size:var(--text-title);font-weight:600;letter-spacing:-1.3px;color:var(--ink);margin:13px 0 9px}.stat-value small{font-size:var(--text-small);color:var(--muted);letter-spacing:0;margin-left:6px}.stat-note{font-size:var(--text-small);color:var(--muted)}.trend{color:var(--muted)}.dashboard-grid{gap:21px;grid-template-columns:minmax(0,1.85fr) minmax(300px,1fr)}.panel{border:1px solid #ece4f0;border-radius:18px;box-shadow:var(--shadow);overflow:hidden}.panel-head{padding:22px 23px 16px}.panel-head h2{font-size:var(--text-small);font-weight:600;letter-spacing:-.35px}.panel-head p{font-size:var(--text-small);color:var(--muted);margin-top:5px}.panel-inner{padding:0 23px 22px}.chart{padding:0 8px}.chart svg{height:280px}.chart-legend{font-size:var(--text-small);color:var(--muted);padding:10px 23px 20px;gap:17px}.legend-line.blue{background:#a617d8}.chart-foot{background:#fdfbfe;border-top:1px solid #f2ecf5;font-size:var(--text-small);color:var(--muted);padding:13px 23px}.chart-foot svg{color:var(--muted)}.checkbox{color:var(--muted);font-size:var(--text-small)}.checkbox input{accent-color:#a617d8}.plan-toggle{background:#f7f2fa;padding:4px;border-radius:10px}.plan-toggle button{font-size:var(--text-small);color:var(--muted)}.plan-toggle button.active{background:white;color:#ad22cb;border:1px solid #ecdcf2;box-shadow:0 2px 5px #55256808}.recommendation-label{font-size:var(--text-small);color:var(--muted);margin-top:22px}.recommendation-number{font-size:var(--text-heading);font-weight:600;letter-spacing:-.8px;color:var(--ink)}.recommendation-number span{color:#ad22cb}.recommendation-copy{font-size:var(--text-small);color:var(--muted);line-height:1.8}.timing{background:#faf5fc;border:1px solid #f0e5f5;border-radius:12px}.timing span{font-size:var(--text-small);color:var(--muted)}.timing strong{font-size:var(--text-body);color:var(--muted)}.settings-label{font-size:var(--text-small);color:var(--muted)}.setting{color:var(--muted);font-size:var(--text-small);display:block}.setting input{display:block;width:100%;min-width:0;border:1px solid #e9dfee;border-radius:8px;padding:8px 10px;margin-top:7px;font-size:var(--text-small);color:var(--muted);background:#fdfbfe}.setting input[type=range]{accent-color:#ad24d2;padding:0;border:none;margin:14px 0 23px}.setting strong{float:right;color:#9f20c3;font-weight:600}.assumption{font-size:var(--text-small);color:var(--muted);line-height:1.8;margin-top:14px}.signal-icon{background:#f8eefc;color:#b138cc;border-radius:11px}.signal strong{font-size:var(--text-small);font-weight:600;color:var(--muted)}.signal p{font-size:var(--text-small);line-height:1.9;color:var(--muted)}.signals{padding:0 23px 24px}.signal{padding:18px 0;border-color:#f1eaf5}.search{background:#fbf8fd;border-color:#efe6f3;border-radius:9px}.search input{font-size:var(--text-small)}.route-button{color:var(--muted);font-size:var(--text-small);font-weight:600}.route-sub{font-size:var(--text-small);color:var(--muted);font-weight:400}.routes-table tr.selected{background:#fcf5ff}.routes-table th,.routes-table td{border-color:#f2ebf6}.routes-table td{font-size:var(--text-small);color:var(--muted)}.table-foot{border-color:#f3edf6;color:var(--muted);font-size:var(--text-small);padding:14px 23px}.link-button{color:#b541d1;font-size:var(--text-small)}.overview-link{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-top:23px;padding:21px 25px;background:linear-gradient(110deg,#efe2f6,#f9e8f4);border:1px solid #e8d2ef;border-radius:15px;color:var(--muted);font-size:var(--text-small)}.page-footer{color:var(--muted);font-size:var(--text-small);padding:26px 0 0;border:0}.page-footer strong{font-weight:600;color:var(--muted)}
.transport-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin-bottom:22px}.transport-metrics article{padding:17px 22px;background:white;border:1px solid var(--line);border-radius:15px}.transport-metrics span{display:block;font-size:var(--text-small);color:var(--muted)}.transport-metrics strong{display:block;font-size:var(--text-title);letter-spacing:-1px;margin-top:8px;font-weight:600}.transport-metrics small{font-size:var(--text-small);font-weight:400;color:var(--muted);letter-spacing:0}.positive{color:#168568}.transport-panel{border-color:#e5d8ec}.scene-heading{padding:19px 23px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.scene-heading>div{display:flex;align-items:center;gap:9px}.scene-heading strong{font-size:var(--text-small)}.scene-caption{font-size:var(--text-small);color:var(--muted);margin-left:10px}.live-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#b739d8;box-shadow:0 0 0 4px #f7e8fc}#fleet-scene{display:block;width:100%;height:auto;min-height:220px;background:#f3eef8}.playback{display:flex;gap:13px;align-items:center;padding:18px 23px;background:#fff}.play-button{border:0;border-radius:12px;background:linear-gradient(135deg,#d622b8,#9317d4);color:white;width:40px;height:40px;flex-shrink:0;box-shadow:0 4px 10px #ad24d22a}input[type=range]{accent-color:#a617d8;cursor:pointer}.playback input{flex:1;min-width:50px}.playback select{font-size:var(--text-small);padding:7px;border:1px solid var(--line);border-radius:8px;color:var(--muted);background:white}.playback>span{font-size:var(--text-small);color:var(--muted);font-variant-numeric:tabular-nums}.fleet-bottom{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(290px,1fr);gap:22px;margin-top:22px}table{width:100%;border-collapse:collapse}th{text-align:left;padding:13px 14px;font-size:var(--text-small);font-weight:600;color:var(--muted);border-bottom:1px solid var(--line);white-space:nowrap}td{padding:15px 14px;border-bottom:1px solid #f3edf6;font-size:var(--text-small);color:var(--muted)}tbody tr:last-child td{border:0}.fleet-bottom td strong{color:var(--muted)}.scenario-note{background:#f8f2fb;padding:12px;border-radius:10px;color:var(--muted);font-size:var(--text-small);line-height:1.7}.table-wrap{overflow-x:auto;padding:0 12px 12px}
.model-hero{display:flex;align-items:center;justify-content:space-between;position:relative;overflow:hidden;padding:31px 35px;border-radius:20px;margin-bottom:25px;background:radial-gradient(ellipse at 82% 0,#a329b9,transparent 55%),linear-gradient(115deg,#3c164e,#681181);color:white;min-height:216px}.hero-kicker{color:#d19ddf;font-size:var(--text-small);letter-spacing:1.6px;font-weight:600}.model-hero h2{font-size:var(--text-title);letter-spacing:-1px;margin:13px 0 8px;font-weight:600}.model-hero p{font-size:var(--text-small);color:#d5aedf;max-width:560px;line-height:1.8}.hero-tag{display:inline-flex;font-size:var(--text-small);border:1px solid #e7b6f140;background:#ffffff0d;border-radius:6px;padding:5px 9px;margin-top:7px;color:#edd0f6}.model-orbit{position:relative;width:210px;height:150px;display:grid;place-items:center;flex-shrink:0;margin-right:30px}.model-orbit span{font-size:50px;font-weight:600;letter-spacing:-4px;transform:rotate(-12deg)}.model-orbit i{position:absolute;inset:-20px;border:1px solid #ffffff20;border-radius:50%;transform:rotate(-25deg) scaleY(.65)}.model-orbit i:nth-of-type(2){inset:-50px}.model-orbit i:nth-of-type(3){inset:-80px}.locked{padding:36px;text-align:center;background:#fff}.locked>svg{width:30px;height:30px;color:var(--muted);margin-bottom:12px}.locked h2{font-size:var(--text-heading);letter-spacing:-.5px}.locked p{font-size:var(--text-small);color:var(--muted);margin:12px 0 22px}.admin-toolbar{display:flex;align-items:center;gap:12px;margin:23px 0}.admin-toolbar>div{margin-left:auto;display:flex;gap:10px}.muted{font-size:var(--text-small);color:var(--muted)}.schedule-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-bottom:23px}.schedule-card{padding:24px;background:white;border:1px solid var(--line);border-radius:18px}.schedule-card .schedule-top{display:flex;justify-content:space-between;gap:12px;align-items:center}.schedule-card h2{font-size:var(--text-small);letter-spacing:-.3px}.schedule-card p{font-size:var(--text-small);color:var(--muted);margin:9px 0 20px}.schedule-fields{display:grid;grid-template-columns:1fr 1fr;gap:13px}.schedule-card .button{margin-top:20px}.schedule-next{margin-left:10px;font-size:var(--text-small);color:var(--muted)}.switch{position:relative;display:inline-flex;align-items:center;cursor:pointer}.switch input{appearance:none;width:34px;height:20px;background:#e5dce9;border-radius:20px;margin:0;cursor:pointer}.switch input:checked{background:#ad24ce}.switch input:after{content:'';position:absolute;left:3px;top:3px;width:14px;height:14px;background:white;border-radius:50%;transition:transform .15s}.switch input:checked:after{transform:translateX(14px)}.versions-panel{margin-top:23px}.versions-panel .button{font-size:var(--text-small);padding:6px 9px;min-height:29px}.empty-row{text-align:center;padding:32px;color:var(--muted)}.version-code{font-family:monospace;color:var(--muted)}.subline{display:block;font-size:var(--text-small);color:var(--muted);margin-top:4px}.toast{position:fixed;right:30px;bottom:28px;z-index:99;background:#33203e;color:white;border:1px solid #a46dbb55;box-shadow:0 8px 30px #28113325;border-radius:13px;padding:15px 22px;font-size:var(--text-small);max-width:min(430px,90vw)}dialog{border:1px solid #eadbf1;border-radius:22px;padding:32px;max-width:440px;width:calc(100% - 30px);color:var(--ink);box-shadow:0 30px 100px #2e093c30}dialog::backdrop{background:#25102f66;backdrop-filter:blur(4px)}dialog h2{font-size:var(--text-heading);letter-spacing:-1px;line-height:1.3;margin:14px 0}dialog p{font-size:var(--text-small);color:var(--muted);line-height:1.8}dialog input{height:43px}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.validation-error{color:#ce526d;font-size:var(--text-small)}.network-error{color:#ce526d}
@media(min-width:1600px){.content{padding-top:40px}.chart svg{height:320px}}
@media(max-width:1250px){.app{grid-template-columns:205px minmax(0,1fr)}.content{padding:28px 24px}.topbar{padding:17px 24px}.sidebar{padding-left:14px;padding-right:14px}.brand-caption{font-size:var(--text-small);letter-spacing:1px}.nav button{font-size:var(--text-small)}.dashboard-grid{grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr)}h1{font-size:var(--text-title)}.stat{padding:17px 15px}.stat-value{font-size:var(--text-title)}.scene-caption{display:none}.schedule-next{display:block;margin:10px 0 0}}
@media(max-width:1050px){.dashboard-grid{grid-template-columns:1fr}.fleet-bottom{grid-template-columns:1fr}.recommendation .panel-inner{display:block}.chart svg{height:300px}.model-orbit{margin:0;width:150px}.admin-toolbar{flex-wrap:wrap}.admin-toolbar>div{margin-left:0;width:100%}.stats{grid-template-columns:repeat(4,minmax(0,1fr))}.stat-top{font-size:var(--text-small)}.stat-value{font-size:var(--text-heading)}.stat-value small{display:block;margin:5px 0 0;font-size:var(--text-small)}}
@media(max-width:760px){.app{display:block}.sidebar{padding:19px 20px;min-height:0;height:auto;position:static}.sidebar .brand{margin:0 0 18px}.brand-caption,.sidebar-note,.sidebar-bottom{display:none}.wordmark{font-size:var(--text-title)}.brand-name{font-size:var(--text-heading)}.nav{flex-direction:row;flex-wrap:wrap;gap:6px}.nav button{width:auto;padding:9px 10px;font-size:var(--text-small)}.nav button.active{border-color:#cd61f035}.topbar{padding:13px 20px}.version-chip{font-size:var(--text-small)}.breadcrumb{font-size:var(--text-small)}.top-actions{gap:7px}.top-actions .button{font-size:var(--text-small);min-height:31px;padding:7px 9px}.content{padding:25px 20px}.title-row{display:block}h1{font-size:var(--text-title)}.subtitle{font-size:var(--text-small);line-height:1.8}.stats{grid-template-columns:1fr 1fr}.stat-top{font-size:var(--text-small)}.stat-value{font-size:var(--text-title)}.stat-value small{display:inline;margin-left:6px}.transport-metrics{grid-template-columns:1fr 1fr;gap:10px}.transport-metrics article{padding:15px}.transport-metrics strong{font-size:var(--text-heading)}.scene-heading{padding:16px}.scene-heading strong{font-size:var(--text-small)}.scene-heading>.badge{display:none}.playback{gap:8px;padding:13px}.playback>span{display:none}.playback .button{padding:7px;min-height:32px}.play-button{width:33px;height:33px;border-radius:9px}.schedule-grid{grid-template-columns:1fr}.model-hero{padding:26px;min-height:200px}.model-hero h2{font-size:var(--text-heading)}.model-orbit{display:none}.admin-toolbar>div{flex-wrap:wrap}.overview-link{padding:18px;align-items:flex-start;flex-direction:column}.page-footer{gap:15px;font-size:var(--text-small)}.title-row>#admin-login{margin-top:15px}.filters{gap:10px}.cutoff{line-height:1.7}.locked{padding:26px}.locked h2{font-size:var(--text-heading)}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}

/* Timestamped names remain readable on narrow screens. */
#model-version{font-size:clamp(19px,2vw,29px);line-height:1.4;overflow-wrap:anywhere}.version-code{font-family:inherit;font-size:var(--text-small);white-space:normal}.version-chip{max-width:310px;line-height:1.5}

/* Motion language: short entrances, quiet WB light, deterministic fleet motion. */
@media(prefers-reduced-motion:no-preference){
 .page:not([hidden]){animation:page-reveal .42s cubic-bezier(.2,.7,.2,1) both}
 .page:not([hidden]) .stat,.page:not([hidden]) .transport-metrics article{animation:card-reveal .55s cubic-bezier(.2,.7,.2,1) both}
 .stat:nth-child(2),.transport-metrics article:nth-child(2){animation-delay:.045s!important}
 .stat:nth-child(3),.transport-metrics article:nth-child(3){animation-delay:.09s!important}
 .stat:nth-child(4),.transport-metrics article:nth-child(4){animation-delay:.135s!important}
 .stat,.transport-metrics article{transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}
 .stat:hover,.transport-metrics article:hover{transform:translateY(-3px);border-color:#d9b5e7;box-shadow:0 12px 24px #a617d80b}
 .button,.play-button{transition:transform .2s ease,box-shadow .2s ease,background .2s ease}
 .button:active,.play-button:active{transform:scale(.97)}
 .button.primary{position:relative;overflow:hidden}
 .button.primary:after{content:'';position:absolute;inset:-70% auto -70% -55%;width:28%;background:linear-gradient(90deg,transparent,#ffffff35,transparent);transform:rotate(24deg);pointer-events:none;transition:left .55s ease}
 .button.primary:hover:after{left:140%}
 .nav button{transition:background .2s ease,color .2s ease,border-color .2s ease,transform .2s ease}
 .nav button:hover{transform:translateX(2px)}
 .routes-table tbody tr{transition:background .2s ease}
 .routes-table tbody tr:hover{background:#faf1fe}
 .toast:not([hidden]){animation:toast-reveal .25s ease both}
 dialog[open]{animation:dialog-reveal .25s cubic-bezier(.2,.7,.2,1) both}
 .model-orbit i{animation:orbit-turn 32s linear infinite}
 .model-orbit i:nth-of-type(2){animation-duration:42s;animation-direction:reverse}
 .model-orbit i:nth-of-type(3){animation-duration:54s}
 .model-orbit i:after{content:'';position:absolute;left:15%;top:12%;width:5px;height:5px;border-radius:50%;background:#ecc3fa;box-shadow:0 0 12px #efb5ff}
 .model-orbit span{animation:brand-float 7s ease-in-out infinite}
 .forecast-stroke{stroke-dasharray:1;animation:forecast-draw .85s cubic-bezier(.2,.7,.2,1) both}
 .is-playing .play-button{animation:play-glow 2.4s ease-in-out infinite}
 .is-playing .live-dot{animation:status-breathe 2s ease-in-out infinite}
}
.vehicle-tag text{font-weight:600}.fleet-vehicle{pointer-events:none}.vehicle-body{transform-box:view-box}.transport-panel{position:relative}.transport-panel:after{content:'';position:absolute;inset:0;pointer-events:none;border-radius:18px;box-shadow:inset 0 0 45px #ac45c405}.is-playing #scene-live-status{background:#f5e8fc;color:#aa29c9}.playback input[type=range]{height:4px;border-radius:8px;appearance:none;background:linear-gradient(to right,#b629d6 var(--timeline-progress,0%),#ece3f2 var(--timeline-progress,0%))}.playback input[type=range]::-webkit-slider-thumb{appearance:none;width:13px;height:13px;border-radius:50%;background:white;border:3px solid #af25d0;box-shadow:0 1px 5px #a21ad430}.playback input[type=range]::-moz-range-thumb{width:9px;height:9px;border-radius:50%;background:white;border:3px solid #af25d0}.model-orbit{contain:layout style}.model-orbit i,.model-orbit span{animation-play-state:paused!important}#page-model:not([hidden]) .model-orbit i,#page-model:not([hidden]) .model-orbit span{animation-play-state:running!important}
@keyframes page-reveal{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
@keyframes card-reveal{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
@keyframes toast-reveal{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
@keyframes dialog-reveal{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes orbit-turn{from{transform:rotate(-25deg) scaleY(.65)}to{transform:rotate(335deg) scaleY(.65)}}
@keyframes brand-float{0%,100%{transform:translateY(0) rotate(-12deg)}50%{transform:translateY(-5px) rotate(-9deg)}}
@keyframes forecast-draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes play-glow{0%,100%{box-shadow:0 4px 12px #ad24d22a}50%{box-shadow:0 4px 20px #ad24d257}}
@keyframes status-breathe{0%,100%{box-shadow:0 0 0 3px #d334e01a}50%{box-shadow:0 0 0 6px #d334e008}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}.vehicle-beam{display:none}}

/* Whole-network shift capacity, inspired by the supplied timeline. */
.shift-panel{margin-top:23px;background:linear-gradient(140deg,#fff 65%,#fdf8ff);overflow:hidden}.shift-heading{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:26px 26px 19px}.shift-heading h2{font-size:var(--text-heading);letter-spacing:-.65px;font-weight:600;line-height:1.4}.shift-heading p{font-size:var(--text-small);color:var(--muted);margin:8px 0 0}.shift-heading .eyebrow{font-size:var(--text-small);margin-bottom:8px}.shift-controls{display:flex;gap:20px;align-items:center;padding:17px 26px;background:#fcf8fe;border-block:1px solid #f1e7f6}.shift-controls .setting{width:180px;flex-shrink:0;font-size:var(--text-small);line-height:1.6}.shift-controls .setting:nth-child(2){width:215px}.shift-controls input{background:white;margin-top:5px}.shift-rule{display:flex;gap:9px;font-size:var(--text-small);color:var(--muted);line-height:1.8;max-width:290px;margin-left:auto}.shift-rule svg{flex-shrink:0;width:16px;height:16px}.shift-body{display:grid;grid-template-columns:minmax(0,1.9fr) minmax(240px,1fr)}.shift-plot-side{padding:24px 20px 17px 26px;min-width:0}.shift-legend{display:flex;gap:15px;flex-wrap:wrap;color:var(--muted);font-size:var(--text-small);margin:0 0 27px 24px}.shift-legend>span{display:flex;align-items:center;gap:5px}.shift-swatch{width:8px;height:8px;border-radius:3px;background:linear-gradient(135deg,#d02bad,#8725df)}.shift-swatch.shortfall{background:#e25b7d}.shift-line{width:14px;border-top:1.5px dashed #a930d3}.shift-chart-scroll{overflow-x:auto;overflow-y:hidden;padding-top:15px}.shift-chart{position:relative;height:230px;min-width:440px;padding-left:40px}.shift-axis{position:absolute;left:0;right:0;top:0;bottom:33px;pointer-events:none}.shift-axis span{position:absolute;left:0;right:0;height:0;border-top:1px solid #f1e9f6;font-size:var(--text-small);color:var(--muted);padding-left:0;line-height:0}.shift-axis span:before{content:'';position:absolute;left:0;width:35px;top:-3px;height:6px;background:white}.shift-axis span{isolation:isolate}.shift-columns{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:6px;height:100%;position:relative;z-index:1}.shift-column{border:0;background:transparent;padding:0 4px;border-radius:10px;display:flex;flex-direction:column;min-width:0;position:relative;color:var(--muted)}.shift-column.selected{background:#b939d809;box-shadow:inset 0 0 0 1px #c574e32a}.shift-column:hover{background:#a82dd409}.shift-bar-space{display:flex;align-items:flex-end;justify-content:center;position:relative;height:calc(100% - 33px);width:100%}.shift-bar{position:relative;display:flex;flex-direction:column-reverse;width:100%;max-width:42px;min-height:0;border-radius:7px 7px 3px 3px;transform-origin:bottom center;filter:drop-shadow(0 3px 3px #a124d00a)}.shift-bar-normal{display:block;width:100%;background:linear-gradient(160deg,#cf26ac,#8725e4);border-radius:inherit}.shift-bar-shortage{position:absolute;top:0;left:0;right:0;display:block;background:linear-gradient(150deg,#f0839a,#da446b);border-radius:7px 7px 0 0}.overloaded .shift-bar-normal{border-radius:0 0 3px 3px}.shift-value{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);font-size:var(--text-small);color:var(--muted);font-weight:600;white-space:nowrap;padding-bottom:8px}.shift-column.overloaded .shift-value{color:#d34c6d}.shift-tick{height:33px;width:100%;display:flex;align-items:center;justify-content:center;font-size:var(--text-small);color:var(--muted);white-space:nowrap}.shift-column.selected .shift-tick{color:#a521cb;font-weight:600}.shift-fleet-line{position:absolute;left:40px;right:0;border-top:1.5px dashed #a02bcd;z-index:2;pointer-events:none;transition:bottom .3s ease}.shift-fleet-line>span{position:absolute;right:0;bottom:4px;padding:2px 5px;background:#fff9ffdb;border-radius:4px;color:#a02bcd;font-size:var(--text-small)}.shift-chart-hint{font-size:var(--text-small);color:var(--muted);line-height:1.7;margin:14px 0 0 40px}.shift-detail{padding:24px 22px;background:#faf4fd;border-left:1px solid #eee1f4}.shift-detail-kicker{font-size:var(--text-small);color:var(--muted);letter-spacing:1px;font-weight:600}.shift-detail h3{font-size:var(--text-heading);letter-spacing:-1px;font-weight:600;margin:10px 0 19px;color:var(--muted)}.shift-numbers{display:flex;gap:29px}.shift-numbers span{display:block;font-size:var(--text-small);color:var(--muted)}.shift-numbers strong{font-size:var(--text-title);font-weight:600;letter-spacing:-1px;display:block;margin-top:4px;color:var(--muted)}.shift-numbers .has-shortage{color:#d45373}.shift-detail>p{font-size:var(--text-small);line-height:1.9;color:var(--muted);margin:13px 0 18px}.shift-top-label{font-size:var(--text-small);color:var(--muted);margin-bottom:10px}.shift-route{position:relative;display:flex;justify-content:space-between;gap:10px;text-align:left;width:100%;background:#fff8;border:1px solid #ecddf3;border-radius:8px;padding:9px 10px;margin:6px 0;overflow:hidden;font-size:var(--text-small);color:var(--muted)}.shift-route>span,.shift-route>strong{position:relative;z-index:1}.shift-route small{display:block;color:var(--muted);font-size:var(--text-small);font-weight:400;margin-top:3px}.shift-route>strong{text-align:right;font-size:var(--text-small)}.shift-route>i{position:absolute;inset:auto 0 0 0;height:2px;background:linear-gradient(to right,#d39be0 var(--contribution),transparent var(--contribution))}.shift-scene-link{width:100%;justify-content:space-between;background:transparent;margin-top:13px;font-size:var(--text-small);color:#9d4bb7;box-shadow:none}.shift-footer{display:flex;gap:8px;padding:14px 26px;border-top:1px solid #f0e6f5;background:#fdfaff;font-size:var(--text-small);color:var(--muted);line-height:1.9}.shift-footer svg{width:14px;height:14px;flex-shrink:0;margin-top:2px}.shift-panel>.validation-error{margin:12px 26px}.shift-chart[aria-disabled=true]{opacity:.3;pointer-events:none}
@media(prefers-reduced-motion:no-preference){.shift-bar{animation:shift-grow .55s cubic-bezier(.2,.7,.2,1) both;animation-delay:calc(var(--bar-order)*30ms)}.shift-route{transition:transform .18s ease,border-color .18s ease,background .18s ease}.shift-route:hover{transform:translateX(2px);border-color:#d6b2e5;background:white}.shift-column{transition:background .2s ease,box-shadow .2s ease}}
@keyframes shift-grow{from{transform:scaleY(.05);opacity:.2}to{transform:scaleY(1);opacity:1}}
@media(max-width:1200px){.shift-body{grid-template-columns:minmax(0,1.65fr) minmax(220px,1fr)}.shift-heading{padding:23px}.shift-controls{padding:15px 23px;gap:15px}.shift-rule{font-size:var(--text-small)}.shift-controls .setting{width:150px}.shift-controls .setting:nth-child(2){width:180px}.shift-plot-side{padding-left:16px}.shift-heading h2{font-size:var(--text-heading)}.shift-legend{gap:10px;font-size:var(--text-small)}}
@media(max-width:1000px){.shift-body{grid-template-columns:1fr}.shift-detail{border-left:0;border-top:1px solid #eee1f4}.shift-detail h3{font-size:var(--text-heading)}.shift-rule{display:none}.shift-controls .setting,.shift-controls .setting:nth-child(2){flex:1;width:auto}.shift-heading{align-items:flex-start}.shift-heading>.badge{font-size:var(--text-small)}.shift-plot-side{padding:23px}#shift-routes{display:grid;grid-template-columns:1fr 1fr;gap:6px}.shift-route{margin:0}.shift-scene-link{width:auto;gap:20px}.shift-legend{font-size:var(--text-small)}}
@media(max-width:500px){.shift-heading{padding:20px;display:block}.shift-heading>.badge{margin-top:13px}.shift-heading h2{font-size:var(--text-heading)}.shift-controls{padding:13px 20px}.shift-controls .setting{font-size:var(--text-small)}.shift-plot-side{padding:20px 12px}.shift-detail{padding:22px 20px}.shift-legend{font-size:var(--text-small);gap:10px;margin-left:5px}.shift-footer{padding:14px 20px;font-size:var(--text-small)}.shift-chart-hint{margin-left:5px}#shift-routes{gap:7px}.shift-chart{min-width:420px}}

.shift-axis span{border:0}.shift-axis span:before{display:none}.shift-axis span:after{content:"";position:absolute;left:40px;right:0;top:0;border-top:1px solid #f1e9f6;z-index:-1}

/* Three focused dashboards share a single data selection. */
.dashboard-tabs{display:flex;gap:5px;align-items:center;border-bottom:1px solid #e9dfef;margin:0 0 21px;padding-bottom:9px;overflow-x:auto}.dashboard-tabs button{display:flex;gap:8px;align-items:center;border:0;background:transparent;border-radius:10px;padding:12px 17px;color:var(--muted);font-size:var(--text-small);font-weight:600;white-space:nowrap}.dashboard-tabs button svg{width:16px;height:16px}.dashboard-tabs button[aria-selected=true]{background:#f0e0f8;color:#9b24c2}.dashboard-tabs button:hover{background:#f4eaf9}.overview-filters{background:white;border:1px solid #eadff0;border-radius:15px;margin-bottom:24px;overflow:hidden}.filter-main{display:flex;align-items:flex-end;gap:15px;padding:17px 20px}.filter-main .setting{font-size:var(--text-small);line-height:1.6;min-width:130px}.filter-main input,.filter-main select,.dashboard-context select{display:block;width:100%;border:1px solid #e9dfee;background:#fdfbfe;color:var(--muted);border-radius:8px;padding:9px 11px;font-size:var(--text-small);min-height:35px;margin-top:5px}.filter-main .filter-route-ids{flex:1;min-width:190px}.filter-main>.button{box-shadow:none;min-height:35px;white-space:nowrap}.filter-time{display:flex;align-items:center;gap:8px;border:0;margin:0;padding:0;min-width:210px}.filter-time legend{font-size:var(--text-small);color:var(--muted);margin-bottom:5px;padding:0}.filter-time select{width:90px;margin-top:0}.filter-time>span{color:var(--muted)}.filter-details{border-top:1px solid #f1e8f5}.filter-details>summary{display:flex;justify-content:space-between;align-items:center;cursor:pointer;list-style:none;font-size:var(--text-small);color:var(--muted);padding:12px 20px}.filter-details>summary:after{content:'⌄';font-size:var(--text-small);margin-left:12px}.filter-details[open]>summary:after{content:'⌃'}.filter-details>summary>span{margin-left:auto;font-size:var(--text-small);color:var(--muted)}.filter-explanation{font-size:var(--text-small);color:var(--muted);line-height:1.7;padding:0 20px 14px}.range-filter-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;padding:0 20px 20px}.range-filter>span{font-family:monospace;font-size:var(--text-small);color:var(--muted)}.range-filter>div{display:flex;align-items:center;gap:5px;margin-top:6px}.range-filter input{width:100%;min-width:0;border:1px solid #e9dfee;border-radius:7px;padding:8px;font-size:var(--text-small);background:#fdfbfe;color:var(--muted)}.range-filter input:disabled{opacity:.45;cursor:not-allowed;background:#f3f0f5}.range-filter>div>span{color:var(--muted)}.filter-bottom{display:flex;justify-content:space-between;gap:15px;background:#fcf9fe;border-top:1px solid #f1e8f5;padding:10px 20px;font-size:var(--text-small);color:var(--muted)}.filter-bottom>span:first-child{color:var(--muted)}.overview-filters>.validation-error{margin:10px 20px 14px}.overview-dashboard{min-width:0}.overview-dashboard>.shift-panel{margin-top:0}.network-stats .stat-value{font-size:clamp(22px,2.25vw,32px);white-space:nowrap}.dashboard-context{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:19px}.dashboard-context h2{font-size:var(--text-body);letter-spacing:-.45px}.dashboard-context p{font-size:var(--text-small);color:var(--muted);margin:5px 0 0}.dashboard-context .setting{min-width:190px;font-size:var(--text-small)}.dashboard-context select{margin-top:4px;background:white}.route-dashboard-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:20px}.route-dashboard-grid .chart-panel{min-width:0}.route-list-panel{grid-column:auto!important}.route-list-panel .table-wrap{max-height:360px;overflow:auto;padding-bottom:0}.route-list-panel thead{position:sticky;top:0;z-index:1;background:white}.route-list-panel th{font-size:var(--text-small)}.route-list-panel td{padding-block:10px}.route-list-panel .table-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 20px;flex-wrap:wrap}.route-pagination{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:var(--text-small)}.route-pagination .button{padding:4px 8px;min-height:26px;box-shadow:none}.route-list-panel .route-button{white-space:nowrap}.observation-panel{margin-top:20px;background:#fdfaff}.observation-panel summary{display:flex;gap:15px;justify-content:space-between;cursor:pointer;padding:15px 21px;font-size:var(--text-small);color:var(--muted)}.observation-panel summary span{font-size:var(--text-small);color:var(--muted)}.observation-panel #route-observations{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:12px;padding:4px 21px 19px}.observation-panel #route-observations>div{padding:10px;border:1px solid #eddef4;background:white;border-radius:9px;min-width:0}.observation-panel #route-observations span{display:block;font-size:var(--text-small);color:var(--muted)}.observation-panel #route-observations strong{display:block;font-size:var(--text-small);margin-top:5px;font-weight:600;color:var(--muted);overflow-wrap:anywhere}.observation-panel #route-observations p{grid-column:1/-1;color:var(--muted);font-size:var(--text-small)}.dispatch-dashboard-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(260px,1fr);gap:22px}.dispatch-dashboard-grid .recommendation .panel-inner{display:block}.dispatch-dashboard-grid .recommendation-number{font-size:var(--text-title)}.dispatch-preview{position:relative;padding:35px;background:radial-gradient(ellipse at 100% 0,#9d269a55,transparent 65%),linear-gradient(140deg,#34133f,#60187e);color:white;display:flex;flex-direction:column;align-items:flex-start;justify-content:center}.dispatch-preview-brand{font-size:46px;font-weight:600;letter-spacing:-3px;margin-bottom:43px;color:white}.dispatch-preview-brand span{font-size:var(--text-title);font-weight:400;letter-spacing:-1px;opacity:.65;margin-left:12px}.dispatch-preview .eyebrow{color:#dd9fe7;font-size:var(--text-small)}.dispatch-preview h2{font-size:var(--text-title);letter-spacing:-1px;line-height:1.25}.dispatch-preview p{font-size:var(--text-small);line-height:1.9;color:#d4aedf;max-width:270px;margin:17px 0 24px}.dispatch-preview-note{font-size:var(--text-small);color:var(--muted);margin-top:14px}.dashboard-note{border-top:1px solid #efe5f5;background:#fdfaff;font-size:var(--text-small);color:var(--muted);line-height:1.9}.dashboard-note summary{padding:12px 20px;cursor:pointer;color:var(--muted)}.dashboard-note>div{padding:0 20px 16px;display:flex;gap:8px}.dashboard-note svg{width:14px;height:14px;flex-shrink:0;margin-top:3px}.scenario-caption{font-size:var(--text-small);color:var(--muted);margin-left:auto}.overview-empty{text-align:center;padding:55px 25px;color:var(--muted)}.overview-empty>svg{width:30px;height:30px;color:var(--muted);margin-bottom:16px}.overview-empty h2{font-size:var(--text-heading)}.overview-empty p{font-size:var(--text-small);color:var(--muted);margin:12px 0 23px}.overview-empty>.button{background:white}.overview-dashboard .chart svg{height:280px}.dashboard-context select:disabled{opacity:.5}
@media(min-width:1500px){.route-dashboard-grid{grid-template-columns:minmax(0,1.2fr) minmax(420px,1fr)}.route-list-panel .table-wrap{max-height:355px}.route-list-panel .panel-head{padding-top:22px}}
@media(max-width:1100px){.range-filter-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.filter-main{flex-wrap:wrap}.filter-main .filter-route-ids{min-width:200px}.filter-main .filter-time{flex:1}.network-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.network-stats .stat-value{font-size:var(--text-title)}.observation-panel #route-observations{grid-template-columns:repeat(4,minmax(0,1fr))}.dispatch-dashboard-grid{grid-template-columns:1fr}.dispatch-preview{padding:26px;min-height:240px}.dispatch-preview-brand{display:none}.dispatch-preview h2{font-size:var(--text-heading)}.dispatch-preview h2 br{display:none}.dispatch-preview p{max-width:100%;margin:10px 0 15px}}
@media(max-width:760px){.dashboard-tabs button{font-size:var(--text-small);padding:10px 12px}.dashboard-tabs{margin-bottom:16px}.filter-main{padding:15px;gap:12px}.filter-main .setting{flex:1;min-width:120px}.filter-main .filter-route-ids{min-width:150px}.filter-main .filter-time{min-width:190px;flex:1}.filter-main>.button{font-size:var(--text-small)}.filter-bottom{padding:9px 15px;flex-wrap:wrap;gap:5px}.filter-bottom>span:last-child{display:none}.filter-details>summary{padding:11px 15px}.filter-explanation{padding-inline:15px;font-size:var(--text-small)}.range-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr));padding:0 15px 15px}.dashboard-context{gap:10px;flex-wrap:wrap}.dashboard-context .setting{min-width:160px}.dashboard-context h2{font-size:var(--text-body)}.observation-panel summary{flex-direction:column;gap:4px}.observation-panel #route-observations{grid-template-columns:repeat(2,minmax(0,1fr))}.overview-filters{margin-bottom:20px}.dashboard-note summary{padding:12px 16px}.scenario-caption{display:none}}
@media(prefers-reduced-motion:no-preference){.overview-dashboard:not([hidden]){animation:page-reveal .3s ease both}.dashboard-tabs button{transition:background .18s,color .18s}}
.derived-explanation{border-top:1px dashed #efe3f5;padding-top:14px}
.export-panel{margin:0 0 21px;overflow:hidden}
.export-panel>summary{display:flex;align-items:center;gap:14px;cursor:pointer;list-style:none;padding:15px 20px}
.export-panel>summary::-webkit-details-marker{display:none}
.export-kicker{font-size:var(--text-small);letter-spacing:1.6px;font-weight:600;color:#c214a6}
.export-panel>summary strong{font-size:var(--text-small);color:var(--ink)}
.export-open{margin-left:auto;font-size:var(--text-small);color:var(--muted)}.export-open:after{content:' ⌄'}
.export-panel[open] .export-open:after{content:' ⌃'}
.export-toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:12px 20px;border-top:1px solid #f1e8f5;background:#fcf9fe}
.export-toolbar .export-note{font-size:var(--text-small);color:var(--muted);flex:1;min-width:200px}
.export-preview{max-height:300px;padding:0 12px}
.export-preview td{white-space:nowrap;padding-block:9px}
.export-foot{margin:0;padding:10px 20px 14px;font-size:var(--text-small);color:var(--muted)}
.stats.compact-stats{margin:16px 0 0;gap:12px}
.stats.compact-stats .stat{padding:12px 16px;border-radius:12px}
.stats.compact-stats .stat-value,.network-stats.compact-stats .stat-value{font-size:var(--text-heading);letter-spacing:-.5px;margin:6px 0 3px}
.stats.compact-stats .stat-value small{font-size:var(--text-small)}
.stats.compact-stats .stat-note{font-size:var(--text-small)}
.page>.export-panel{margin-top:23px}
.stats.compact-stats .stat{padding:16px 19px;border-radius:14px}
.stats.compact-stats .stat-value,.network-stats.compact-stats .stat-value{font-size:var(--text-heading);letter-spacing:-.8px;margin:9px 0 6px}
.stats.compact-stats .stat-value small{font-size:var(--text-small)}
.stats.compact-stats .stat-note{font-size:var(--text-small)}
.route-controls{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap}
.route-picker{position:relative;display:flex;flex-direction:column;gap:6px}
.picker-label{font-size:var(--text-small);color:var(--muted)}
.picker-toggle{display:flex;gap:10px;align-items:center;min-width:210px;justify-content:space-between}
.picker-pop{position:absolute;top:100%;left:0;z-index:30;margin-top:6px;width:330px;background:#fff;border:1px solid #eadff1;border-radius:14px;box-shadow:0 12px 32px #3b1a4a1f;padding:12px}
.picker-pop input[type=search]{width:100%;margin-bottom:9px}
.picker-quick{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:9px}.picker-quick .button{font-size:var(--text-small);padding:6px 9px}
.picker-list{max-height:240px;overflow:auto;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}
.picker-list label{display:flex;gap:6px;align-items:center;font-size:var(--text-small);color:var(--muted);padding:5px 6px;border-radius:8px;cursor:pointer}
.picker-list label:hover{background:#faf4fd}.picker-list input{accent-color:#a617d8}
.picker-more{font-size:var(--text-small);color:var(--muted);margin-top:6px}
.chart-modes{display:flex;gap:12px;flex-wrap:wrap;padding:0 23px 8px}
.chart-modes .plan-toggle button{padding:6px 10px}
.picker-chips{display:flex;gap:6px;flex-wrap:wrap;padding:0 23px}
.picker-chip{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-small);padding:4px 6px 4px 9px;border-radius:999px;background:#faf4fd;border:1px solid #efe2f6;color:var(--muted)}
.picker-chip i{width:8px;height:8px;border-radius:50%;display:inline-block}
.picker-chip.primary{border-color:#d9b4ea;background:#f5e9fc}
.picker-chip button{border:0;background:none;cursor:pointer;color:var(--muted);font-size:var(--text-small);line-height:1;padding:0 3px}
.picker-chip .chip-name{border:0;background:none;cursor:pointer;color:inherit;font:inherit;padding:0}
.chart-hint{margin:8px 23px 0;font-size:var(--text-small);color:#b06b12;background:#fff6e8;border-radius:8px;padding:7px 10px}
.series-legend{display:flex;gap:12px;flex-wrap:wrap}
.series-legend span{display:flex;align-items:center;gap:5px}.series-legend i{width:16px;height:3px;border-radius:2px;display:inline-block}
.compare-wrap{border-top:1px solid #f2ecf5}
.compare-head{font-size:var(--text-small);font-weight:600;color:var(--muted);padding:13px 23px 4px}.compare-head span{font-weight:400;color:var(--muted);font-size:var(--text-small);margin-left:6px}
.compare-table td{padding-block:9px;white-space:nowrap}.compare-table tr{cursor:pointer}.compare-table tr.selected td{background:#fbf6fe}
.compare-table i{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:7px}
.chart-info{font-size:var(--text-small);color:var(--muted);cursor:help;margin-left:4px;font-weight:400}
.shift-plot-side{display:flex;flex-direction:column}
.shift-chart-scroll{flex:1;display:flex;min-height:250px}
.shift-chart{height:auto;flex:1;min-height:250px}
.shift-detail{padding:20px 20px}
.shift-detail h3{margin:6px 0 12px}
.shift-numbers strong{font-size:var(--text-heading)}
.shift-detail>p{margin:8px 0 12px;line-height:1.7}
.shift-route{padding:7px 9px;margin:4px 0}
@media(max-width:1000px){.shift-chart-scroll,.shift-chart{min-height:230px}}
/* ---- Фильтры в фирменных цветах ---- */
.overview-filters{border-color:#ecdff4}
.filter-main .setting,.filter-time legend{color:var(--muted)}
.overview-filters input[type=text],.overview-filters input[type=number],.overview-filters select{background:#fbf7fe;border:1px solid #e6d6f0;border-radius:9px;color:var(--ink);transition:border-color .15s,box-shadow .15s,background .15s}
.overview-filters input:hover,.overview-filters select:hover{border-color:#cfa6e0}
.overview-filters input:focus,.overview-filters select:focus{outline:none;border-color:#b02fd0;box-shadow:0 0 0 3px #f1dcf9;background:#fff}
.overview-filters input::placeholder{color:var(--muted)}
.overview-filters input.has-value{border-color:#c24fdc;background:#f8ecfd;color:var(--muted);font-weight:600}
#filters-reset{border-color:#d9b4ea;color:#a21fc4;background:#fff}
#filters-reset:hover{background:#f6e8fb;border-color:#b55fd3}
.filter-details>summary{color:var(--muted);font-weight:600}
#filter-condition-count{margin-left:auto;padding:3px 10px;border-radius:999px;background:#f3ecf7;color:var(--muted);font-size:var(--text-small)}
#filter-condition-count.active{background:linear-gradient(135deg,#d417b3,#7d2ae8);color:#fff;font-weight:600}
.filter-group-title{display:flex;align-items:center;gap:8px;padding:2px 20px 4px;font-size:var(--text-small);font-weight:600;color:var(--muted)}
.filter-group-title i{width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,#d417b3,#7d2ae8)}
.filter-group-title.derived{margin-top:6px;padding-top:14px;border-top:1px dashed #ecdff4}
.filter-explanation{color:var(--muted)}
.derived-explanation{border-top:0;padding-top:0}
.range-filter>span{display:flex;align-items:baseline;gap:6px;font-family:inherit;margin-bottom:5px}
.range-filter>span b{font-size:var(--text-small);font-weight:600;color:var(--muted)}
.range-filter>span small{font-size:var(--text-small);color:var(--muted);font-family:var(--mono,ui-monospace,monospace)}
.range-clear{margin-left:auto;border:0;background:#f3e3fa;color:#a21fc4;width:16px;height:16px;border-radius:50%;font-size:var(--text-small);line-height:16px;padding:0;cursor:pointer;visibility:hidden}
.range-filter.has-value .range-clear{visibility:visible}
.range-filter.has-value>span b{color:#a21fc4}
.range-filter-hint{align-self:end;font-size:var(--text-small);line-height:1.5;color:var(--muted);background:#faf4fd;border:1px dashed #ead9f3;border-radius:9px;padding:8px 10px}
.derived-filter-grid{grid-template-columns:repeat(5,minmax(0,1fr))}
#filter-summary{color:var(--muted);font-weight:600;font-size:var(--text-small)}
@media(max-width:1100px){.derived-filter-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:760px){.derived-filter-grid{grid-template-columns:1fr 1fr}}

/* Shared, readable hierarchy for metrics across every dashboard. */
:root{--muted:#6e5b79}
.sidebar .nav{margin-top:32px}
.stat-top,.transport-metrics span,.recommendation-label,.timing span,.shift-numbers span{font-size:var(--text-small);color:var(--muted);line-height:1.5}
.stat-value,.network-stats .stat-value,.stats.compact-stats .stat-value,.network-stats.compact-stats .stat-value,
.transport-metrics strong,.shift-numbers strong,.timing strong,
.recommendation-number,.dispatch-dashboard-grid .recommendation-number{font-size:var(--text-heading);font-weight:600;line-height:1.45;letter-spacing:0;overflow-wrap:anywhere;white-space:normal}
.stat-value,.stats.compact-stats .stat-value,.network-stats.compact-stats .stat-value{margin:8px 0 5px}
.stat-value small,.stats.compact-stats .stat-value small,.transport-metrics small{font-size:var(--text-small);font-weight:400;color:var(--muted);letter-spacing:0}
.stat-note,.stats.compact-stats .stat-note,.stat-note .trend{font-size:var(--text-small);color:var(--muted);line-height:1.5}
.stat,.stats.compact-stats .stat,.transport-metrics article{padding:17px 19px}
.subtitle,.panel-head p,.dashboard-context p,.recommendation-copy,.shift-detail>p,.scenario-note,
.signal p,.schedule-card p,.locked p,dialog p{font-size:var(--text-small);color:var(--muted);line-height:1.65}
.setting,.filter-main .setting,.filter-time legend,.settings-label,.picker-label{font-size:var(--text-small);color:var(--muted)}
.assumption,.dashboard-note,.filter-explanation,.range-filter-hint,.chart-foot,.chart-legend,
.table-foot,.route-sub,.subline,.schedule-next,.muted{font-size:var(--text-small);color:var(--muted)}
.range-filter>span b{font-size:var(--text-small);color:var(--muted)}
.range-filter>span small{font-size:var(--text-small);color:var(--muted)}
.observation-panel #route-observations span{font-size:var(--text-small);color:var(--muted)}
.observation-panel #route-observations strong{font-size:var(--text-small);color:var(--ink)}
.panel-head h2,.schedule-card h2,.shift-detail h3{font-size:var(--text-body)}
.shift-numbers{gap:16px;flex-wrap:wrap}
@media(max-width:1050px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.stats,.transport-metrics{grid-template-columns:1fr}.sidebar .nav{margin-top:18px}}

/* Self-hosted Golos Text from Google Fonts, licensed under SIL OFL. */
body{font-family:'Golos Text',Arial,sans-serif;font-size:var(--text-body);line-height:1.55}
button,input,select,textarea{font-family:inherit}
.content{max-width:1560px}
h1{font-size:var(--text-title);letter-spacing:-.5px;font-weight:600}
.panel-head h2,.shift-heading h2,.dashboard-context h2{font-size:var(--text-heading);letter-spacing:0;font-weight:600}
.stat-top,.transport-metrics span,.setting,.filter-main .setting,.filter-time legend,
.shift-controls .setting,.dashboard-context .setting,.picker-label,.recommendation-label,.timing span,.shift-numbers span{font-size:var(--text-body);color:var(--ink);font-weight:400}
.setting input,.overview-filters input,.overview-filters select,.dashboard-context select{font-size:var(--text-body);min-height:42px;color:var(--ink);background:#fff}
.stat,.stats.compact-stats .stat,.transport-metrics article{padding:20px}
.stat-value,.network-stats .stat-value,.stats.compact-stats .stat-value,.network-stats.compact-stats .stat-value,
.transport-metrics strong,.shift-numbers strong,.timing strong,.recommendation-number,.dispatch-dashboard-grid .recommendation-number{font-size:var(--text-heading);font-weight:600}
.stat-top svg{display:none}
.stat-note,.stats.compact-stats .stat-note,.stat-value small,.stats.compact-stats .stat-value small{color:var(--muted);font-size:var(--text-small)}
.nav button{font-size:var(--text-body);line-height:1.4;color:#e2d7e8;align-items:flex-start}
.nav button svg{flex-shrink:0;margin-top:2px}
.app{grid-template-columns:260px minmax(0,1fr)}
.button,.plan-toggle button,.dashboard-tabs button,.route-button,.routes-table td,td{font-size:var(--text-body)}
th,.route-list-panel th{font-size:var(--text-small);color:var(--ink);white-space:normal}
.routes-table td,td{color:var(--ink)}
.subtitle,.panel-head p,.shift-heading p,.dashboard-context p,.shift-legend,.shift-tick,.shift-axis span,
.shift-chart-hint,.shift-top-label,.shift-detail-kicker,.shift-route small,.chart-legend,.chart-foot,.checkbox,
.filter-explanation,.filter-bottom,.filter-bottom>span:first-child,#filter-summary,.range-filter-hint,
.range-filter>span small,.assumption,.dashboard-note,.dashboard-note summary,.route-sub,.table-foot,
.export-note,.export-foot,.export-open,.subline,.muted,.schedule-next,.schedule-card p,.recommendation-copy{color:var(--muted);font-size:var(--text-small);line-height:1.6}
.range-filter{display:flex;flex-direction:column;min-width:0}
.range-filter>span{flex-wrap:wrap;flex:1;align-items:flex-start}
.range-filter>div{margin-top:8px}
.range-filter>span b{font-size:var(--text-small);color:var(--ink)}
.range-filter>span small{font-family:inherit}
.shift-detail-kicker{letter-spacing:0;font-weight:400}
.shift-top-label{margin-top:24px}
.shift-route{font-size:var(--text-body);padding:12px;margin:8px 0}
.shift-route>strong{font-size:var(--text-body)}
.shift-chart{min-width:580px;padding-left:55px}
.shift-fleet-line{left:55px}
.shift-controls{flex-wrap:wrap}
.shift-controls .setting,.shift-controls .setting:nth-child(2){width:auto;flex:1 1 220px}
.filter-main{flex-wrap:wrap;gap:20px}
.filter-main .setting,.filter-main .filter-time{flex:1 1 200px;min-width:0}
.settings-label{gap:12px}
.overview-status{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.overview-status .demo-label{margin:0;padding:5px 9px;border:0;border-radius:7px;font-size:var(--text-small);line-height:1.5;background:#f0e9f5;color:var(--muted)}
.timing{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;padding:18px 20px;margin:18px 0 24px;align-items:start}
.timing>div{min-width:0;display:flex;flex-direction:column;gap:6px}
.timing span{font-size:var(--text-body);font-weight:400;line-height:1.5;color:var(--muted)}
.timing strong{margin:0;font-size:var(--text-heading);font-weight:600;line-height:1.5;letter-spacing:0;overflow-wrap:anywhere}
@media(max-width:480px){.timing{grid-template-columns:1fr;gap:16px;padding:16px}}
.filter-bottom{background:#fff}
.badge,.version-chip{font-size:var(--text-small)}
.badge.gray{color:var(--muted)}
.demo-banner{font-size:var(--text-small);color:var(--muted)}
.topbar{flex-wrap:wrap}
.top-actions{flex-wrap:wrap}
.chart svg text{font-family:inherit;fill:#64586d;font-size:var(--text-small)}
.dispatch-preview-brand,.dispatch-preview-note{display:none}
.dispatch-preview h2{font-size:var(--text-heading);letter-spacing:0}
.dispatch-preview p,.model-hero p{font-size:var(--text-body);color:#eee1f3}
.stats,.transport-metrics{gap:20px}
.transport-filter{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:0 0 20px;padding:0;border:0;min-width:0}
.transport-filter legend{margin-bottom:10px;color:var(--muted);font-size:var(--text-body)}
.transport-route-options{display:flex;gap:10px;flex-wrap:wrap}
.transport-route-choice{display:flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface,#fff);color:var(--ink);cursor:pointer}
.transport-route-choice:has(input:checked){border-color:var(--blue);background:var(--blue-soft)}
.transport-route-choice input{accent-color:var(--blue);width:17px;height:17px;margin:0}
#fleet-scene{min-height:0;height:auto}
.transport-filter select{font:inherit;color:var(--ink);background:var(--surface,#fff);border:1px solid var(--line);border-radius:9px;padding:10px 14px;min-width:220px;max-width:100%}
.burst-text{font-style:italic;font-weight:800;paint-order:stroke fill;stroke:#48205d;stroke-width:2px;stroke-linejoin:round}
.burst-outline{filter:drop-shadow(2px 3px 0 #48205d)}
:root{--ink:#302637;--muted:#64586d}
body{font-weight:400}
h1,h2,h3,strong,b{font-weight:600}
.sidebar-bottom p{color:#e2d7e8}
.model-hero p,.model-hero .hero-kicker,.model-hero .hero-tag,.dispatch-preview p{color:#eee1f3}
.network-stats .stat-value,.stat-value,.transport-metrics strong,.timing strong,.shift-numbers strong{color:var(--ink)}
.shift-numbers .has-shortage{color:#d45373}
.network-stats .stat{padding:20px;display:flex;flex-direction:column;gap:12px}
.network-stats .stat-top{font-size:var(--text-body);font-weight:400;line-height:1.4;color:var(--muted)}
.network-stats .stat-value{font-size:var(--text-heading);font-weight:600;line-height:1.3;margin:auto 0 0;letter-spacing:0;font-variant-numeric:tabular-nums}
@media(max-width:1250px){.stats,.transport-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.shift-body{grid-template-columns:1fr}.shift-detail{border-left:0;border-top:1px solid var(--line)}}
@media(max-width:760px){.app{display:block}.nav button{font-size:var(--text-body)}.content{padding:24px 16px}.topbar{padding:16px}.top-actions .button{font-size:var(--text-small)}.filter-main .filter-route-ids{min-width:0}.filter-time{flex-wrap:wrap}.panel-head{flex-wrap:wrap}.chart-options{gap:14px}.settings-grid{grid-template-columns:1fr}.stat-top{font-size:var(--text-body)}}
@media(max-width:480px){.stats,.transport-metrics{grid-template-columns:1fr}.range-filter-grid,.derived-filter-grid{grid-template-columns:1fr}.dashboard-context{flex-wrap:wrap}.observation-panel #route-observations{grid-template-columns:repeat(2,minmax(0,1fr))}}
