:root{--bg:#f6f7f9;--panel:#ffffff;--text:#1c2430;--muted:#6b7686;--line:#e2e6ec;--brand:#14325c;--accent:#2f6fd6;--ok:#1f8a4c;--warn:#b7791f;--bad:#c0392b;--quote:#8a94a6}*{box-sizing:border-box}body{margin:0;font:14px/1.45 system-ui,-apple-system,Segoe UI,sans-serif;background:var(--bg);color:var(--text)}a{color:var(--accent);text-decoration:none}h1{font-size:20px;margin:0 0 16px}h2{font-size:16px;margin:24px 0 8px}.shell{min-height:100vh}.nav,.shell{display:flex}.nav{width:200px;background:var(--brand);color:#fff;padding:16px 0;flex-shrink:0;flex-direction:column}.nav .brand{font-weight:700;padding:0 16px 16px}.nav a{display:block;color:#cfd9ea;padding:8px 16px}.nav a.active,.nav a:hover{background:rgba(255,255,255,.1);color:#fff}.nav .who{margin-top:auto;padding:16px;font-size:12px;color:#cfd9ea}.main{flex:1 1;padding:24px;min-width:0}.card{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px;margin-bottom:16px}.row{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));grid-gap:12px;gap:12px}label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}label.check{flex-direction:row;align-items:center;color:var(--text)}input,select,textarea{padding:6px 8px;border:1px solid var(--line);background:#fff;color:var(--text)}button,input,select,textarea{font:inherit;border-radius:6px}button{padding:6px 14px;border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer}button.secondary{background:#fff;color:var(--accent)}button.danger{background:#fff;border-color:var(--bad);color:var(--bad)}button:disabled{opacity:.5;cursor:default}table{width:100%;border-collapse:collapse}td,th{text-align:left;padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:12px;color:var(--muted);font-weight:600}td.num,th.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.error{background:#fdecea;color:var(--bad);border:1px solid #f5c6c0;padding:8px 12px;border-radius:6px;margin-bottom:12px}.error ul{margin:4px 0 0;padding-left:18px}.badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;background:#eef1f5;color:var(--muted)}.badge.PENDING,.badge.QUOTE{background:#eef1f5;color:var(--quote)}.badge.ASSIGNED,.badge.CONFIRMED{background:#e6effc;color:var(--accent)}.badge.EN_ROUTE,.badge.ON_BOARD,.badge.ON_SITE{background:#fdf3e1;color:var(--warn)}.badge.COMPLETED{background:#e4f4ea;color:var(--ok)}.badge.CANCELLED,.badge.NO_SHOW{background:#fdecea;color:var(--bad)}.stats{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px}.stat{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:12px 16px;min-width:160px}.stat b{display:block;font-size:20px}.tabs{display:flex;gap:4px;margin-bottom:16px}.tabs button{background:#fff;color:var(--text);border-color:var(--line)}.tabs button.on{background:var(--brand);border-color:var(--brand);color:#fff}.gantt{overflow-x:auto}.gantt-inner{min-width:960px}.gantt-row{display:grid;grid-template-columns:180px 1fr;border-bottom:1px solid var(--line);min-height:44px}.gantt-label{padding:8px;font-size:13px;border-right:1px solid var(--line)}.gantt-label small{display:block;color:var(--muted)}.gantt-track{position:relative;background-image:repeating-linear-gradient(90deg,transparent 0,transparent calc(100% / 24 - 1px),var(--line) calc(100% / 24 - 1px),var(--line) calc(100% / 24))}.gantt-hours{display:grid;grid-template-columns:repeat(24,1fr);font-size:11px;color:var(--muted)}.leg-block{position:absolute;top:6px;bottom:6px;border-radius:4px;padding:2px 6px;font-size:11px;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;border:0;text-align:left}.leg-block.CONFIRMED{background:var(--accent)}.leg-block.QUOTE{background:var(--quote);opacity:.8}.leg-block.COMPLETED{background:var(--ok)}.leg-block.selected{outline:3px solid #f2b705}.side{position:fixed;right:0;top:0;bottom:0;width:380px;background:#fff;border-left:1px solid var(--line);padding:20px;overflow-y:auto;box-shadow:-4px 0 16px rgba(0,0,0,.06)}.side .close{position:absolute;right:16px;top:16px}.issues{margin:2px 0 0;padding-left:16px;color:var(--bad);font-size:12px}.mobile{max-width:520px;margin:0 auto;padding:16px}.btn{display:inline-flex;align-items:center;justify-content:center;padding:6px 14px;border-radius:6px;border:1px solid var(--accent);background:var(--accent);color:#fff}.btn.secondary{background:#fff;color:var(--accent)}button.link{background:none;border:0;color:var(--accent);padding:8px 0 0}.driver{min-height:100vh;background:var(--bg)}.driver-bar{position:-webkit-sticky;position:sticky;top:0;z-index:10;display:flex;justify-content:space-between;align-items:center;gap:12px;background:var(--brand);color:#fff;padding:calc(12px + env(safe-area-inset-top)) 16px 12px}.driver-bar b{display:block;font-size:17px}.driver-bar small{color:#cfd9ea}.driver-bar-actions{display:flex;gap:16px}.driver-bar-actions a{color:#fff}.driver-body{max-width:560px;margin:0 auto;padding:8px 12px calc(24px + env(safe-area-inset-bottom))}.driver-day{font-size:13px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:16px 4px 8px}.driver-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px;margin-bottom:12px;font-size:15px;display:grid;grid-gap:10px;gap:10px}.driver-card.current{border:2px solid var(--warn);box-shadow:0 4px 14px rgba(183,121,31,.15)}.driver-card.done{opacity:.6}.driver-card-head{display:flex;justify-content:space-between;align-items:center}.driver-time{font-size:24px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.driver-route{list-style:none;margin:0;padding:0 0 0 16px;border-left:3px solid var(--line);display:grid;grid-gap:8px;gap:8px}.driver-route li{position:relative}.driver-route li:before{content:"";position:absolute;left:-23px;top:18px;width:11px;height:11px;border-radius:50%;background:var(--accent)}.driver-route li.stop:before{background:var(--quote)}.driver-route li:last-child:before{background:var(--ok)}.driver-route small{display:block;font-size:12px;color:var(--muted)}.driver-facts{display:flex;flex-wrap:wrap;gap:6px}.driver-facts span{background:var(--bg);border-radius:12px;padding:2px 10px;font-size:13px}.driver-notes{background:#fdf3e1;border-radius:8px;padding:8px 12px;font-size:14px;white-space:pre-line}.driver-passenger{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:10px}.driver-passenger small{display:block}.driver-contact,.driver-nav{display:flex;gap:8px;flex-wrap:wrap}.driver-nav>*{flex:1 1}.driver-card .btn,.driver-card button{min-height:44px;font-size:15px;border-radius:10px}.driver-step{display:grid;grid-gap:8px;gap:8px}.driver-expense input,.driver-expense select,.driver-step input{font-size:16px;padding:10px 12px;border-radius:10px}.driver-card button.big{min-height:54px;font-size:17px;font-weight:600;background:var(--ok);border-color:var(--ok)}.driver-confirm{background:#fdecea;border-radius:10px;padding:10px;font-size:14px}.driver-confirm,.driver-expense{display:grid;grid-gap:8px;gap:8px}.driver-empty{text-align:center;color:var(--muted);padding:48px 16px}.suggestions{position:absolute;top:100%;left:0;min-width:340px;max-width:90vw;z-index:20;margin:2px 0 0;padding:4px 0;list-style:none;background:#fff;border:1px solid var(--line);border-radius:6px;box-shadow:0 6px 16px rgba(0,0,0,.08);max-height:260px;overflow-y:auto}.suggestions li{padding:6px 10px;cursor:pointer;color:var(--text);font-size:13px}.suggestions li:hover{background:var(--bg)}.route-summary{background:#f2f6fd;border:1px solid #d6e2f7;border-radius:6px;padding:8px 12px;margin-top:12px;font-size:13px}.route-map{margin:12px 0 0;max-width:640px}.route-map img{width:100%;border-radius:6px;border:1px solid var(--line);display:block}.route-map-loading{aspect-ratio:640/300;background:var(--bg);border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--muted)}.route-maps{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));grid-gap:16px;gap:16px}.modal-backdrop{position:fixed;inset:0;background:rgba(20,30,45,.45);display:flex;align-items:flex-start;justify-content:center;padding:10vh 16px 16px;z-index:50}.modal{background:var(--panel);border-radius:10px;padding:20px;width:100%;max-width:560px;box-shadow:0 12px 40px rgba(0,0,0,.2);max-height:80vh;overflow-y:auto}.tabbar{display:none}@media (min-width:761px){.only-mobile{display:none!important}}.daynav{gap:8px}.daynav,.savebar{display:flex;align-items:center}.savebar{gap:12px;flex-wrap:wrap}.list-cards{display:grid;grid-gap:8px;gap:8px}.list-card{display:block;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;color:var(--text)}.list-card.warn{border-left:4px solid var(--warn)}.list-card-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.list-card-top b{font-size:15px}.list-card-sub{color:var(--muted);font-size:13px;margin-top:2px}.list-card-foot{display:flex;justify-content:space-between;gap:8px;margin-top:6px;font-size:13px}.list-card-foot>:last-child:not(:first-child),.list-card-top .badge{white-space:nowrap;flex-shrink:0}.sheet-backdrop{position:fixed;inset:0;z-index:60;background:rgba(20,30,45,.45);display:flex;align-items:flex-end}.sheet{width:100%;background:var(--panel);border-radius:16px 16px 0 0;padding:8px 0 calc(16px + env(safe-area-inset-bottom))}.sheet a{display:block;padding:14px 20px;font-size:16px;color:var(--text);border-top:1px solid var(--line)}.sheet a.on{color:var(--accent);font-weight:600}.sheet a.sheet-exit{color:var(--bad)}.sheet-who{display:flex;justify-content:space-between;padding:12px 20px}@media (max-width:760px){.only-desktop{display:none!important}.shell{display:block}.nav{display:none}.main{padding:calc(12px + env(safe-area-inset-top)) 12px calc(84px + env(safe-area-inset-bottom))}h1{font-size:22px;margin-bottom:12px}.card{padding:12px;overflow-x:auto}.grid{grid-template-columns:1fr}.row>input,.row>label,.row>select{flex:1 1 100%}.row>label select,.row>label:not(.check) input{width:100%}.btn,button{min-height:40px}input,select,textarea{font-size:16px;padding:9px 10px}.daynav{width:100%}.daynav input{flex:1 1;min-width:0}.stats .stat{flex-grow:1;flex-shrink:1;flex-basis:calc(50% - 12px);min-width:0}.tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;background:var(--panel);border-top:1px solid var(--line);padding:6px 4px calc(6px + env(safe-area-inset-bottom))}.tabbar a,.tabbar button{flex:1 1;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--muted);background:none;border:0;padding:4px 0;min-height:0;border-radius:0}.tabbar .on{color:var(--accent)}.tabbar .tab-new span{width:44px;height:22px;border-radius:11px;background:var(--accent);color:#fff;font-size:20px;line-height:22px;text-align:center}table.stack,table.stack tbody,table.stack td,table.stack tr{display:block;width:100%}table.stack thead{display:none}table.stack tr{border-bottom:1px solid var(--line);padding:10px 0}table.stack tr:last-child{border-bottom:0}table.stack td{border:0;padding:3px 0;text-align:left!important;white-space:normal!important}table.stack td[data-label]:before{content:attr(data-label);display:block;font-size:11px;color:var(--muted)}table.stack td:empty{display:none}table.stack td.num{display:inline-block;width:33%;vertical-align:top}.side{width:100%;z-index:55;padding-top:calc(20px + env(safe-area-inset-top));padding-bottom:calc(20px + env(safe-area-inset-bottom))}.gantt-row{grid-template-columns:120px 1fr}.modal-backdrop{padding:16px 8px;align-items:flex-end}.modal{max-height:88vh;border-radius:16px}.suggestions{min-width:0;width:100%}.savebar{position:fixed;left:0;right:0;bottom:calc(62px + env(safe-area-inset-bottom));z-index:35;background:var(--panel);border-top:1px solid var(--line);padding:10px 12px;display:flex;gap:8px;align-items:center}.savebar button{flex:1 1;min-height:46px;font-size:16px}}.push-banner{display:grid;grid-gap:8px;gap:8px;background:#e6effc;border:1px solid #c9dbf6;border-radius:12px;padding:12px 14px;margin:12px 0;font-size:14px}.push-banner.ok{background:#e4f4ea;border-color:#bfe3cc}.push-banner button{min-height:44px;border-radius:10px;font-size:15px}.push-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 20px;border-top:1px solid var(--line)}.push-row small{display:block;color:var(--muted);font-size:12px}.nav .push-row{padding:12px 16px 0;border:0;color:#cfd9ea;font-size:12px;flex-wrap:wrap}.nav .push-row button{padding:4px 10px;font-size:12px}.nav .push-slot{margin-top:auto}.nav .push-slot+.who{margin-top:0}.timeline{padding:12px 16px 14px}.tl-head{font-size:13px;margin-bottom:10px}.tl-cancelled{color:var(--bad);font-weight:600}.tl-closed{color:var(--ok);font-weight:600}.tl{display:flex;overflow-x:auto;scrollbar-width:thin;padding-bottom:2px}.tl-phase{flex:1 1;display:flex;flex-direction:column;min-width:min-content}.tl-phase+.tl-phase{border-left:1px dashed var(--line)}.tl-phase-name{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:0 8px 8px;position:-webkit-sticky;position:sticky;left:0;align-self:flex-start;white-space:nowrap}.tl-phase-name span{text-transform:none;letter-spacing:0;font-weight:400}.tl-steps{list-style:none;margin:0;padding:0}.tl-step,.tl-steps{display:flex;flex:1 1}.tl-step{min-width:104px;position:relative;flex-direction:column;align-items:center;text-align:center;padding:0 4px}.tl-step:after,.tl-step:before{content:"";position:absolute;top:11px;height:2px;background:var(--line)}.tl-step:before{left:0;right:50%}.tl-step:after{left:50%;right:0}.tl-phase:first-child .tl-step:first-child:before,.tl-phase:last-child .tl-step:last-child:after{display:none}.tl-step:is(.done,.skipped):after,.tl-step:is(.done,.skipped,.problem,.current):before{background:var(--ok)}.tl-step.current~.tl-step:after,.tl-step.current~.tl-step:before{background:var(--line)}.tl-dot{position:relative;z-index:1;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;margin-bottom:6px;font-size:12px;font-weight:700;background:var(--panel);border:2px solid var(--line);color:var(--muted)}.tl-step.done .tl-dot{background:var(--ok);border-color:var(--ok);color:#fff}.tl-step.skipped .tl-dot{border-color:var(--ok);color:var(--ok);border-style:dashed}.tl-step.problem .tl-dot{background:var(--bad);border-color:var(--bad);color:#fff}.tl-step.current .tl-dot{border-color:var(--accent);box-shadow:0 0 0 4px rgba(47,111,214,.18)}.tl-step.current .tl-dot:after{content:"";width:10px;height:10px;border-radius:50%;background:var(--accent)}.tl-label{font-size:12px;font-weight:600;line-height:1.25}.tl-step.pending .tl-label,.tl-step.skipped .tl-label{color:var(--muted);font-weight:500}.tl-step.current .tl-label{color:var(--accent)}.tl-step.problem .tl-label{color:var(--bad)}.tl-meta{font-size:11px;color:var(--muted);line-height:1.3;margin-top:2px}.timeline.cancelled .tl-step.pending{opacity:.45}@media (max-width:760px){.timeline{margin-left:-4px;margin-right:-4px}.tl-step{min-width:92px}}.back-link{display:inline-flex;align-items:center;gap:6px;background:none;border:none;color:var(--accent);padding:4px 0;margin:-4px 0 8px;font-size:13px;font-weight:600}.back-link span{font-size:16px;line-height:1}.back-link:hover{text-decoration:underline}@media (max-width:760px){.back-link{padding:8px 0;margin-top:-8px;font-size:15px}}.dup-legs{display:grid;grid-gap:10px;gap:10px;margin-top:12px}.dup-legs label>span:first-child{color:var(--text);font-size:13px}.dup-problem{color:var(--bad);font-size:12px}