@@ -128,20 +128,18 @@ body::after{content:'';position:fixed;inset:0;pointer-events:none;z-index:9999;o
128128@media ( max-width : 719px ) { . wh-card { gap : 12px !important ; padding : 10px 12px 10px 14px !important } . wh-glyph { display : none !important } . wh-main { font-size : 14px !important } . wh-sub { font-size : 12px !important } }
129129
130130/* ---------- sponsors ---------- */
131- /* Tickers: each strip holds its logos twice and slides by one copy, forever; it pauses while hovered, pressed
132- or holding keyboard focus, and the edges fade so logos drift in and out of view. */
133- @keyframes iv-sp{ to { transform : translateX ( -50% ) } }
134- . sp-row { overflow : hidden; -webkit-mask-image : linear-gradient ( 90deg , transparent, # 000 7% , # 000 93% , transparent) ; mask-image : linear-gradient ( 90deg , transparent, # 000 7% , # 000 93% , transparent) ; padding : 4px 0 }
135- . sp-strip { display : flex; width : max-content; animation : iv-sp var ( --sp-dur , 30s ) linear infinite}
136- . sp-strip-rev { animation-direction : reverse}
137- . sp-row : hover . sp-strip , . sp-row : active . sp-strip , . sp-row : focus-within . sp-strip { animation-play-state : paused}
138- . sp-card { transition : border-color .3s , background-color .3s }
139- . sp-card : hover { border-color : rgba ( 20 , 19 , 18 , .5 ) !important ; background : rgba ( 20 , 19 , 18 , .06 ) !important }
140- . sp-logo { width : 100% ; height : 100% ; object-fit : contain; filter : grayscale ( 1 ) ; opacity : .78 ; transition : filter .4s , opacity .4s }
141- . sp-card : hover . sp-logo , . sp-card : focus-visible . sp-logo { filter : none; opacity : 1 }
142- /* Without motion the rows stand still and scroll by hand instead, so every logo stays reachable. */
143- @media ( prefers-reduced-motion : reduce) { . sp-row { overflow-x : auto; scrollbar-width : none; -webkit-mask-image : none; mask-image : none} . sp-row :: -webkit-scrollbar { display : none} . sp-strip { animation : none} }
144- @media ( max-width : 719px ) { . sp-title { grid-template-columns : minmax ( 0 , 1fr ) !important } . sp-title-art { display : none} }
131+ /* Past sponsors: a wall of logo cards, five across on wide screens and two on phones. A card lifts while hovered or
132+ holding keyboard focus. */
133+ . ps-grid { list-style : none; margin : 0 ; padding : 0 ; display : grid; grid-template-columns : repeat ( 5 , minmax ( 0 , 1fr ) ) ; gap : 12px }
134+ . ps-card { position : relative; aspect-ratio : 3 / 2 ; border : 1px solid rgba ( 20 , 19 , 18 , .14 ) ; transition : border-color .3s , transform .4s cubic-bezier ( .25 , 1 , .1 , 1 ) , box-shadow .4s }
135+ . ps-card : hover , . ps-card : focus-within { border-color : rgba ( 20 , 19 , 18 , .5 ) ; transform : translateY ( -3px ) ; box-shadow : 0 14px 26px -18px rgba ( 20 , 19 , 18 , .5 ) }
136+ . ps-in { position : absolute; inset : 0 ; display : grid; place-items : center}
137+ . ps-in : focus-visible { outline : 2px solid # 141312; outline-offset : 3px }
138+ . ps-logo { height : auto; max-height : 64% ; object-fit : contain}
139+ @media ( max-width : 959px ) { . ps-grid { grid-template-columns : repeat ( 4 , minmax ( 0 , 1fr ) ) } }
140+ @media ( max-width : 719px ) { . ps-grid { grid-template-columns : repeat ( 3 , minmax ( 0 , 1fr ) ) ; gap : 10px } }
141+ @media ( max-width : 479px ) { . ps-grid { grid-template-columns : repeat ( 2 , minmax ( 0 , 1fr ) ) } }
142+ @media ( prefers-reduced-motion : reduce) { . ps-card : hover , . ps-card : focus-within { transform : none} }
145143
146144/* ---------- home hero ---------- */
147145/* --d is the disc's diameter and --cy its centre. Rings, disc, orbiters, copy and astronaut all hang off the two,
@@ -316,6 +314,8 @@ body::after{content:'';position:fixed;inset:0;pointer-events:none;z-index:9999;o
316314 . to-planet { left : -8vw ; top : calc ( 43% - var ( --s ) * 1.14 ) }
317315 . to-rocket { right : 5vw ; top : calc ( 43% - var ( --s ) * .6 - min ( 9.5vh , 85px ) ) ; height : min ( 19vh , 170px ) }
318316 . to-tagline { top : 74% }
317+ /* The closing fade into the mission list stays under the tagline, so the ink text never lands on the dark. */
318+ . to-fade { height : 17% !important }
319319}
320320
321321/* ---------- worlds slider decoration (WorldsView.tsx) ---------- */
@@ -391,6 +391,53 @@ body::after{content:'';position:fixed;inset:0;pointer-events:none;z-index:9999;o
391391/* Every other spark and gallery dust mote, and two of the five curtain cloud layers, sit out. */
392392[data-lowpower ] [data-lp-skip ]{ display : none}
393393
394+ /* ---------- home gallery tunnel (HomeView.tsx) ---------- */
395+ . t-scrim { display : none}
396+ /* Phones: photos are capped by height too (--ar is the photo's width/height; --tx/--ty its offset from the centre), so a tall one can't outgrow the room
397+ between the heading and the counter; the tunnel's centre and vanishing point drop into that room; and dark fades sit
398+ behind the heading and the counter, so a photo passing beneath never covers the text. */
399+ @media ( max-width : 719px ) {
400+ . t-space { perspective-origin : 50% 56% !important }
401+ . t-frame { width : min ( 54vw , calc ( 28vh * var ( --ar ) ) ) !important ; top : calc ( 56% + var ( --ty ) * .5 ) !important }
402+ . t-scrim { display : block; position : absolute; left : 0 ; right : 0 ; pointer-events : none}
403+ . t-scrim-top { top : 0 ; height : calc ( 4vh + 290px ) ; background : linear-gradient ( 180deg , # 141312 0 , rgba ( 20 , 19 , 18 , .94 ) 62% , rgba ( 20 , 19 , 18 , 0 ) ) }
404+ . t-scrim-bot { bottom : 0 ; height : 200px ; background : linear-gradient ( 0deg , # 141312 0 , rgba ( 20 , 19 , 18 , .9 ) 45% , rgba ( 20 , 19 , 18 , 0 ) ) }
405+ }
406+ /* Landscape phones: too short to stack the photos between the heading and the counter, so they fly through the open
407+ right-hand side instead, sized off the height. */
408+ @media ( max-height : 499px ) and ( orientation : landscape) {
409+ . t-space { perspective-origin : 76% 42% !important }
410+ . t-frame { width : calc ( 38vh * var ( --ar ) ) !important ; left : calc ( 76% + var ( --tx ) * .3 ) !important ; top : calc ( 42% + var ( --ty ) * .3 ) !important }
411+ }
412+
413+ /* ---------- gallery (GalleryView.tsx) ---------- */
414+ /* Phones: a frame sized off the width alone came out about 90-125px wide in portrait, and ran off the bottom of a
415+ landscape screen. These fill most of the screen once the photo in focus is scaled up by the perspective (1.25x),
416+ with Innovision#galleryTick keeping the spiral tight. Landscape phones size off the height instead. */
417+ @media ( max-width : 719px ) {
418+ . g-fr-l { width : min ( 64vw , 340px ) !important ; height : min ( 42.2vw , 224px ) !important }
419+ . g-fr-p { width : min ( 48vw , 240px ) !important ; height : min ( 64vw , 320px ) !important }
420+ }
421+ @media ( max-height : 499px ) and ( orientation : landscape) {
422+ . g-fr-l { width : 70vh !important ; height : 46vh !important }
423+ . g-fr-p { width : 42vh !important ; height : 56vh !important }
424+ }
425+
426+ /* ---------- touch devices ---------- */
427+ /* Phones and tablets: drop the effects that cost the most per frame while a page scrolls. Scene art's drop shadows go
428+ (each is an extra blur pass over a big layer, every frame it moves): inline filters write theirs as
429+ var(--no-ds, drop-shadow(...)), and opacity(1) is a no-op in its place. Low-power mode drops them everywhere. The film
430+ grain, a full-screen layer blended over the whole page, goes too. The HUD bar and the world switcher, always on screen,
431+ trade the frosted glass (a blur of whatever scrolls beneath, redone every frame) for a near-solid fill. */
432+ [data-lowpower ]{ --no-ds : opacity ( 1 ) }
433+ @media ( pointer : coarse) {
434+ : root { --no-ds : opacity ( 1 ) }
435+ body :: after { display : none}
436+ . hud-frost , . wn-pill { -webkit-backdrop-filter : none !important ; backdrop-filter : none !important }
437+ . hud-frost { background : rgba ( 236 , 232 , 223 , .97 ) !important }
438+ . wn-pill { background : rgba ( 236 , 232 , 223 , .96 ) !important }
439+ }
440+
394441/* ---------- schedule ---------- */
395442/* --gut lines the rows up with the 1240px column while letting each carousel run to the screen edge. */
396443. sc-hero , . sc-body { --gut : max ( clamp ( 16px , 4vw , 64px ) , ( 100% - 1240px ) / 2 ) }
0 commit comments