:root{--paper:#f6f4ee;--ink:#2b4035;--muted:#889084;--line:#e5e7dc;--orange:#d86f4c;--green:#6c8466;--white:#fdfcf8;--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:14px}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer;color:inherit}button:disabled{cursor:not-allowed;opacity:.48}button:focus-visible,a:focus-visible,[role=button]:focus-visible{outline:3px solid #db875c;outline-offset:4px}button{transition:background .16s,transform .16s}button:not(:disabled):active{transform:translateY(1px)}.topbar{height:87px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 5.1%;max-width:1800px;margin:auto}.brand{display:flex;gap:12px;align-items:center;text-decoration:none;color:var(--ink);font-size:16px;font-weight:800;letter-spacing:2px}.brand-icon{display:grid;place-items:center;border:2px solid var(--ink);border-radius:8px;width:34px;height:36px;font-size:23px;letter-spacing:0;transform:rotate(-7deg)}.brand-sub{display:block;font-size:10px;font-weight:400;letter-spacing:2px;margin-top:5px}.top-right{display:flex;align-items:center;gap:30px}.prototype{font-size:11px;color:#77806f;letter-spacing:1px}.prototype i{display:inline-block;background:#8da37c;width:6px;height:6px;border-radius:50%;margin-right:8px}.quiet{border:0;background:none;padding:9px 0;font-size:12px}.quiet:hover{color:var(--orange)}.quiet span{margin-left:10px}main{max-width:1440px;margin:0 auto;padding:38px 46px 0}.intro{display:flex;justify-content:space-between;align-items:center;margin-bottom:29px}.eyebrow{font-size:10px;letter-spacing:2px;color:#8f9989;font-weight:600}h1{font-size:40px;margin:11px 0 10px;letter-spacing:1px;font-weight:700}h1 span{font-family:Georgia,"Songti SC",serif;font-size:23px;font-weight:400;color:#9a9f8d;margin-left:20px}.intro p{color:#87907f;font-size:12px;letter-spacing:.3px;margin:0}.shift-label{text-align:right}.shift-label>span{font-size:11px;letter-spacing:1px;color:#899282}.shift-label strong{display:block;font-size:31px;margin-top:9px;letter-spacing:2px;font-variant-numeric:tabular-nums;font-weight:500}.weather{font-size:27px;color:#d5a26a;margin-left:12px}.stats{display:grid;grid-template-columns:repeat(4,1fr);background:var(--white);border:1px solid var(--line);border-radius:14px;margin-bottom:25px;padding:22px 0}.stat{display:flex;align-items:center;position:relative;padding:0 24px;gap:14px;border-right:1px solid var(--line)}.stat:last-child{border:0}.stat-icon{font-size:24px;display:grid;place-items:center;border-radius:12px;width:43px;height:46px;flex-shrink:0}.orange{background:#f7eae0;color:#bf7957}.green{background:#edf1e4;color:#799172}.blue{background:#e9f0ec;color:#70918b}.gray{background:#efeee7;color:#919381}.stat-label{font-size:11px;color:#929989;display:block;margin-bottom:7px}.stat strong{font-size:23px;font-weight:650;white-space:nowrap;font-variant-numeric:tabular-nums}.stat small{font-size:11px;font-weight:400;color:#969b8c;margin-left:3px}.stat-note{margin-left:auto;text-align:right;font-size:10px;line-height:1.8;color:#929988}.mini-meter{height:3px;background:#edf0e6;width:45px;margin-left:auto;align-self:flex-end;margin-bottom:6px;border-radius:3px;overflow:hidden}.mini-meter i{display:block;height:100%;background:#7d9370;transition:width .4s}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:23px;align-items:start}.journey-column{min-width:0}.panel{background:var(--white);border:1px solid var(--line);border-radius:14px;overflow:hidden}.panel-heading{display:flex;align-items:center;justify-content:space-between;min-height:62px;padding:0 22px;gap:8px}.panel-heading>div{display:flex;align-items:center;gap:10px}.section-index{font-size:10px;color:#a6ad9c;letter-spacing:1px}h2{font-size:14px;font-weight:600;margin:0;letter-spacing:.4px}.map-legend{font-size:10px;color:#99a18f;display:flex;align-items:center;gap:6px}.map-legend i,.map-legend b{width:6px;height:6px;border-radius:50%;background:#d17b55;display:inline-block}.map-legend b{background:#394d3c;margin-left:10px}.map-wrap{position:relative;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#f0f1e9}#city-map{display:block;width:100%;height:auto;min-height:280px}#bus{transition:transform .65s cubic-bezier(.4,0,.2,1);pointer-events:none}.map-toast{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);background:#fffdf6ee;padding:10px 17px;border-radius:30px;border:1px solid #e3e7d9;font-size:10px;letter-spacing:.5px;white-space:nowrap;box-shadow:0 3px 12px #34412b06}.map-toast span{color:#d17b55;font-size:9px;margin-right:6px}.road{fill:none;stroke-linecap:round}.map-station{cursor:default}.map-station.reachable{cursor:pointer}.map-station.reachable:hover .node-ring{stroke-width:5;fill:#fff3db}.map-station text{user-select:none}.route-area{padding:15px 21px 19px}.route-caption{display:flex;justify-content:space-between;font-size:10px;margin-bottom:11px;color:#999f91}.route-caption span:first-child{color:#63745c;font-weight:500}.route-options{display:flex;gap:8px;flex-wrap:wrap}.route-button{flex:1;min-width:115px;background:#f6f6ef;border:1px solid #e3e7d8;border-radius:9px;text-align:left;padding:11px 12px}.route-button:not(:disabled):hover{background:#f8ebdf;border-color:#dcb296}.route-button strong{font-size:12px;font-weight:600;display:flex;justify-content:space-between}.route-button strong span{color:#bc7753}.route-button small{display:block;font-size:10px;color:#92998a;margin-top:6px}.station-panel{margin-top:18px}.subtle{color:#929c88;font-size:10px}.waiting-list{padding:0 20px 16px;display:flex;gap:10px;flex-wrap:wrap}.waiting-card{background:#f5f5ed;border:1px solid #e7e8dc;border-radius:9px;padding:12px;flex:1;min-width:210px}.waiting-top{display:flex;align-items:center;gap:9px}.waiting-info{flex:1}.waiting-info strong{font-size:12px}.waiting-info small{display:block;font-size:10px;color:#87917d;margin-top:5px}.waiting-card .ability-text{font-size:10px;margin:10px 0 0}.waiting-card button{padding:7px 10px;border-radius:6px;border:1px solid #cfd8c4;background:#fdfdf7;color:#5e7652;font-size:11px}.empty-station{display:flex;align-items:center;justify-content:center;gap:15px;padding:7px 20px 25px;color:#a1aa96}.empty-station>span{font-size:25px;color:#bdc8ae}.empty-station p{font-size:11px;line-height:1.8;margin:0}.empty-station strong{font-weight:500;color:#7e8d75}.occupancy{font-size:11px;background:#f0f2e8;border-radius:5px;padding:6px 8px;color:#798771}.abilities{margin:0 18px 15px;display:flex;gap:6px;flex-wrap:wrap}.ability-pill{display:flex;gap:7px;font-size:10px;background:#edf2e5;border:1px solid #e1e8d4;color:#728660;border-radius:6px;padding:8px 9px}.ability-pill.no-ability{background:#f2f1eb;color:#999c90;border-color:#e9e9df}.passengers{padding:0 17px;display:flex;flex-direction:column;gap:11px}.passenger{border:1px solid #e5e7dd;border-radius:10px;padding:14px;background:#fffefa}.passenger.arrived{border-color:#dca37b;background:#fff9ed}.passenger-top{display:flex;align-items:center;gap:10px}.avatar{width:38px;height:42px;border-radius:10px;display:grid;place-items:center;font-size:20px;flex-shrink:0;background:#eee6db;color:#a38167}.avatar.musician{background:#eee6d7;color:#a2814c}.avatar.worker{background:#e5e9e1;color:#748470}.avatar.tourist{background:#f3e5dc;color:#bb8f75}.avatar.guide{background:#e5ecdd;color:#81956d}.avatar.chef{background:#eee9d7;color:#ac9457}.avatar.photographer{background:#e0e8ec;color:#76919b}.passenger-title{flex:1}.passenger-title strong{font-size:12px}.role-label{font-size:9px;color:#929888;margin-left:7px;font-weight:400}.passenger-title small{font-size:10px;color:#8d9584;display:block;margin-top:6px}.fare{font-size:14px;font-weight:600;color:#899478}.fare small{font-size:9px;font-weight:400;color:#ac9c88;display:block;text-align:right;margin-top:3px}.ability-text{font-size:10px;line-height:1.8;color:#939c87;margin:10px 0;border-top:1px dashed #e6e8dc;padding-top:9px}.patience-row{display:flex;justify-content:space-between;font-size:9px;color:#9aA18f;margin-top:9px}.patience-row strong{font-size:10px;color:#859774;font-weight:500}.patience-track{height:4px;border-radius:5px;background:#eeefe6;margin-top:6px;overflow:hidden}.patience-track i{display:block;height:100%;background:#a3b890;border-radius:5px;transition:width .3s}.passenger.low .patience-track i{background:#d29070}.passenger.low .patience-row strong{color:#c17d5e}.arrival-note{font-size:10px;color:#bb7d54;margin:12px 0 9px}.decision-actions{display:flex;gap:6px}.decision-actions button{flex:1;font-size:10px;border-radius:6px;padding:9px 5px}.deliver{background:#344c3b;color:#fffaf0;border:1px solid #344c3b}.deliver:hover{background:#4c6550}.hold{background:#fffaf0;border:1px solid #e0cfb5;color:#a98762}.hold:hover{background:#f4e9d5}.hold-cost{font-size:9px;color:#b1a08a;margin:7px 0 0;line-height:1.6}.late-tag{color:#c08261!important}.bus-footer{border-top:1px dashed var(--line);margin:19px 18px 0;padding:19px 0;text-align:center}.bus-footer>span{font-size:10px;color:#a3ad96}.bus-footer>div{display:flex;justify-content:center;gap:9px;margin-top:13px}.seat-dot{width:14px;height:16px;border:1px solid #b7c2a8;border-radius:4px;display:inline-block}.seat-dot.filled{background:#c8d4bb;border-color:#b4c4a5}.bottom-row{display:grid;grid-template-columns:1fr 340px;gap:24px;margin:25px 0 20px}.log-panel{padding:2px 4px}.log-title{font-size:11px;font-weight:600;margin-bottom:11px}.log-title span{font-size:8px;color:#a6ae9a;font-weight:400;letter-spacing:1px;margin-left:10px}#log{height:109px;overflow:auto;scrollbar-width:thin;scrollbar-color:#d5ddcc transparent}.log-entry{display:flex;gap:12px;font-size:10px;line-height:1.8;margin:5px 0;color:#89977d}.log-entry time{font-size:9px;color:#adb4a2;font-variant-numeric:tabular-nums}.log-entry.good{color:#6c8660}.log-entry.bad{color:#bc8c68}.experiment-panel{border-left:1px solid var(--line);padding-left:24px}.experiment-panel .eyebrow{font-size:9px;letter-spacing:1px}.experiment-panel p{font-size:11px;color:#8e9a81;line-height:1.8;margin:9px 0}.experiment-panel>div{display:flex;justify-content:space-between;align-items:center;gap:14px}.outline{border:1px solid #cfd7c3;background:transparent;border-radius:7px;padding:9px 13px;font-size:11px}.outline:hover{background:#eaf0e1}#previous-best{font-size:9px;display:block;margin-top:9px;color:#a0ab94}footer{border-top:1px solid var(--line);padding:20px 0;display:flex;justify-content:space-between;font-size:8px;letter-spacing:1.5px;color:#a7ae9f}.toast{position:fixed;left:50%;bottom:30px;transform:translate(-50%,20px);background:#324839;color:#fffaf0;border-radius:10px;padding:13px 21px;font-size:12px;opacity:0;transition:all .2s;pointer-events:none;z-index:8;max-width:90vw}.toast.show{opacity:1;transform:translate(-50%,0)}dialog{color:var(--ink);border:1px solid #e4e7d9;border-radius:19px;background:var(--white);width:min(540px,calc(100% - 32px));padding:36px;box-shadow:0 30px 100px #24352226}dialog::backdrop{background:#26362966;backdrop-filter:blur(5px)}dialog h2{font-size:25px;margin:12px 0 18px;line-height:1.4}dialog p{font-size:13px;color:#839078;line-height:1.9}dialog ol{padding-left:18px;font-size:12px;color:#89947d;line-height:1.9}dialog li{padding-left:3px;margin:10px 0}dialog b{color:#53664a;font-weight:600}.dialog-close{position:absolute;right:18px;top:14px;background:none;border:0;color:#98a18d;font-size:25px}.help-tip{padding:13px;background:#f1f3e8;border-radius:9px;font-size:11px;line-height:1.8;color:#82916f;margin:19px 0}.primary{border:1px solid #354c3c;background:#354c3c;color:#fffaf0;border-radius:8px;padding:12px 19px;font-size:12px}.primary:hover{background:#4c6551}.result-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:24px 0}.result-grid>div{background:#f1f3e9;border-radius:10px;padding:15px 10px;text-align:center}.result-grid strong{font-size:25px;display:block;margin-bottom:6px}.result-grid span{font-size:10px;color:#8b967d}.result-detail{padding:14px 0;border-top:1px solid var(--line);font-size:12px;line-height:2;color:#839376}.result-detail strong{color:#4f6547}.result-route{font-size:11px;line-height:1.9;background:#f6f4ec;padding:12px;border-radius:8px;color:#9a9d89}.result-actions{display:flex;justify-content:space-between;gap:10px;margin-top:22px}.feedback-note{font-size:11px!important;color:#a38f76!important}.passengers-empty{padding:35px 15px;text-align:center;font-size:12px;line-height:2;color:#a1ac94}
@media(min-width:1500px){main{padding-top:44px}.topbar{padding-left:calc((100vw - 1348px)/2);padding-right:calc((100vw - 1348px)/2)}}
@media(max-width:1150px){main{padding:28px 25px 0}.game-layout,.bottom-row{grid-template-columns:minmax(0,1fr) 305px;gap:17px}.stat{padding:0 15px;gap:10px}.stat-note{display:none}.mini-meter{width:25px}.panel-heading{padding:0 17px}.map-legend{font-size:9px}.route-button{min-width:95px;padding:10px}.route-button small{font-size:9px}}
@media(max-width:850px){.topbar{padding:0 22px;height:73px}main{padding:25px 20px 0}.prototype{display:none}.game-layout,.bottom-row{grid-template-columns:1fr}.bus-panel{margin-top:2px}.passengers{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.bus-footer{display:flex;align-items:center;justify-content:space-between;margin-top:15px;padding:14px 0}.bus-footer>div{margin:0}.abilities{margin-bottom:12px}.stats{padding:17px 0;margin-bottom:18px}.stat{padding:0 12px;gap:8px}.stat-icon{width:31px;height:35px;font-size:19px;border-radius:8px}.stat strong{font-size:19px}.stat small{font-size:9px}.stat-label{font-size:9px}.mini-meter{display:none}.intro{margin-bottom:23px}h1{font-size:34px}h1 span{font-size:20px}.intro p{font-size:11px;max-width:380px;line-height:1.8}.shift-label>span{font-size:10px}.shift-label strong{font-size:25px}.experiment-panel{border-left:0;border-top:1px solid var(--line);padding:18px 0 0}.experiment-panel p{display:none}.experiment-panel>div{justify-content:flex-end;margin-top:10px}.experiment-panel .eyebrow{float:left;margin-top:17px}.bottom-row{margin-top:23px}}
@media(max-width:520px){main{padding:22px 13px 0}.topbar{padding:0 17px}.brand{font-size:14px}.brand-sub{font-size:9px}.top-right{gap:8px}h1{font-size:30px}h1 span{font-size:18px;margin-left:10px}.intro{align-items:flex-start}.intro p{max-width:250px;font-size:10px}.eyebrow{font-size:8px;letter-spacing:1.4px}.shift-label>span{display:none}.shift-label strong{font-size:18px;margin-top:28px}.weather{display:none}.stats{grid-template-columns:1fr 1fr;row-gap:20px;padding:17px 0}.stat:nth-child(2){border-right:0}.stat{padding:0 17px}.stat-icon{width:34px;height:37px}.stat-label{font-size:10px}.stat strong{font-size:21px}.stat small{font-size:10px}.stat-note{display:block;font-size:8px}.panel-heading{padding:0 14px;min-height:53px}h2{font-size:12px}.map-legend{font-size:8px}#city-map{min-height:0}.map-toast{bottom:8px;font-size:8px;padding:6px 11px}.route-area{padding:13px}.route-caption{font-size:9px}.route-options{gap:6px}.route-button{min-width:90px;padding:9px}.route-button strong{font-size:10px}.route-button small{font-size:8px}.passengers{grid-template-columns:1fr;padding:0 13px}.passenger{padding:12px}.waiting-list{padding:0 13px 13px}.waiting-card{min-width:100%}.map-wrap{overflow:hidden}.map-station text{font-size:17px}.bottom-row{gap:15px}.experiment-panel .eyebrow{float:none;margin:0}.experiment-panel>div{justify-content:space-between}footer{font-size:7px;letter-spacing:.6px;gap:10px}dialog{padding:25px}.result-actions button{font-size:10px;padding:11px}.result-grid{gap:6px}.result-grid strong{font-size:22px}}
@media(prefers-reduced-motion:reduce){*,#bus{transition:none!important}}
@media(max-width:850px){.journey-column{display:contents}.map-panel{order:1}.bus-panel{order:2}.station-panel{order:3;margin-top:0}}
/* Map-first boarding and original passenger portraits. */
.avatar{width:46px;height:46px;background:none!important;overflow:hidden;border-radius:14px}
.portrait{display:block;width:100%;height:100%}
.map-wrap{padding-bottom:35px;overflow:visible}
.map-people{position:absolute;inset:0 0 35px;pointer-events:none}
.map-person-group{position:absolute;display:flex;gap:7px;transform:translateX(-50%);pointer-events:auto}
.map-person{position:relative;border:0;background:transparent;padding:0;width:43px;display:flex;flex-direction:column;align-items:center;border-radius:15px}
.map-person .portrait{height:43px;border:2px solid #fffdf4;border-radius:15px;box-shadow:0 2px 6px #34432920;transition:transform .15s,box-shadow .15s}
.map-person:hover .portrait,.map-person.selected .portrait{transform:translateY(-3px);box-shadow:0 0 0 2px #c9875c,0 4px 10px #34432920}
.person-name{font-size:10px;line-height:17px;white-space:nowrap;background:#f5f5ebdd;border-radius:4px;padding:0 3px;color:#596d51;margin-top:2px}
.map-person.at-stop .portrait{border-color:#82986c}
.pickup-plus{position:absolute;right:-3px;top:-4px;border:2px solid #fff9ed;border-radius:50%;background:#67815c;color:#fff;width:17px;height:17px;font-size:11px;line-height:12px}
.map-toast{bottom:7px;padding:7px 13px;pointer-events:none}
.map-preview{position:absolute;z-index:3;left:16px;top:16px;width:254px;border:1px solid #d6ddc9;border-radius:15px;padding:18px;background:#fffdf7;box-shadow:0 10px 35px #34482d22}
.map-preview[hidden]{display:none}
.preview-close{position:absolute;right:6px;top:4px;border:0;background:none;color:#8d987f;font-size:24px;width:32px;height:32px}
.preview-heading{display:flex;align-items:center;gap:11px}.preview-heading .avatar{width:54px;height:54px}.preview-heading strong{font-size:17px}.preview-heading strong span{display:inline-block;margin-left:8px;font-size:10px;font-weight:400;color:#8d967d}.preview-heading small{display:block;font-size:11px;color:#8c997c;margin-top:7px}
.preview-destination{font-size:12px;margin:15px 0 11px;color:#8c987e}.preview-destination span{margin:0 10px;color:#c08059}.preview-destination b{font-weight:600;color:#526b45}
.preview-facts{display:flex;justify-content:space-between;font-size:10px;background:#f1f3e9;padding:10px 9px;border-radius:7px;color:#90997f}.preview-facts b{font-weight:600;color:#687b56}
.map-preview p{font-size:11px;line-height:1.8;color:#7d8e6d;margin:12px 0}.pickup-action{width:100%;font-size:11px;padding:10px 5px}.pickup-action:disabled{opacity:.65;background:#e5e9dc;color:#7d8970;border-color:#e5e9dc}
.map-onboarding{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 21px;border-bottom:1px solid #e9ebdf;color:#7e8c6d;font-size:10px;background:#f9faf3}.map-onboarding b{display:inline-grid;place-items:center;background:#e9eedd;border-radius:50%;width:17px;height:17px;margin-right:5px;color:#7a8c65;font-size:9px;font-weight:500}
@media(max-width:650px){.map-person{width:34px}.map-person .portrait{height:34px;border-radius:12px}.map-person-group{gap:5px}.person-name{font-size:9px;line-height:15px}.map-preview{top:auto;bottom:12px;left:12px;width:250px;padding:15px}.map-onboarding{font-size:9px;padding:11px 13px;gap:6px}.map-onboarding b{display:none}.map-toast{font-size:9px}}
@media(max-width:420px){.map-person{width:32px}.map-person .portrait{height:32px}.map-preview{left:10px;width:245px}.intro p{max-width:235px}.map-wrap{overflow:visible}}
/* All travel, boarding, and current buffs live on the map. */
.map-wrap{padding-bottom:80px}
.map-people{bottom:80px}
.map-toast{left:auto;right:12px;bottom:15px;transform:none;padding:7px 10px}
.map-rider{position:relative}
button.pickup-plus{z-index:2;right:-7px;top:-8px;width:25px;height:25px;font-size:19px;line-height:18px;padding:0;display:grid;place-items:center;box-shadow:0 2px 5px #354a3422;cursor:pointer}
button.pickup-plus:not(:disabled):hover{background:#3f6541;box-shadow:0 0 0 3px #f8fbec}
button.pickup-plus:disabled{background:#a5ad9a;color:#e9eede;opacity:1;cursor:not-allowed}
.preview-hint{font-size:10px;color:#839272;border-top:1px dashed #dfe4d4;padding-top:12px;line-height:1.7}
.map-buffs{position:absolute;left:14px;bottom:10px;display:flex;gap:7px;align-items:center;z-index:4}
.buff-caption{font-size:10px;color:#8b987d;margin-right:1px}.buff-empty{font-size:10px;color:#a8af9d;border:1px dashed #d1d8c6;border-radius:8px;padding:9px 10px}
.buff-item{position:relative}
.buff-button{width:34px;height:34px;display:grid;place-items:center;border:1px solid #cdd9ba;border-radius:10px;background:#fbfcf3;color:#6c8558;font-size:20px;box-shadow:0 2px 5px #3443290a;padding:0}
.buff-button:hover,.buff-item.pinned .buff-button{border-color:#789167;background:#eaf0dc}
.buff-detail{display:none;position:absolute;bottom:100%;left:0;width:238px;padding:15px 16px;background:#fffdf5;border:1px solid #d6dec9;border-radius:12px;box-shadow:0 8px 25px #34452c25;color:#4a6240;text-align:left}
.buff-item:hover .buff-detail,.buff-item:focus-within .buff-detail,.buff-item.pinned .buff-detail{display:block}
.buff-detail strong{font-size:14px}.buff-detail p{font-size:11px;line-height:1.8;color:#7c8d6c;margin:9px 0}.buff-detail b{display:block;font-size:11px;font-weight:500;background:#eef2e3;border-radius:5px;padding:7px 8px}.buff-detail small{display:block;font-size:9px;color:#a0ab91;margin-top:10px}
.route-preview{position:absolute;z-index:5;width:216px;border:1px solid #dedbc6;border-radius:12px;background:#fffdf4;box-shadow:0 6px 20px #48583b20;padding:14px;pointer-events:none}
.route-preview[hidden]{display:none}.route-preview strong{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:#506444}.route-preview strong span{color:#b98155;font-size:11px;white-space:nowrap}.route-preview p{font-size:10px;line-height:1.7;color:#879674;margin:8px 0}.route-preview small{display:block;border-top:1px dashed #e5e5d7;padding-top:8px;color:#a8ad98;font-size:9px}.route-preview .route-warning{color:#bf7650}.route-preview .route-arrivals{color:#66815b}
.map-onboarding{border-bottom:0}.map-station:focus-visible .node-ring{stroke:#c37f57;stroke-width:4}
@media(max-width:650px){.map-preview{bottom:60px}.map-buffs{left:10px;gap:5px}.map-toast{right:8px;font-size:9px}.buff-button{width:30px;height:32px;font-size:18px}.buff-detail{width:220px;left:-25px}.buff-caption{font-size:9px}button.pickup-plus{width:24px;height:24px;right:-8px;top:-9px}.map-person-group{gap:12px}}
@media(max-width:420px){.buff-item:nth-last-child(1):nth-child(n+4) .buff-detail{left:-100px}.buff-caption{display:none}.map-toast{max-width:135px}.route-preview{width:200px}}

/* Expanded city and continuous journey feedback. */
main{max-width:1600px}.game-layout{grid-template-columns:minmax(0,1fr) 305px}.bus-panel{align-self:start}
#city-map{width:100%;height:auto;min-height:0}#bus{transition:none!important;will-change:transform}
.in-transit .patience-track i{transition:none}.in-transit .map-person{opacity:.65}.in-transit #bus{filter:drop-shadow(0 3px 5px #68472c55)}
.in-transit .map-toast{background:#38513f;color:#fff8df}.in-transit .map-legend{opacity:.4}
.income-pop{position:absolute;z-index:7;left:48%;top:38%;padding:12px 24px;color:#8c6022;background:#fff1b9;border:2px solid #e7c46c;border-radius:30px;font-size:30px;font-weight:700;pointer-events:none;box-shadow:0 8px 35px #b5954140;animation:cash-rise 2.5s ease-out forwards}
@keyframes cash-rise{0%{opacity:0;transform:translate(-50%,20px) scale(.6)}18%{opacity:1;transform:translate(-50%,0) scale(1.12)}35%{transform:translate(-50%,-10px) scale(1)}75%{opacity:1}100%{opacity:0;transform:translate(-50%,-80px) scale(.9)}}
#cash{display:inline-block;transform-origin:left center}button:disabled{cursor:not-allowed}.route-preview{width:240px}
@media(max-width:1100px){.game-layout{grid-template-columns:1fr}.passengers{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.journey-column{display:block}.bus-panel{margin-top:5px}}
@media(max-width:650px){.passengers{grid-template-columns:1fr 1fr}.map-person{width:29px}.map-person .portrait{height:29px}.map-person-group{gap:7px}.person-name{font-size:8px}.map-station text{font-size:13px}.map-preview{z-index:6}.route-preview{width:210px}}
@media(max-width:420px){.passengers{grid-template-columns:1fr}.map-person{width:25px}.map-person .portrait{height:25px}.map-person-group{gap:5px}.person-name{font-size:7px}.map-station text{font-size:14px}}
@media(prefers-reduced-motion:reduce){.income-pop{animation:cash-rise 2.5s linear forwards}#cash{transform:none!important}}

.map-station .station-name{font-size:17px;fill:#586b4f}.map-station .station-icon{font-size:25px}.map-station .station-meta{font-size:12px;fill:#88957d}
@media(max-width:650px){.map-station .station-name{font-size:20px}.map-station .station-icon{font-size:28px}.map-station .station-meta{font-size:14px}}

/* Passengers travel with the bus; details are shown on demand. */
.game-layout{grid-template-columns:minmax(0,1fr)}.map-panel .panel-heading{gap:12px}.map-panel .panel-heading .map-legend{margin-left:auto}.cabin-state{font-size:11px;white-space:nowrap;color:#849477}.cabin-state strong{font-weight:500;color:#506749;background:#edf1e5;padding:7px 9px;border-radius:7px}
#vehicle-layer,#arrival-effects{position:absolute;inset:0 0 80px;pointer-events:none}#vehicle-layer{z-index:2}#arrival-effects{z-index:7;overflow:visible}#bus-riders{position:absolute;display:flex;align-items:center;gap:3px;transform:translate(-50%,calc(-100% - 19px));pointer-events:none;white-space:nowrap}
.bus-rider{--ring:#739663;width:31px;height:31px;padding:3px;border:0;border-radius:50%;background:conic-gradient(var(--ring) var(--patience),#e0dfd2 0);box-shadow:0 2px 5px #30472735;pointer-events:auto;flex:none;position:relative}.bus-rider .portrait{border-radius:50%;overflow:hidden;pointer-events:none}.bus-rider.low{--ring:#d38960}.bus-rider:hover,.bus-rider:focus-visible{outline:2px solid #bc8656;outline-offset:2px;z-index:1}.passenger-tooltip{position:absolute;z-index:9;pointer-events:none;width:254px;bottom:auto}.passenger-tooltip .patience-track{margin-top:10px}.route-income{margin-top:10px;padding:10px;background:#eef2df;color:#657b4a;border-radius:7px;font-size:11px}.route-income b{font-size:20px;float:right;margin-top:-3px;color:#526f37}.route-preview .route-income small{clear:both;border:0;padding-top:8px;color:#8a9676;font-size:9px}
.departing-rider{position:absolute;width:31px;height:31px;pointer-events:none;z-index:2}.departing-rider .portrait{border-radius:50%;border:2px solid #fff9e8;box-shadow:0 2px 8px #3b513833}.departing-rider span{position:absolute;top:33px;left:50%;transform:translateX(-50%);font-size:10px;white-space:nowrap;color:#5a764a;background:#fffdf0e8;padding:2px 4px;border-radius:4px}.departing-rider.unhappy{filter:grayscale(.5)}
#arrival-effects .income-pop{position:absolute;font-size:21px;padding:7px 13px;white-space:nowrap;animation:local-cash-rise 1.65s ease-out both;box-shadow:0 3px 12px #b5954135;border-width:1px}.income-pop small{display:block;font-size:9px;font-weight:400;margin-bottom:2px;text-align:center;color:#a0824b}
@keyframes local-cash-rise{0%{opacity:0;transform:translate(-50%,-20%) scale(.7)}20%{opacity:1;transform:translate(-50%,-55%) scale(1.05)}70%{opacity:1}100%{opacity:0;transform:translate(-50%,-170%) scale(.95)}}
@media(max-width:650px){.bus-rider{width:27px;height:27px;padding:2px}#bus-riders{gap:2px;transform:translate(-50%,calc(-100% - 12px))}.map-panel .panel-heading{flex-wrap:wrap;gap:6px;padding-top:10px;padding-bottom:10px}.map-legend{display:none}.cabin-state{margin-left:auto;font-size:10px}.passenger-tooltip{width:236px;bottom:auto;max-width:calc(100% - 16px)}.departing-rider{width:27px;height:27px}#arrival-effects .income-pop{font-size:17px;padding:6px 9px}}
/* Window-sized map with a single floating HUD. */
html,body.map-only{width:100%;height:100%;margin:0;overflow:hidden;background:#f0f1e9}.map-only #map-wrap{position:fixed;inset:0;margin:0;padding:0;width:100vw;height:100dvh;max-width:none;overflow:hidden;border:0;border-radius:0;background-color:#f0f1e9;background-image:radial-gradient(#dcded3 .7px,transparent .7px);background-size:18px 18px}
#map-scene{position:absolute;isolation:isolate}#city-map{display:block;width:100%;height:100%;min-height:0}#map-scene .map-people,#map-scene #vehicle-layer,#map-scene #arrival-effects{inset:0}#map-scene .map-person-group{pointer-events:auto}
.game-hud{position:absolute;z-index:8;left:16px;top:16px;width:282px;padding:17px;background:#fffdf3ec;border:1px solid #dce3d0;border-radius:17px;box-shadow:0 5px 28px #4a5e3612;backdrop-filter:blur(12px)}.hud-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}.hud-brand{font-size:8px;letter-spacing:1.4px;color:#8b9879}.hud-heading h1{font-size:17px;margin:6px 0 0;letter-spacing:.4px;color:#405739}.hud-menu{position:relative}.hud-menu summary{list-style:none;cursor:pointer;color:#6d7e5e;background:#eef2e4;border:1px solid #dfe5d4;border-radius:8px;padding:6px 9px;font-size:17px}.hud-menu summary::-webkit-details-marker{display:none}.hud-menu>div{position:absolute;right:0;top:37px;padding:6px;width:155px;border:1px solid #d9e0cc;background:#fffdf3;border-radius:10px;box-shadow:0 8px 20px #33472924;z-index:4}.hud-menu button{display:block;border:0;background:none;text-align:left;width:100%;padding:10px;border-radius:6px;font-size:11px;color:#5d714e}.hud-menu button:hover{background:#eef2e4}
.hud-stats{display:grid;grid-template-columns:1fr 1fr;gap:14px 12px;margin-top:18px}.hud-stats>div>span{display:block;font-size:10px;color:#8d987e;margin-bottom:5px}.hud-stats strong{font-size:23px;color:#425c38;font-weight:600;white-space:nowrap}.hud-stats small{font-size:9px;color:#9ba58e;font-weight:400}.hud-foot{display:flex;justify-content:space-between;gap:8px;border-top:1px solid #e7ebdf;margin-top:13px;padding-top:11px;font-size:9px;color:#98a28a}.hud-foot b{font-weight:400}.hud-foot small{font-size:9px}
.tutorial-guide{margin-top:13px;padding:12px;border-radius:9px;background:#eef2df;color:#607849}.tutorial-guide[hidden]{display:none}.tutorial-guide>div{display:flex;align-items:center;gap:9px}.tutorial-guide strong{font-size:12px;color:#678447}.tutorial-guide span{font-size:9px}.tutorial-guide p{font-size:11px;line-height:1.8;margin:8px 0 0;color:#7c8b66}.tutorial-level #map-buffs{display:none}
.destination-ring{display:none;pointer-events:none}.destination-target .destination-ring{display:block;animation:destination-glow 1.6s ease-in-out infinite}.destination-target .node-ring{stroke:#cd8a41;stroke-width:4;fill:#fff1c8}.map-station.destination-target .station-name{fill:#9a622b;font-weight:700}@keyframes destination-glow{50%{stroke-opacity:.55;stroke-width:5}}
.map-only .map-buffs{left:18px;bottom:18px;z-index:8;background:#fffdf2d9;padding:7px 10px;border:1px solid #e0e5d5;border-radius:12px}.map-only .map-toast{bottom:22px;right:18px;z-index:6;background:#fffdf2e8;font-size:11px}.map-only .map-preview:not(.passenger-tooltip){left:auto;right:18px;top:18px;bottom:auto;z-index:10}.map-only .passenger-tooltip,.map-only .route-preview{z-index:11;max-height:calc(100dvh - 16px);overflow:hidden}#log-dialog #log{height:auto;max-height:55dvh;overflow:auto}
@media(max-width:759px){.game-hud{left:12px;top:12px;width:calc(100% - 24px);max-width:460px;padding:12px 14px;border-radius:13px}.hud-heading h1{font-size:15px}.hud-brand{font-size:7px}.hud-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:12px}.hud-stats strong{font-size:18px}.hud-stats small{display:block;font-size:8px;margin-top:2px}.hud-stats>div>span{font-size:9px}.hud-foot{padding-top:8px;margin-top:10px}.tutorial-guide{padding:8px 10px;margin-top:9px}.tutorial-guide>div{gap:8px}.tutorial-guide p{font-size:10px;line-height:1.6;margin:5px 0 0}.map-only .map-preview:not(.passenger-tooltip){top:auto;bottom:58px;right:12px}.map-only .map-toast{font-size:9px;max-width:none}.map-only .map-buffs{padding:5px 7px;left:12px;bottom:15px}}
@media(prefers-reduced-motion:reduce){.destination-target .destination-ring{animation:none}}

.tutorial-guide{min-height:86px}@media(max-width:759px){.tutorial-guide{min-height:66px}}

#map-scene{user-select:none;-webkit-user-select:none}.portrait-map #city-map>text,.portrait-map #city-map>g:not([id]){opacity:.35}.portrait-map .map-station .station-name{font-size:19px}

.portrait-map #roads text{font-size:15px}

.result-actions{flex-wrap:wrap}.result-actions [hidden]{display:none}

/* Progressive lessons and persistent route cues. */
.destination-label{display:block;white-space:nowrap;font-size:9px;font-weight:600;color:var(--destination-color);background:#fffdf3f2;border:1px solid currentColor;border-radius:5px;padding:3px 4px;margin-top:3px;position:relative;left:50%;width:max-content;transform:translateX(-50%)}
.map-person-group{gap:42px}.map-person{overflow:visible}.person-name{white-space:nowrap}.map-person:has(.destination-label){margin-bottom:23px}.rider-destination{position:absolute;top:100%;left:50%;transform:translateX(-50%);font-size:8px;line-height:12px;background:#fffdf5;border-radius:3px;padding:0 2px;white-space:nowrap}#bus-riders{gap:9px;transform:translate(-50%,calc(-100% - 29px))}
.opportunity-panel{border-top:1px solid #e0e5d4;margin-top:12px;padding-top:9px}.opportunity-panel h3{font-size:11px;margin:0 0 8px;color:#586f47}.opportunity-panel h3 small{font-weight:400;font-size:8px;color:#849575;margin-left:4px}.opportunity-panel #opportunities>div{margin-top:7px;padding-left:8px;border-left:2px solid #b4c29b}.opportunity-panel b{font-size:10px;color:#526c40;display:block}.opportunity-panel span,.opportunity-panel p{font-size:10px;line-height:1.6;color:#7a8969;margin:3px 0 0;display:block}.pickup-opportunity{background:#f0f3e4}
.decision-insights{display:grid;gap:9px;margin:16px 0}.decision-insights article{padding:12px;background:#eff3e7;border-radius:9px}.decision-insights strong{font-size:13px;color:#526c40}.decision-insights p{font-size:12px;line-height:1.8;margin:5px 0 0}.result-detail{line-height:1.8}#level-options{display:grid;gap:10px;margin:20px 0}#level-options button{text-align:left;background:#eff3e7;border:1px solid #dbe4ce;border-radius:10px;padding:13px;color:#536b42}#level-options button:disabled{opacity:.45}#level-options span{display:block;font-size:11px;margin-top:6px}dialog{max-height:90dvh;overflow:auto}
@media(max-width:759px){.opportunity-panel{margin-top:8px;padding-top:6px}.opportunity-panel h3{margin-bottom:3px}#opportunities{display:flex;gap:9px}.opportunity-panel #opportunities>div{flex:1;margin-top:2px}.opportunity-panel span{font-size:9px}.map-person-group{gap:36px}.destination-label{font-size:8px;padding:2px 3px}.opportunity-panel p{font-size:9px}.tutorial-guide{min-height:0}}
@media(max-width:420px){.map-person-group{gap:34px}.destination-label{font-size:7px}.opportunity-panel h3 small{font-size:7px}}

.tutorial-level .patience-track{display:none}.new-profession{outline:2px solid #c69a4c;outline-offset:3px}.new-profession .person-name{color:#9b7239;font-weight:700}

#opportunities{min-height:90px}@media(max-width:759px){#opportunities{min-height:48px}}

/* Shared station logos and destination-safe previews. */
.station-logo{width:24px;height:24px;display:inline-block;vertical-align:middle;flex:none}.station-emblem .station-logo{width:30px;height:30px}.destination-label{display:flex;align-items:center;justify-content:center;gap:4px;min-width:68px}.destination-label .station-logo{width:22px;height:22px}.preview-destination{display:flex;align-items:center;gap:6px}.preview-destination .station-logo{width:27px;height:27px;color:#557445}.rider-destination .station-logo{width:20px;height:20px}.rider-destination{padding:1px 3px}#bus-riders{transform:translate(-50%,calc(-100% - 38px))}#destination-link{pointer-events:none}.destination-target .destination-ring{stroke-width:5;stroke:#bb7b27;fill:#ffe7a755}.destination-target .station-name{font-size:20px!important;font-weight:800!important}.scenic-badge text{font-size:12px!important}.destination-target .scenic-badge{opacity:0}.map-only .passenger-tooltip,.map-only .map-preview,.map-only .route-preview{overflow:auto;overscroll-behavior:contain}.passenger-tooltip{pointer-events:auto}.patience-explainer{padding:7px;background:#f0f3e4;border-radius:6px;font-size:10px!important;line-height:1.6!important}
@media(max-width:650px){.destination-label{min-width:54px;gap:2px}.destination-label .station-logo{width:21px;height:21px}.rider-destination .station-logo{width:17px;height:17px}.destination-label{padding:1px 3px}}

.destination-target .scenic-badge{opacity:1}
