.cfi-viewer-host{overflow:hidden;min-height:460px!important;background:radial-gradient(ellipse at 50% 75%,#314c50 0,#17262f 45%,#0c141c 85%)!important}
.cfi-viewer-host>.viewer-corner{display:none}.cfi-asset-viewer{position:absolute;inset:0;isolation:isolate;color:#eef4ef}.cfi-asset-stage,.cfi-asset-canvas,.cfi-asset-fallback{position:absolute;inset:0}.cfi-asset-stage{bottom:70px;transition:opacity .45s,transform .75s}.cfi-asset-canvas canvas{width:100%;height:100%;touch-action:none}.cfi-asset-fallback{display:grid;place-items:center;padding:40px 10px;transition:opacity .4s}.cfi-asset-fallback img{width:100%;max-height:80%;object-fit:contain;filter:drop-shadow(0 30px 20px #0006)}.cfi-model-ready .cfi-asset-fallback{opacity:0;pointer-events:none}.cfi-asset-badge{position:absolute;top:20px;left:20px;font-size:9px;letter-spacing:1.6px;color:#b4c4bf;pointer-events:none}.cfi-asset-toolbar{position:absolute;bottom:0;left:0;right:0;min-height:70px;padding:13px 18px;display:flex;align-items:center;gap:15px;z-index:5;background:#101c25ee;border-top:1px solid #36504d;backdrop-filter:blur(12px)}.cfi-roof-toggle{background:#c5e8aa;border:1px solid #d5f1c1;color:#173325;border-radius:10px;padding:12px 15px;min-height:44px;font-size:12px;font-weight:800;white-space:nowrap;box-shadow:0 5px 20px #0003}.cfi-roof-toggle:hover{background:#e4f8d3}.cfi-roof-toggle:focus-visible,.cfi-roof-zoom button:focus-visible{outline:3px solid #e7d7a4;outline-offset:3px}.cfi-asset-help{font-size:10px;line-height:1.5;color:#a0b4ae}.cfi-asset-load{position:absolute;left:20px;right:20px;bottom:91px;z-index:4;display:flex;gap:12px;align-items:center;justify-content:center;font-size:11px;color:#b7cbc5;text-align:center;transition:opacity .25s}.cfi-asset-load.is-complete{opacity:0;pointer-events:none}.cfi-model-retry{border:1px solid #6b8a7a;background:#21392f;border-radius:7px;color:#dcebe3;padding:9px 12px;font-size:11px;min-height:40px}.cfi-roof-viewport{position:absolute;inset:0 0 70px;overflow:auto;overscroll-behavior:contain;opacity:0;pointer-events:none;background:radial-gradient(ellipse,#213b3f,#111e27 72%);transition:opacity .45s,transform .7s;transform:scale(.94);padding:26px 0 22px;scrollbar-width:thin;scrollbar-color:#567667 #11222a}.cfi-roof-content{position:relative;width:calc(100% * var(--cfi-roof-zoom,1));max-width:calc(365px * var(--cfi-roof-zoom,1));margin:0 auto;line-height:0;min-width:220px}.cfi-roof-image{width:100%;height:auto;display:block;user-select:none;filter:drop-shadow(0 15px 20px #0005)}.cfi-seat-overlay{position:absolute;inset:0;width:100%;height:100%;overflow:visible;touch-action:pan-y;pointer-events:none}.cfi-seat-overlay g{cursor:pointer;pointer-events:auto;outline:none}.cfi-seat-overlay polygon{stroke:#c3cbd2;fill:#aab5c6;fill-opacity:.12;stroke-width:3;stroke-linejoin:round;transition:fill-opacity .15s,stroke .15s}.cfi-seat-overlay text{fill:white;font-size:24px;font-weight:800;font-family:Inter,Arial,sans-serif;paint-order:stroke;stroke:#15232c;stroke-width:4;pointer-events:none}.cfi-seat-overlay [data-status=occupied] polygon{stroke:#6feb51;fill:#42f53c;fill-opacity:.20}.cfi-seat-overlay [data-status=boarding] polygon{stroke:#ffc34e;fill:#ffb829;fill-opacity:.23}.cfi-seat-overlay [data-status=no-show] polygon{stroke:#ff6973;fill:#ff4053;fill-opacity:.23}.cfi-seat-overlay [data-status=driver] polygon{stroke:#5ac5ff;fill:#18a8f4;fill-opacity:.22}.cfi-seat-overlay g:hover polygon,.cfi-seat-overlay g:focus-visible polygon{fill-opacity:.45;stroke-width:5}.cfi-seat-overlay .is-selected polygon{stroke:#fff1bc;stroke-width:5;fill-opacity:.40}.cfi-seat-overlay .is-unconfigured{opacity:.3;cursor:not-allowed}.is-roof-open .cfi-roof-viewport{opacity:1;transform:none;pointer-events:auto}.is-roof-open .cfi-asset-stage{opacity:0;pointer-events:none;transform:scale(.96)}.is-roof-open .cfi-asset-load{display:none}.cfi-roof-zoom{display:none;gap:8px;align-items:center;margin-left:auto;font-size:10px;color:#aec6b8}.is-roof-open .cfi-roof-zoom{display:flex}.is-roof-open .cfi-asset-help{display:none}.cfi-roof-zoom button{width:35px;height:38px;border-radius:8px;background:#243b38;color:white;border:1px solid #426257;font-size:19px}.cfi-roof-zoom button:disabled{opacity:.35;cursor:default}.cfi-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cfi-roof-error .cfi-seat-overlay{opacity:1}.cfi-roof-error .cfi-roof-image{min-height:650px}.cfi-seat-status-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;margin:0 0 16px}.cfi-seat-status-summary>div{padding:11px 7px;border:1px solid #314a49;background:#16292c;border-radius:10px;display:grid;grid-template-columns:10px 1fr;gap:5px;align-items:center}.cfi-seat-status-summary strong{font-size:19px;font-weight:750}.cfi-seat-status-summary small{grid-column:1/-1;font-size:9px;line-height:1.4;color:#a8bbb4}.cfi-status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#b9c0c9;flex-shrink:0}.cfi-status-dot[data-status=occupied]{background:#71e560}.cfi-status-dot[data-status=boarding]{background:#ffc452}.cfi-status-dot[data-status=no-show]{background:#ff6976}.cfi-status-dot[data-status=driver]{background:#4dbdff}.cfi-seat-detail{border:1px solid #557062;border-radius:14px;padding:16px;background:linear-gradient(140deg,#1d3632,#14262c);margin:0 0 22px}.cfi-seat-detail-heading{display:flex;align-items:center;gap:8px;font-size:11px;color:#d9e8db;margin-bottom:14px}.cfi-seat-detail h3{font-size:19px;letter-spacing:-.4px;margin:8px 0 10px}.cfi-seat-detail p{font-size:11px;line-height:1.7;color:#aebfb8;margin:8px 0}.cfi-seat-detail dl{margin:8px 0 0;display:grid;gap:0}.cfi-seat-detail dl>div{display:flex;gap:15px;justify-content:space-between;padding:9px 0;border-bottom:1px solid #2f4644;font-size:10px}.cfi-seat-detail dt{color:#8ea8a0}.cfi-seat-detail dd{margin:0;text-align:right;word-break:break-word;max-width:70%}.cfi-passenger-loyalty{display:flex;margin-top:14px;padding-top:3px;gap:30px}.cfi-passenger-loyalty>div{display:grid;gap:5px}.cfi-passenger-loyalty strong{font-size:23px;color:#cae7ae}.cfi-passenger-loyalty span{font-size:9px;color:#a2b9a9}.cfi-seat-list-heading{display:flex;align-items:baseline;gap:10px;justify-content:space-between}.cfi-seat-list-heading h3{font-size:12px}.cfi-seat-list-heading span{font-size:9px;color:#8da89d}.cfi-seat-help{font-size:10px;color:#91aaa0;line-height:1.7;margin:10px 0 14px}.cfi-accessible-seats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:7px}.cfi-accessible-seats button{min-width:36px;min-height:44px;border:1px solid #687782;border-radius:9px;color:#e0e6ea;background:#2d3944;font-size:12px;font-weight:750}.cfi-accessible-seats [data-status=occupied]{border-color:#56995a;color:#c8f6c7;background:#1f4434}.cfi-accessible-seats [data-status=boarding]{border-color:#967b39;color:#ffe9b7;background:#453b26}.cfi-accessible-seats [data-status=no-show]{border-color:#a0545e;color:#ffc3ca;background:#452b35}.cfi-accessible-seats [data-status=driver]{border-color:#3e8db9;color:#bfeaff;background:#213b53}.cfi-accessible-seats [aria-pressed=true]{outline:2px solid #f3e2a2;outline-offset:1px}.cfi-accessible-seats button:focus-visible{outline:3px solid #fff1bc;outline-offset:2px}.cfi-seat-intelligence>.fineprint{margin-top:16px;line-height:1.6}
@media(max-width:760px){.cfi-viewer-host{min-height:520px!important}.cfi-asset-toolbar{padding:11px 12px;gap:10px}.cfi-roof-toggle{padding:11px 12px;font-size:11px}.cfi-asset-badge{left:14px;top:15px;font-size:8px}.cfi-roof-content{max-width:calc(320px * var(--cfi-roof-zoom,1))}.cfi-roof-viewport{padding-top:16px}.cfi-seat-status-summary{gap:5px}.cfi-seat-status-summary>div{padding:10px 6px}.cfi-accessible-seats{grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}.cfi-seat-list-heading{align-items:flex-start;flex-direction:column;gap:5px}}
@media(prefers-reduced-motion:reduce){.cfi-asset-viewer *{transition:none!important;animation:none!important}}
/* Keep dark inspection surfaces legible inside the approved ivory application. */
.cfi-asset-viewer .cfi-asset-load{max-width:620px;margin:0 auto;padding:12px 14px;border:1px solid #617e71;border-radius:12px;background:#11262df2;color:#e5f1e9;box-shadow:0 6px 20px #0004;backdrop-filter:blur(8px);line-height:1.6}
.cfi-asset-viewer .cfi-asset-load>span{color:#e5f1e9}.cfi-asset-viewer .cfi-model-retry{color:#eff9e8;background:#294633;border-color:#90b578;flex-shrink:0}
.cfi-seat-intelligence .cfi-seat-status-summary strong,.cfi-seat-intelligence .cfi-seat-detail h3,.cfi-seat-intelligence .cfi-seat-detail dd{color:#eff6ef}
.cfi-seat-intelligence .cfi-seat-detail-heading strong{color:#d9e8db}.cfi-seat-intelligence .cfi-seat-detail dt{color:#a5bdb3}
.cfi-seat-intelligence .cfi-seat-status-summary small,.cfi-seat-intelligence .cfi-seat-detail p{color:#bdcfc4}
@media(max-width:480px){.cfi-asset-viewer .cfi-asset-load{left:12px;right:12px;font-size:10px;padding:10px;gap:9px}}
/* A failed image never leaves invisible, uncalibrated seat hit targets. */
.cfi-roof-image{aspect-ratio:682/2048;object-fit:contain}
.cfi-roof-error .cfi-seat-overlay{display:none}.cfi-roof-error .cfi-roof-image{visibility:hidden;min-height:0}
.cfi-roof-image-error{position:absolute;top:50%;left:24px;right:24px;transform:translateY(-50%);margin:0;padding:24px;border:1px solid #6a8b7c;border-radius:14px;background:#132b2d;color:#e5f1e9;font-size:13px;line-height:1.7;text-align:center}
.cfi-reduce-motion *{transition:none!important;animation:none!important}
.cfi-roof-zoom button{min-width:44px;min-height:44px}
.cfi-passenger-status{margin:14px 0 2px;min-height:44px;padding:10px 12px;color:#e7f3dc;background:#2c493b;border:1px solid #8bb07c;border-radius:9px;font-size:11px;font-weight:650;line-height:1.5;text-align:left;cursor:pointer}
.cfi-passenger-status:hover{background:#385b47}.cfi-passenger-status:focus-visible,.cfi-model-retry:focus-visible{outline:3px solid #f3e2a2;outline-offset:3px}
.cfi-seat-intelligence .cfi-passenger-status-note{padding:10px 12px;border-left:3px solid #ff6976;background:#4b2e36;color:#ffe0e3}

.cfi-seat-layout-note{font-size:11px;line-height:1.65;padding:11px 13px;border:1px solid #52675d;border-radius:9px;background:#1b302e;color:#d0ded5;margin:12px 0}

.cfi-asset-viewer:not(.cfi-roof-ready) .cfi-seat-overlay{visibility:hidden}

/* Keep the inspection controls and tab content reachable at every viewport size. */
.portal:has(.cfi-viewer-host){min-height:0;max-height:calc(100dvh - 24px)}
.portal:has(.cfi-viewer-host) .portal-header{flex-shrink:0}
.portal:has(.cfi-viewer-host) .portal-header>div:first-child{min-width:0}
.portal:has(.cfi-viewer-host) .portal-header h2{overflow-wrap:anywhere}
.portal:has(.cfi-viewer-host) .viewer-controls{flex-shrink:0}
.portal:has(.cfi-viewer-host) .cfi-viewer-host{min-height:0!important}
.portal:has(.cfi-viewer-host) .portal-tab{min-height:44px}
.portal:has(.cfi-viewer-host) .portal-tabs{flex-shrink:0}
.cfi-seat-intelligence .cfi-seat-help,.cfi-seat-intelligence .cfi-seat-list-heading span,.cfi-seat-intelligence>.fineprint{color:#5b7067}
@media(max-width:900px){
 .portal:has(.cfi-viewer-host){width:100%;height:calc(100dvh - 12px);max-height:calc(100dvh - 12px)}
 .portal:has(.cfi-viewer-host) .portal-header{padding:14px;gap:10px;align-items:flex-start}
 .portal:has(.cfi-viewer-host) .portal-header h2{font-size:18px;line-height:1.35}
 .portal:has(.cfi-viewer-host) .portal-main{display:flex;flex-direction:column;overflow:auto;overscroll-behavior:contain;min-height:0}
 .portal:has(.cfi-viewer-host) .viewer-column{flex:none;height:490px;min-height:0;border-right:0}
 .portal:has(.cfi-viewer-host) .cfi-viewer-host{height:auto;flex:1;min-height:0!important}
 .portal:has(.cfi-viewer-host) .viewer-controls{padding:10px;gap:7px}
 .portal:has(.cfi-viewer-host) .viewer-hint{flex-basis:100%;margin:0;line-height:1.5}
 .portal:has(.cfi-viewer-host) .portal-right{flex:none;min-height:420px;border-left:0}
 .portal:has(.cfi-viewer-host) .portal-tabs{position:sticky;top:0;z-index:6;flex-wrap:nowrap;overflow-x:auto;padding:0 8px}
 .portal:has(.cfi-viewer-host) .portal-tab{flex:none;white-space:nowrap}
 .portal:has(.cfi-viewer-host) .portal-body{overflow:visible;padding:16px}
}

/* InstantView: retain the approved coach preview during warmup, without a
 * download progress banner. Failure/retry feedback is still fully visible. */
.cfi-asset-viewer:not(.cfi-model-failed) .cfi-asset-load{opacity:0!important;visibility:hidden;pointer-events:none!important}
.cfi-asset-viewer.cfi-model-failed .cfi-asset-load{opacity:1!important;visibility:visible;pointer-events:auto!important}
.cfi-asset-viewer:not(.cfi-model-failed) .cfi-asset-fallback{opacity:1}
.cfi-asset-viewer.cfi-model-ready .cfi-asset-fallback{opacity:0}


/* Roof inspection: the seats remain clickable, while the zoomed image can be
 * hand-dragged on desktop and panned/pinched on touchscreens. Isolated to the
 * roof viewer; never changes the exterior OrbitControls or the bus artwork. */
.is-roof-open .cfi-roof-viewport,
.is-roof-open .cfi-roof-viewport .cfi-roof-content,
.is-roof-open .cfi-roof-viewport .cfi-seat-overlay,
.is-roof-open .cfi-roof-viewport .cfi-seat-overlay g{
  touch-action:none;
  -webkit-user-select:none;
  user-select:none;
}
.is-roof-open .cfi-roof-viewport{
  overscroll-behavior:contain;
  scroll-behavior:auto;
}
.is-roof-open .cfi-roof-viewport.is-zoomed,
.is-roof-open .cfi-roof-viewport.is-zoomed .cfi-roof-content,
.is-roof-open .cfi-roof-viewport.is-zoomed .cfi-seat-overlay g{
  cursor:grab;
}
.is-roof-open .cfi-roof-viewport.is-panning,
.is-roof-open .cfi-roof-viewport.is-panning *{
  cursor:grabbing!important;
}


/* Default roof view is relative to the available stage, including its controls. */
.cfi-asset-viewer .cfi-roof-content{width:calc(var(--cfi-roof-fit-width,120px) * var(--cfi-roof-zoom,1));min-width:0;max-width:none}
.cfi-asset-viewer .cfi-roof-viewport{padding:12px}
.cfi-asset-viewer .cfi-roof-zoom .cfi-roof-fit{width:auto;font-size:11px;padding:0 10px}
.cfi-asset-viewer .cfi-asset-toolbar{flex-wrap:wrap;gap:8px}
.cfi-asset-viewer .cfi-roof-zoom{gap:5px}
#portal-overlay .cfi-premium-inspection .cfi-roof-zoom button.cfi-roof-fit{order:4;width:auto;min-width:80px;height:36px;min-height:36px;font-size:11px;line-height:1.2;padding:0 9px;white-space:nowrap}
