/* Documented layout deviations from v21, kept separate from the verbatim source CSS. */
@media (max-width:860px){.feat-art img{object-position:left center}}
/* Deck covers retain the slide surface and fit inside the rounded card without crop or hover spill. */
.feat.deck-preview{align-items:center;overflow:hidden}
.feat.deck-preview .feat-art{width:100%;min-height:0;aspect-ratio:16/9;background:#0a0a0b;overflow:hidden}
.feat.deck-preview .feat-art img{object-fit:contain;object-position:center;transform:none}
.feat.deck-preview:hover .feat-art img{transform:none}
.request-access{margin:0 0 14px;justify-content:center}
.request-access[hidden]{display:none}

/* Oway glass status panel: top left, within mobile safe areas. */
.toast{left:max(16px,env(safe-area-inset-left));top:max(16px,env(safe-area-inset-top));bottom:auto;transform:none;max-width:calc(100vw - 32px);background:rgba(20,20,23,.82);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);overflow-wrap:anywhere}
.toast[data-status="processing"]::before{content:"";width:16px;height:16px;flex:0 0 16px;border:2px solid rgba(255,255,255,.25);border-top-color:var(--or-hi);border-radius:50%;animation:status-spin .8s linear infinite}
.toast[data-status="complete"]::before{content:"✓";color:#8de0ac;font-weight:700;animation:status-complete .25s ease-out}
.exit-actions{display:flex;justify-content:flex-end;gap:12px;padding-top:24px}
@keyframes status-spin{to{rotate:360deg}}
@keyframes status-complete{from{opacity:0;scale:.8}to{opacity:1;scale:1}}
@media(prefers-reduced-motion:reduce){.toast,.toast::before{animation:none!important}}

/* Let layout errors remain measurable; constrain the components that caused them instead. */
body{overflow-x:visible}
.dk{grid-template-columns:minmax(0,1fr)}
.dk-bar,.dk-sc{min-width:0}
.dk-n{white-space:nowrap;flex-shrink:0}
.sl-in>*{min-width:0}
/* The room's generic note rule follows the deck CSS; restore slide-relative type. */
.sl .note{font-size:1cqw;line-height:1.5;margin-top:1cqw!important}
#s-pool .sl-in{gap:1.6cqw;padding-block:3.1cqw}
.aw2:before{inset:-14% 0}
.sl-mark,.cv-foot,.jm-for,.fm-name,.ess-body{overflow-wrap:anywhere}
.jm-tbl{max-width:100%;min-width:0}
.jm-plan td{overflow-wrap:anywhere}
.logo-fallback{font-size:13px;line-height:1.3;overflow-wrap:anywhere;text-align:center;color:#fff}
.ent-logos .logo-fallback,.jm-logos .logo-fallback{color:#151518}
.sl-bg:not(.loaded){visibility:hidden}
#s-12 .sl-cover{background:radial-gradient(ellipse at 80% 18%,rgba(87,53,255,.55),transparent 62%),linear-gradient(140deg,#090911,#171038 58%,#0b0c1c)}
.ioi-live{position:relative}
.demo-open{position:absolute!important;inset:0;z-index:4!important;display:flex;align-items:flex-end;justify-content:center;padding:.8cqw;color:white;font:500 .85cqw var(--font);background:linear-gradient(transparent 80%,rgba(10,10,11,.8));border-radius:inherit}

/* v55 owns the desktop-scaled phone slides and the three-column memo plan. */
@media(max-width:760px){
 /* Keep focused mobile fields legible without a browser focus zoom. Pinch zoom stays available. */
 .fld input,.share-in input{font-size:16px}
 /* Keyboard navigation and the position counter use the card's top edge. */
 .sl{scroll-snap-align:start}
 .dk-bar{gap:8px;padding-inline:10px}
 .dk-bar .btn{padding-inline:10px;font-size:13px}
 .dk-bar .brand{gap:6px;font-size:14px}
 /* Every visible scaled card must reveal without waiting for its center-band animation. */
 .anim .sl .rise,.anim .sl .logo-grid span,.anim .sl .ent-logos span,.anim .sl .inv-grid span{opacity:1;transform:none;transition:none}
}

/* Show decoded preview pixels gently without delaying entry or changing card geometry. */
.deck-preview .feat-art{background:linear-gradient(135deg,rgba(82,54,255,.09),rgba(246,92,14,.06))}
.deck-preview .feat-art img{opacity:0;transition:opacity .25s ease,transform 1.2s var(--ease)}
.deck-preview .feat-art img.ready{opacity:1}
@media(prefers-reduced-motion:reduce){.deck-preview .feat-art img{transition:none}}

#room.initial-reveal [data-up].up{transition:none!important}
@media(prefers-reduced-motion:reduce){.view,.gate-card{animation:none!important}}

/* A height-capped desktop card needs its own spacing scale, not the viewport's cqw. */
@media(min-width:761px){
 .sl-in{--slide-width:min(calc(100vw - 48px),1240px,calc((100dvh - 112px)*16/9));width:min(100%,var(--slide-width));padding:calc(var(--slide-width)*.046) calc(var(--slide-width)*.054);gap:calc(var(--slide-width)*.02)}
 #s-pool .sl-in{padding-block:calc(var(--slide-width)*.031);gap:calc(var(--slide-width)*.016)}
}
/* Reserve the diagram's intrinsic height and keep footer headings on a common top edge. */
#s-ioi .hd,#s-ioi .ioi-foot{flex:none}
#s-ioi .ioi4{flex:1 0 auto;min-height:min-content}
#s-ioi .ioi-foot{grid-template-columns:1fr .75fr 1.2fr 1.8fr;align-items:start;gap:1.6cqw}
#s-ioi .ioi-foot p{display:flex;flex-direction:column;gap:.5cqw}
#s-ioi .ioi-foot b{font-size:2.15cqw;line-height:1.15}
#s-ioi .ioi-foot span{font-size:1.05cqw;line-height:1.4}
/* Traction's allocation summary starts at the top, with evidence distributed to the bottom. */
#s-3 .cap2{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:2.6cqw;align-items:stretch}
#s-3 .cap-c{align-content:start;grid-template-rows:auto minmax(0,1fr)}
#s-3 .cap-r{justify-content:space-between;gap:1.2cqw;min-height:0}
#s-3 .alloc2{margin-bottom:0}
#s-3 .alloc2-n{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1.6cqw}
/* Unequal copy lengths must not leave the use-of-funds cards with staggered bottoms. */
#s-raise .al-rows{align-items:stretch}
#s-raise .al-rows>div{grid-template-rows:auto auto 1fr auto;align-content:stretch}
@media(max-width:760px){#s-ioi .sl-in{padding-block:3.4cqw;gap:1cqw}}

/* Traction's right column starts beside the slide label, above the chart row. */
#s-3 .sl-in{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);column-gap:2.6cqw}
#s-3 .hd{grid-column:1;grid-row:1}
#s-3 .cap2{display:contents}
#s-3 .cap-c{grid-column:1;grid-row:2;min-height:0;align-self:start}
#s-3 .cap-r{grid-column:2;grid-row:1 / 3;align-self:start;justify-content:flex-start}
#s-3 .alloc2-k{font:600 1.15cqw var(--font);line-height:inherit;letter-spacing:0;text-transform:none}

/* Let the final scaled phone card reach the same top anchor as every other slide. */
@media(max-width:760px){.dk-sc{padding-bottom:max(0px,calc(100dvh - 64px - (100vw - 16px)*9/16 - 12px))}}
/* Reserve the new source's extra caption/logo rows inside the scaled phone cards. */
@media(max-width:760px){#s-pool .sl-in{padding-block:2.4cqw}#s-cust .sl-in{padding-block:3.2cqw}}
@media(min-width:761px) and (max-height:760px){#s-cust .sl-in{padding-block:calc(var(--slide-width)*.036)}}
