ReviewOS

also looking at this

stacks/lastsoulultra

LSU's own coaching surface, and what auditing the site turned up

#12
Merged glennmichael123 wants to merge claude/last-soul-ultra-web-6e0718 into main
86 files +3943 -1190

Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.

public/assets/styles/production/coaching-page.cssmodified+17-0
Changes to public/assets/styles/production/coaching-page.css
@@ -9,6 +9,23 @@
99 exists per page in base.css, which is why the old hero's red words
1010 rendered white. */
1111
12/* Unscoped, and kept that way: the scoped rules below build on these - the
13 hero h1 takes its family, case and tracking from here and overrides only
14 the size. They came across from stx-site.css with the rest of the page. */
15.coaching-hero{position:relative;padding:clamp(140px,18vw,240px) clamp(18px,5vw,40px) 100px;background:linear-gradient(90deg,#000e,#0003),url('/assets/lsu/images/hero-desktop.webp') 50% 35%/cover}
16.coaching-hero h1{max-width:13ch;font:400 clamp(48px,8vw,120px)/1.05 var(--lsu-display);text-transform:uppercase;letter-spacing:.02em;margin:24px 0}
17.coaching-hero p{max-width:54ch;color:#ffffffb3;font:400 19px/1.6 var(--lsu-body)}
18.coaching-body{max-width:1360px;margin:auto;padding:clamp(50px,7vw,100px) clamp(18px,5vw,40px)}
19.coaching-steps{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #ffffff24;border-bottom:1px solid #ffffff24;margin:3rem 0}
20.coaching-steps article{padding:2rem;border-right:1px solid #ffffff24}
21.coaching-steps article:last-child{border:0}
22.coaching-steps h2{font:400 30px/1.2 var(--lsu-display);text-transform:uppercase}
23.coaching-steps p{color:#ffffffa6;line-height:1.7}
24.coaching-note{padding:2rem;border-left:3px solid var(--lsu-red);background:#0d0d0f}
25.coaching-note h2{font:400 36px var(--lsu-display);text-transform:uppercase}
26.coaching-note p{max-width:65ch;color:#ffffffa6;line-height:1.7}
27@media(max-width:700px){.coaching-hero{background-image:linear-gradient(90deg,#000d,#0006),url('/assets/lsu/images/hero-mobile.webp')}.coaching-steps{grid-template-columns:1fr}.coaching-steps article{border-right:0;border-bottom:1px solid #ffffff24}}
28
1229.coaching-page .accent{color:var(--lsu-red)}
1330.coaching-page .coaching-body>*+*{margin-top:clamp(56px,7vw,104px)}
1431.coaching-page .coaching-head{display:flex;flex-direction:column;gap:18px;max-width:65ch}
public/assets/styles/production/home.cssmodified+11-0
Changes to public/assets/styles/production/home.css
@@ -1,1 +1,12 @@
11.accent.lsu-scope-home{color:var(--lsu-red)}.hero.lsu-scope-home{position:relative;height:auto;min-height:100svh;overflow:hidden;display:flex;align-items:flex-end}.hero-photo.lsu-scope-home{position:absolute;inset:-8% 0 32%;background-image:url(/assets/lsu/images/hero-desktop.webp);background-size:cover;background-position:50% 35%;filter:brightness(.85)}@media(max-width:900px){.hero-photo.lsu-scope-home{background-image:url(/assets/lsu/images/hero-mobile.webp);background-position:50% 30%}}.rig.lsu-scope-home{position:absolute;inset:-20% 0;pointer-events:none;mix-blend-mode:screen}.rig-core.lsu-scope-home{opacity:.85;animation:lsuTorch 7.4s ease-in-out infinite}.rig-streak.lsu-scope-home{opacity:.8;animation:lsuTorch 5.6s ease-in-out infinite}.rig-mid.lsu-scope-home{opacity:.75;animation:lsuTorch 8.8s ease-in-out infinite}.rig-haze.lsu-scope-home{opacity:.7;animation:lsuTorch 10.6s ease-in-out infinite}.glow.lsu-scope-home,.ray.lsu-scope-home,.streak.lsu-scope-home,.mid.lsu-scope-home,.haze.lsu-scope-home{position:absolute;left:0;top:0;width:10px;height:10px;transform:translate(-50%,-50%)}.glow.lsu-scope-home{border-radius:50%;background:radial-gradient(circle,#fffdf6c7,#fff7e142 30%,#fff0cd0f 62%,#0000);filter:blur(4px)}.ray.lsu-scope-home{-webkit-mask-image:radial-gradient(circle,rgba(0,0,0,.9) 0%,rgba(0,0,0,.35) 34%,rgba(0,0,0,0) 66%);mask-image:radial-gradient(circle,#000000e6,#00000059 34%,#0000 66%);filter:blur(1.2px)}.streak.lsu-scope-home{height:3px;background:linear-gradient(90deg,#0000,#fff8e429 32%,#fffcf466,#fff8e429 68%,#0000);filter:blur(2px)}.mid.lsu-scope-home{border-radius:50%;background:radial-gradient(circle,#fff9e838,#fff4d812 40%,#0000);filter:blur(9px)}.haze.lsu-scope-home{border-radius:50%;background:radial-gradient(circle,#fff6dc24,#fff2d20a 48%,#0000);filter:blur(22px)}.rain.lsu-scope-home{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen}.rain-back.lsu-scope-home{opacity:.9;-webkit-mask-image:linear-gradient(to bottom,rgba(0,0,0,.95) 0%,rgba(0,0,0,.8) 55%,rgba(0,0,0,.55) 100%);mask-image:linear-gradient(to bottom,#000000f2,#000c 55%,#0000008c)}.rain-front.lsu-scope-home{z-index:4;filter:blur(1.2px);opacity:.5}@media(max-width:900px){.rain-front.lsu-scope-home{filter:none}}.hero-vignette.lsu-scope-home{position:absolute;inset:0;background:radial-gradient(120% 90% at 50% 10%,#0000,#0000008c 55%,#000000f5)}.hero-foot.lsu-scope-home{position:absolute;left:0;right:0;bottom:0;height:40%;pointer-events:none;z-index:2;background:linear-gradient(to bottom,#0000,#0000004d 45%,#000000bf 78%,#000)}.hero-mist.lsu-scope-home{position:absolute;inset:0;pointer-events:none;background:radial-gradient(60% 45% at 22% 78%,#becddc29,#0000 70%),radial-gradient(50% 40% at 76% 66%,#becddc1f,#0000 70%);animation:lsuMist 17s ease-in-out infinite alternate;mix-blend-mode:screen}.hero-flash.lsu-scope-home{position:absolute;inset:0;pointer-events:none;background:linear-gradient(to bottom,#d2e1f01a,#0000 55%);animation:lsuFlash 14s linear infinite;mix-blend-mode:screen}.hero-copy.lsu-scope-home{position:relative;z-index:3;width:100%;max-width:calc(var(--lsu-max) + 2 * var(--lsu-pad-x));margin-inline:auto;padding:clamp(96px,12vh,140px) var(--lsu-pad-x) 56px;display:flex;flex-direction:column;gap:28px}.hero-live.lsu-scope-home{display:flex;align-items:center;gap:14px;font-size:11px;letter-spacing:.3em;text-transform:uppercase;color:var(--lsu-red);text-shadow:0 1px 14px rgba(0,0,0,.95),0 0 4px rgba(0,0,0,.8)}.hero-dot.lsu-scope-home{width:8px;height:8px;border-radius:50%;background:var(--lsu-red);animation:lsuPulse 2.4s ease-in-out infinite;flex:0 0 auto}.hero-copy.lsu-scope-home h1.lsu-scope-home{margin:0;font-family:var(--lsu-display);font-size:clamp(24px,8vw,190px);line-height:1.05;letter-spacing:.02em;text-transform:uppercase;max-width:1100px;white-space:nowrap}.hero-copy.lsu-scope-home h1.lsu-scope-home .hero-kicker.lsu-scope-home{display:block;margin-bottom:26px;font-family:var(--lsu-body);line-height:1.4;white-space:normal;color:#ffffffb8;text-shadow:0 1px 14px rgba(0,0,0,.95),0 0 4px rgba(0,0,0,.8)}.hero-base.lsu-scope-home{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:32px;border-top:1px solid var(--lsu-line);padding-top:26px}.hero-base.lsu-scope-home p.lsu-scope-home{margin:0;max-width:480px;font-size:18px;line-height:1.6;color:#ffffffb8}.hero-actions.lsu-scope-home{display:flex;gap:14px;flex-wrap:wrap}@media(max-width:1080px){.hero-actions.lsu-scope-home{display:none}}.marquee-band.lsu-scope-home{position:relative;z-index:4;background:var(--lsu-black);border-top:1px solid var(--lsu-line-soft);border-bottom:1px solid var(--lsu-line-soft);overflow:hidden}.marquee.lsu-scope-home{display:flex;gap:56px;padding:16px 0;white-space:nowrap;font-family:var(--lsu-display);font-size:15px;letter-spacing:.24em;text-transform:uppercase;color:#ffffff73;width:max-content;animation:lsuMarquee 60s linear infinite;will-change:transform}.marquee.lsu-scope-home>.lsu-scope-home{flex:none}@keyframes lsuMarquee{to{transform:translate(-50%)}}.marquee.lsu-scope-home .slash.lsu-scope-home{color:var(--lsu-red)}.lapscroll.lsu-scope-home{position:relative;background:var(--lsu-black)}.lap-inner.lsu-scope-home{position:relative;min-height:100vh;overflow:hidden;display:flex;align-items:center;padding-block:clamp(40px,5vw,72px)}.lap-photo.lsu-scope-home{position:absolute;inset:-10% 0;background-image:url(/assets/lsu/images/rappid-65.webp);background-size:cover;background-position:center;filter:grayscale(1) contrast(1.2) brightness(.3);opacity:.5}.lap-scrim.lsu-scope-home{position:absolute;inset:0;background:linear-gradient(to bottom,#000000f2,#00000080 50%,#000000f2)}.lap-grid.lsu-scope-home{position:relative;z-index:2;width:100%;padding:0 var(--lsu-pad-x);display:grid;grid-template-columns:1.15fr 1fr;gap:64px;align-items:center}.lap-kicker.lsu-scope-home{margin-bottom:22px}.lap-readouts.lsu-scope-home{display:flex;align-items:flex-start;gap:24px;flex-wrap:wrap}.seg.lsu-scope-home{position:relative;display:inline-block}.seg-ghost.lsu-scope-home{color:#ffffff14}.seg-live.lsu-scope-home{position:absolute;left:0;top:0;color:var(--lsu-white);text-shadow:0 0 16px rgba(255,255,255,.5),0 0 52px rgba(255,255,255,.2)}.seg-ghost.lsu-scope-home,.seg-live.lsu-scope-home{font-family:var(--lsu-seg);font-variant-numeric:tabular-nums}.seg-ghost-red.lsu-scope-home{color:#ff2a1a17}.seg-live-red.lsu-scope-home{color:var(--lsu-seg-red);text-shadow:0 0 18px rgba(255,42,26,.75),0 0 60px rgba(255,42,26,.35)}.seg-lap.lsu-scope-home{font-size:min(16vw,168px,18vh);line-height:.9}.seg-live.lsu-scope-home.seg-lap{inset:0}.seg-clock.lsu-scope-home{font-size:clamp(24px,3vw,46px);line-height:1;white-space:nowrap}.seg-live.lsu-scope-home.seg-clock{text-shadow:0 0 14px rgba(255,42,26,.7)}.seg-souls.lsu-scope-home{font-size:clamp(52px,7.5vw,110px);line-height:1}.seg-km.lsu-scope-home{font-size:clamp(30px,4vw,58px);line-height:1;white-space:nowrap}.seg-live.lsu-scope-home.seg-km{text-shadow:0 0 14px rgba(255,255,255,.45),0 0 44px rgba(255,255,255,.18)}.seg-unit.lsu-scope-home{font-family:var(--lsu-body);font-size:.35em;letter-spacing:.2em;color:var(--lsu-dim-2)}.seg-label.lsu-scope-home{font-size:10px;letter-spacing:.3em;text-transform:uppercase;color:#ffffff52;margin-bottom:8px}.seg-label-red.lsu-scope-home{color:#ff2a1aa6}.lap-elapsed.lsu-scope-home{margin-top:14px;padding-top:14px;border-top:1px solid rgba(255,42,26,.25);display:flex;align-items:baseline;gap:12px}.lap-elapsed.lsu-scope-home .seg-label.lsu-scope-home{margin-bottom:0;color:#ff2a1a99}.lap-side.lsu-scope-home{padding-top:14px;display:flex;flex-direction:column;gap:18px}.lap-meta.lsu-scope-home{display:flex;flex-direction:column;gap:6px;font-size:11px;letter-spacing:.26em;text-transform:uppercase;color:#ffffff52;text-shadow:0 0 10px rgba(255,255,255,.15)}.lap-meta-live.lsu-scope-home{color:#ffffffd9;text-shadow:0 0 10px rgba(255,255,255,.25)}.attr.lsu-scope-home{margin-top:34px}.attr-head.lsu-scope-home{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 16px;font-size:9px;letter-spacing:.28em;text-transform:uppercase;color:#ffffff4d;margin-bottom:8px}.attr.lsu-scope-home canvas.lsu-scope-home{cursor:crosshair;display:block;width:100%;height:44px;filter:drop-shadow(0 0 8px rgba(255,255,255,.28)) drop-shadow(0 0 5px rgba(255,42,26,.3))}.lap-copy.lsu-scope-home{display:flex;flex-direction:column;gap:26px}.lap-copy.lsu-scope-home p.lsu-scope-home{white-space:pre-line}.lap-copy.lsu-scope-home h2.lsu-scope-home{margin:0;font-family:var(--lsu-display);font-size:clamp(34px,4.2vw,62px);line-height:1.05;text-transform:uppercase;letter-spacing:.02em}.lap-copy.lsu-scope-home p.lsu-scope-home{margin:0;font-size:18px;line-height:1.6;color:var(--lsu-dim-2);max-width:430px;min-height:116px}.lap-facts.lsu-scope-home{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--lsu-line);border:1px solid var(--lsu-line)}.lap-facts.lsu-scope-home>div.lsu-scope-home{background:var(--lsu-black);padding:20px 22px}.lap-fact-l.lsu-scope-home{font-size:10px;letter-spacing:.26em;text-transform:uppercase;color:#ffffff4d;margin-bottom:8px}.lap-fact-v.lsu-scope-home{font-family:var(--lsu-display);font-size:22px;text-transform:uppercase}.y87scroll.lsu-scope-home{position:relative;background:var(--lsu-black);border-top:1px solid var(--lsu-line-soft)}.y87-sticky.lsu-scope-home{position:relative;min-height:62vh;overflow:hidden;display:flex;align-items:flex-start;justify-content:flex-start;padding:clamp(56px,8vh,80px) 0 clamp(40px,14vh,140px)}.y87-bg.lsu-scope-home{position:absolute;inset:0}.y87-poster.lsu-scope-home{position:absolute;inset:0;background-image:url(/assets/lsu/images/yard87-poster.jpg);background-size:cover;background-position:38% 30%}.y87-vid.lsu-scope-home{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:38% 30%}.y87-top.lsu-scope-home{position:absolute;inset:0;background:linear-gradient(to bottom,#000000d9,#0000 30% 68%,#00000080)}.y87-shell.lsu-scope-home{position:relative;width:100%;padding:0 var(--lsu-pad-x);display:flex;justify-content:center}.y87-col.lsu-scope-home{width:100%;max-width:var(--lsu-max);display:flex;flex-direction:column;gap:clamp(18px,2.6vh,28px)}.y87-stage.lsu-scope-home{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.y87-chapter.lsu-scope-home{display:flex;flex-direction:column;gap:10px;padding:20px;background:#0000008c;border:1px solid rgba(255,255,255,.16);backdrop-filter:blur(3px)}.y87-chapter.lsu-scope-home h2.lsu-scope-home{margin:0;font-family:var(--lsu-display);font-size:clamp(20px,2.2vw,30px);line-height:1;text-transform:uppercase;text-shadow:0 2px 30px rgba(0,0,0,.9)}.y87-chapter.lsu-scope-home p.lsu-scope-home{margin:0;font-size:14px;line-height:1.55;color:var(--lsu-dim-1);text-shadow:0 1px 12px rgba(0,0,0,.8)}@media(max-width:900px){.y87-stage.lsu-scope-home{grid-template-columns:1fr 1fr}.y87-vid.lsu-scope-home{object-position:42% 30%}.y87-poster.lsu-scope-home{background-position:42% 30%}}@media(max-width:560px){.y87-stage.lsu-scope-home{grid-template-columns:1fr}}.recap.lsu-scope-home{position:relative;padding:clamp(66px,8.6vw,120px) var(--lsu-pad-x);background:var(--lsu-black)}.recap-head.lsu-scope-home{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:22px 30px;margin-bottom:52px;border-bottom:1px solid var(--lsu-line);padding-bottom:22px}.recap-title.lsu-scope-home{margin:0;font-family:var(--lsu-display);font-size:clamp(38px,5.5vw,84px);line-height:1.05;text-transform:uppercase}.recap-meta.lsu-scope-home{display:flex;flex-direction:column;align-items:flex-end;gap:14px;padding-bottom:8px}.recap-sub.lsu-scope-home{font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--lsu-dim-2)}.recap-link.lsu-scope-home{display:inline-flex;align-items:center;gap:10px;font-size:12px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--lsu-red);border-bottom:1px solid var(--lsu-red);padding-bottom:4px}.recap-link.lsu-scope-home:hover{color:var(--lsu-white);border-color:var(--lsu-white)}.carousel-track.lsu-scope-home{display:flex;gap:20px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;overscroll-behavior-x:contain}.carousel-track.lsu-scope-home::-webkit-scrollbar{display:none}.carousel-track.lsu-scope-home:focus-visible{outline:2px solid var(--lsu-red);outline-offset:4px}.carousel-slide.lsu-scope-home{flex:0 0 calc((100% - 40px) / 3);scroll-snap-align:start;aspect-ratio:3 / 4;overflow:hidden}.carousel-slide.lsu-scope-home img.lsu-scope-home{display:block;width:100%;height:100%;object-fit:cover;object-position:center}.carousel-nav.lsu-scope-home{display:flex;align-items:center;justify-content:center;gap:22px;margin-top:26px}.carousel-btn.lsu-scope-home{width:56px;height:56px;border:1px solid var(--lsu-line);background:transparent;color:var(--lsu-white);font-size:22px;cursor:pointer}.carousel-btn.lsu-scope-home:hover:not(:disabled){background:var(--lsu-red);border-color:var(--lsu-red);color:var(--lsu-white)}.carousel-btn.lsu-scope-home:disabled{opacity:.3;cursor:default}.carousel-count.lsu-scope-home{min-width:5ch;text-align:center;font-family:var(--lsu-mono);font-size:13px;letter-spacing:.16em;color:var(--lsu-dim-2)}@media(max-width:1000px){.carousel-slide.lsu-scope-home{flex-basis:calc((100% - 20px)/2)}}@media(max-width:640px){.carousel-slide.lsu-scope-home{flex-basis:100%}.carousel-track.lsu-scope-home{gap:12px}}@media(max-width:900px){.recap-head.lsu-scope-home>div.lsu-scope-home{align-items:flex-start}}.duelscroll.lsu-scope-home{position:relative;background:var(--lsu-black);border-top:1px solid var(--lsu-line-soft)}.duel-sticky.lsu-scope-home{position:relative;min-height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:flex-start;padding-block:clamp(40px,5vw,72px)}.duel-bg.lsu-scope-home{position:absolute;inset:-26% 0;background-image:url(/assets/lsu/images/rappid-13-1080.webp);background-size:cover;background-position:center 30%;opacity:.22;filter:grayscale(1) contrast(1.15);will-change:transform}.duel-scrim.lsu-scope-home{position:absolute;inset:0;background:radial-gradient(90% 75% at 50% 46%,#00000052,#000000e6),linear-gradient(to bottom,#000000e6,#0003 26% 72%,#000000eb)}.duel-shell.lsu-scope-home{position:relative;width:100%;max-width:var(--lsu-max);margin:0 auto;padding:0 var(--lsu-pad-x)}.duel-kicker.lsu-scope-home{margin-bottom:18px}.duel-title.lsu-scope-home{margin-bottom:46px}.duel-bars.lsu-scope-home{display:flex;flex-direction:column;gap:38px}.duel-head.lsu-scope-home{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px;gap:16px;flex-wrap:wrap}.duel-id.lsu-scope-home{display:flex;align-items:baseline;gap:16px}.duel-ed.lsu-scope-home{font-family:var(--lsu-display);font-size:20px;text-transform:uppercase;color:#ffffffd9}.duel-ed-2.lsu-scope-home{color:var(--lsu-red)}.duel-km.lsu-scope-home{font-family:var(--lsu-seg);font-size:15px;color:var(--lsu-dim-1)}.duel-km-2.lsu-scope-home{color:var(--lsu-red)}.duel-unit.lsu-scope-home{font-family:var(--lsu-mono);font-size:12px;letter-spacing:.12em}.duel-note.lsu-scope-home{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--lsu-dim-3)}.duel-track.lsu-scope-home{position:relative;height:34px;background:#ffffff12}.duel-fill.lsu-scope-home{position:absolute;left:0;top:0;bottom:0;width:0%}.duel-fill-1.lsu-scope-home{background:#ffffffd9}.duel-fill-2.lsu-scope-home{background:var(--lsu-red)}.duel-yard.lsu-scope-home{position:absolute;left:8px;top:50%;transform:translateY(-50%);font-family:var(--lsu-seg);font-size:18px}.duel-yard-1.lsu-scope-home{color:#000;mix-blend-mode:difference;filter:invert(1)}.duel-yard-2.lsu-scope-home{color:var(--lsu-white);text-shadow:0 0 10px rgba(0,0,0,.6)}.duel-mark.lsu-scope-home{position:relative;height:0}.duel-mark-line.lsu-scope-home{position:absolute;left:95.74%;top:-152px;width:1px;height:170px;background:#ff2a1a80}.duel-mark-label.lsu-scope-home{position:absolute;left:95.74%;top:22px;transform:translate(-100%);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:#ff2a1acc;white-space:nowrap;padding-right:8px}.duel-text.lsu-scope-home{margin:6px 0 0;max-width:560px;font-size:16px;line-height:1.6;color:var(--lsu-dim-2);min-height:52px}.attr-band.lsu-scope-home .band-bg.lsu-scope-home{inset:-8% 0;background-image:url(/assets/lsu/images/statement-1080.webp);background-size:cover;background-position:center 44%;filter:brightness(.6)}@media(max-width:760px){.attr-band.lsu-scope-home .band-bg.lsu-scope-home{background-image:url(/assets/lsu/images/statement-720.webp);background-position:center 30%}}.attr-band.lsu-scope-home .band-scrim.lsu-scope-home{background:linear-gradient(to top,#000000d9,#00000026 60%,#00000040)}.attr-band.lsu-scope-home .band-copy.lsu-scope-home{align-self:flex-end;padding-bottom:clamp(24px,5vw,64px)}.attr-band.lsu-scope-home{height:85vh;min-height:480px}.attr-copy.lsu-scope-home{font-size:clamp(28px,3.8vw,56px);letter-spacing:.02em}@media(max-width:760px){.lap-inner.lsu-scope-home{min-height:0}.lap-facts.lsu-scope-home{display:none}.lap-readouts.lsu-scope-home{gap:16px}.lap-side.lsu-scope-home{flex-direction:row;align-items:baseline;gap:26px;padding-top:6px;flex-wrap:wrap}}@media(prefers-reduced-motion:reduce){.rig.lsu-scope-home,.hero-mist.lsu-scope-home,.hero-flash.lsu-scope-home,.hero-dot.lsu-scope-home{animation:none}}
2
3/* Moved out of stx-site.css, which every route downloads and none of these
4 can match: the duel bars and the deferral hints belong to this page. */
5.duel-fill-1.lsu-scope-home{width:71.28%}
6.duel-fill-2.lsu-scope-home{width:100%}
7/* Let the browser defer distant story panels and their background photos.
8 Explicitly sized bands keep their authored height. Story panels remember
9 their measured height after their first visit; one viewport reserves space
10 before they approach the viewport. Unsupported browsers render normally. */
11.lapscroll.lsu-scope-home,.duelscroll.lsu-scope-home{content-visibility:auto;contain-intrinsic-block-size:auto 100svh}
12.attr-band.lsu-scope-home{content-visibility:auto}
public/assets/styles/production/next-loop.cssmodified+4-0
Changes to public/assets/styles/production/next-loop.css
@@ -1,1 +1,5 @@
11.enter.lsu-scope-next-loop{position:relative;min-height:640px;height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:center}.enter-bg.lsu-scope-next-loop{position:absolute;inset:-20% 0;background-image:url(/assets/lsu/images/rappid-20.webp);background-size:cover;background-position:center 40%;filter:grayscale(1) brightness(.45)}.enter-scrim.lsu-scope-next-loop{position:absolute;inset:0;background:radial-gradient(80% 70% at 50% 50%,#00000059,#000000f2)}.enter-copy.lsu-scope-next-loop{position:relative;z-index:3;text-align:center;padding:0 var(--lsu-pad-x);display:flex;flex-direction:column;align-items:center;gap:30px}.seg.lsu-scope-next-loop{position:relative;display:inline-block}.seg-ghost.lsu-scope-next-loop,.seg-live.lsu-scope-next-loop{font-family:var(--lsu-seg);font-variant-numeric:tabular-nums;font-size:clamp(56px,12vw,160px);line-height:1;white-space:nowrap}.seg-ghost.lsu-scope-next-loop{color:#ffffff14}.seg-live.lsu-scope-next-loop{position:absolute;left:0;top:0;color:var(--lsu-white);text-shadow:0 0 16px rgba(255,255,255,.5),0 0 52px rgba(255,255,255,.2)}.enter-sub.lsu-scope-next-loop{margin-top:-18px;font:13px var(--lsu-mono);letter-spacing:.24em;text-transform:uppercase;color:var(--lsu-dim-1)}.enter-title.lsu-scope-next-loop{margin:0;font-family:var(--lsu-display);font-size:clamp(44px,8vw,132px);line-height:1;letter-spacing:.02em;text-transform:uppercase}.enter-copy.lsu-scope-next-loop p.lsu-scope-next-loop{margin:0;max-width:560px;font-size:17px;line-height:1.6;color:#ffffffb8}
2
3/* Moved out of stx-site.css: this sheet is loaded by the two pages that
4 have an .enter band, and no others. */
5.enter.lsu-scope-next-loop{content-visibility:auto}
public/assets/styles/stx-site.cssmodified+1-18
Changes to public/assets/styles/stx-site.css
@@ -1,18 +1,1 @@
1.lsu-skip{position:fixed;left:1rem;top:-5rem;z-index:200;background:#fff;color:#000;padding:1rem}.lsu-skip:focus{top:1rem}main:focus{outline:none}.nav-links{gap:clamp(12px,1.6vw,28px)}.coaching-hero{position:relative;padding:clamp(140px,18vw,240px) clamp(18px,5vw,40px) 100px;background:linear-gradient(90deg,#000e,#0003),url('/assets/lsu/images/hero-desktop.webp') 50% 35%/cover}.coaching-hero h1{max-width:13ch;font:400 clamp(48px,8vw,120px)/1.05 var(--lsu-display);text-transform:uppercase;letter-spacing:.02em;margin:24px 0}.coaching-hero p{max-width:54ch;color:#ffffffb3;font:400 19px/1.6 var(--lsu-body)}.coaching-body{max-width:1360px;margin:auto;padding:clamp(50px,7vw,100px) clamp(18px,5vw,40px)}.coaching-steps{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #ffffff24;border-bottom:1px solid #ffffff24;margin:3rem 0}.coaching-steps article{padding:2rem;border-right:1px solid #ffffff24}.coaching-steps article:last-child{border:0}.coaching-steps h2{font:400 30px/1.2 var(--lsu-display);text-transform:uppercase}.coaching-steps p{color:#ffffffa6;line-height:1.7}.coaching-note{padding:2rem;border-left:3px solid var(--lsu-red);background:#0d0d0f}.coaching-note h2{font:400 36px var(--lsu-display);text-transform:uppercase}.coaching-note p{max-width:65ch;color:#ffffffa6;line-height:1.7}.race-portal{max-width:720px;margin:auto;padding:clamp(24px,5vw,64px);border:1px solid #ffffff24;background:#0d0d0f}.race-portal label{display:block;font:600 12px var(--lsu-body);text-transform:uppercase;letter-spacing:.12em;margin:1rem 0 .5rem}.race-portal input,.race-portal textarea,.race-portal select{display:block;width:100%;padding:1rem;background:#050505;border:1px solid #ffffff40;color:#fff;font:inherit}.race-portal .btn{margin-top:1.5rem}.race-portal [role=alert]{color:#ff928f}.race-portal h2{font:400 36px var(--lsu-display);text-transform:uppercase}.race-portal p{line-height:1.65}.race-tabs{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:2rem}.race-tabs button{background:transparent;color:#fff;border:0;border-bottom:2px solid #ffffff40;padding:.75rem;cursor:pointer}.race-tabs button[aria-selected=true]{border-color:#dd0f15}.race-portal .field-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.lsu-scroll-gallery{overflow:auto;scroll-snap-type:x mandatory}.lsu-scroll-gallery>*{scroll-snap-align:start}@media(max-width:700px){.coaching-hero{background-image:linear-gradient(90deg,#000d,#0006),url('/assets/lsu/images/hero-mobile.webp')}.coaching-steps{grid-template-columns:1fr}.coaching-steps article{border-right:0;border-bottom:1px solid #ffffff24}.race-portal .field-row{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
2
3.lsu-globe-stage{position:relative;width:100%;height:100%;min-height:420px}.lsu-globe-fallback{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}.lsu-event-dot{display:block;width:14px;height:14px;border-radius:50%;background:#dd0f15;border:2px solid white;box-shadow:0 0 0 6px #dd0f1540}.ts-map{background:transparent}.lsu-globe-stage .ts-map{position:absolute;inset:0}.lsu-globe-stage:has([data-ts-map])>.lsu-globe-fallback{visibility:hidden}
4
5.hour-dial .rest-ring{width:100%;height:auto;aspect-ratio:1;transform:rotate(-90deg)}
6
7.duel-fill-1.lsu-scope-home{width:71.28%}.duel-fill-2.lsu-scope-home{width:100%}
8@supports(animation-timeline:view()){.duelscroll{view-timeline-name:--duel;view-timeline-axis:block}.duel-fill{transform-origin:left;animation:lsu-grow linear both;animation-timeline:--duel;animation-range:entry 20% exit 65%}@keyframes lsu-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}}
9@media(prefers-reduced-motion:reduce){.duel-fill{animation:none}}
10
11.lsu-host-dialog[data-stx-dialog]{z-index:200}.lsu-host-dialog .sr-dialog{color:var(--lsu-white,#fff);background:#080808;padding:0;border:1px solid #333;border-radius:0}
12
13/* Let the browser defer distant story panels and their background photos.
14 Explicitly sized bands keep their authored height. Story panels remember
15 their measured height after their first visit; one viewport reserves space
16 before they approach the viewport. Unsupported browsers render normally. */
17.lapscroll.lsu-scope-home,.duelscroll.lsu-scope-home{content-visibility:auto;contain-intrinsic-block-size:auto 100svh}
18.attr-band.lsu-scope-home,.enter.lsu-scope-next-loop{content-visibility:auto}
1.lsu-skip{position:fixed;left:1rem;top:-5rem;z-index:200;background:#fff;color:#000;padding:1rem}.lsu-skip:focus{top:1rem}main:focus{outline:none}.nav-links{gap:clamp(12px,1.6vw,28px)}.race-portal{max-width:720px;margin:auto;padding:clamp(24px,5vw,64px);border:1px solid #ffffff24;background:#0d0d0f}.race-portal label{display:block;font:600 12px var(--lsu-body);text-transform:uppercase;letter-spacing:.12em;margin:1rem 0 .5rem}.race-portal input,.race-portal textarea,.race-portal select{display:block;width:100%;padding:1rem;background:#050505;border:1px solid #ffffff40;color:#fff;font:inherit}.race-portal .btn{margin-top:1.5rem}.race-portal [role=alert]{color:#ff928f}.race-portal h2{font:400 36px var(--lsu-display);text-transform:uppercase}.race-portal p{line-height:1.65}.race-tabs{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:2rem}.race-tabs button{background:transparent;color:#fff;border:0;border-bottom:2px solid #ffffff40;padding:.75rem;cursor:pointer}.race-tabs button[aria-selected=true]{border-color:#dd0f15}.race-portal .field-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.lsu-scroll-gallery{overflow:auto;scroll-snap-type:x mandatory}.lsu-scroll-gallery>*{scroll-snap-align:start}@media(max-width:700px){.race-portal .field-row{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}.lsu-globe-stage{position:relative;width:100%;height:100%;min-height:420px}.lsu-globe-fallback{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}.lsu-event-dot{display:block;width:14px;height:14px;border-radius:50%;background:#dd0f15;border:2px solid white;box-shadow:0 0 0 6px #dd0f1540}.ts-map{background:transparent}.lsu-globe-stage .ts-map{position:absolute;inset:0}.lsu-globe-stage:has([data-ts-map])>.lsu-globe-fallback{visibility:hidden}.hour-dial .rest-ring{width:100%;height:auto;aspect-ratio:1;transform:rotate(-90deg)}@supports(animation-timeline:view()){.duelscroll{view-timeline-name:--duel;view-timeline-axis:block}.duel-fill{transform-origin:left;animation:lsu-grow linear both;animation-timeline:--duel;animation-range:entry 20% exit 65%}@keyframes lsu-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}}@media(prefers-reduced-motion:reduce){.duel-fill{animation:none}}.lsu-host-dialog[data-stx-dialog]{z-index:200}.lsu-host-dialog .sr-dialog{color:var(--lsu-white,#fff);background:#080808;padding:0;border:1px solid #333;border-radius:0}
resources/assets/styles/site/coaching-page.cssmodified+17-0
Changes to resources/assets/styles/site/coaching-page.css
@@ -9,6 +9,23 @@
99 exists per page in base.css, which is why the old hero's red words
1010 rendered white. */
1111
12/* Unscoped, and kept that way: the scoped rules below build on these - the
13 hero h1 takes its family, case and tracking from here and overrides only
14 the size. They came across from stx-site.css with the rest of the page. */
15.coaching-hero{position:relative;padding:clamp(140px,18vw,240px) clamp(18px,5vw,40px) 100px;background:linear-gradient(90deg,#000e,#0003),url('/assets/lsu/images/hero-desktop.webp') 50% 35%/cover}
16.coaching-hero h1{max-width:13ch;font:400 clamp(48px,8vw,120px)/1.05 var(--lsu-display);text-transform:uppercase;letter-spacing:.02em;margin:24px 0}
17.coaching-hero p{max-width:54ch;color:#ffffffb3;font:400 19px/1.6 var(--lsu-body)}
18.coaching-body{max-width:1360px;margin:auto;padding:clamp(50px,7vw,100px) clamp(18px,5vw,40px)}
19.coaching-steps{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #ffffff24;border-bottom:1px solid #ffffff24;margin:3rem 0}
20.coaching-steps article{padding:2rem;border-right:1px solid #ffffff24}
21.coaching-steps article:last-child{border:0}
22.coaching-steps h2{font:400 30px/1.2 var(--lsu-display);text-transform:uppercase}
23.coaching-steps p{color:#ffffffa6;line-height:1.7}
24.coaching-note{padding:2rem;border-left:3px solid var(--lsu-red);background:#0d0d0f}
25.coaching-note h2{font:400 36px var(--lsu-display);text-transform:uppercase}
26.coaching-note p{max-width:65ch;color:#ffffffa6;line-height:1.7}
27@media(max-width:700px){.coaching-hero{background-image:linear-gradient(90deg,#000d,#0006),url('/assets/lsu/images/hero-mobile.webp')}.coaching-steps{grid-template-columns:1fr}.coaching-steps article{border-right:0;border-bottom:1px solid #ffffff24}}
28
1229.coaching-page .accent{color:var(--lsu-red)}
1330.coaching-page .coaching-body>*+*{margin-top:clamp(56px,7vw,104px)}
1431.coaching-page .coaching-head{display:flex;flex-direction:column;gap:18px;max-width:65ch}
resources/assets/styles/site/home.cssmodified+11-0
Changes to resources/assets/styles/site/home.css
@@ -1,1 +1,12 @@
11.accent.lsu-scope-home{color:var(--lsu-red)}.hero.lsu-scope-home{position:relative;height:auto;min-height:100svh;overflow:hidden;display:flex;align-items:flex-end}.hero-photo.lsu-scope-home{position:absolute;inset:-8% 0 32%;background-image:url(/assets/lsu/images/hero-desktop.webp);background-size:cover;background-position:50% 35%;filter:brightness(.85)}@media(max-width:900px){.hero-photo.lsu-scope-home{background-image:url(/assets/lsu/images/hero-mobile.webp);background-position:50% 30%}}.rig.lsu-scope-home{position:absolute;inset:-20% 0;pointer-events:none;mix-blend-mode:screen}.rig-core.lsu-scope-home{opacity:.85;animation:lsuTorch 7.4s ease-in-out infinite}.rig-streak.lsu-scope-home{opacity:.8;animation:lsuTorch 5.6s ease-in-out infinite}.rig-mid.lsu-scope-home{opacity:.75;animation:lsuTorch 8.8s ease-in-out infinite}.rig-haze.lsu-scope-home{opacity:.7;animation:lsuTorch 10.6s ease-in-out infinite}.glow.lsu-scope-home,.ray.lsu-scope-home,.streak.lsu-scope-home,.mid.lsu-scope-home,.haze.lsu-scope-home{position:absolute;left:0;top:0;width:10px;height:10px;transform:translate(-50%,-50%)}.glow.lsu-scope-home{border-radius:50%;background:radial-gradient(circle,#fffdf6c7,#fff7e142 30%,#fff0cd0f 62%,#0000);filter:blur(4px)}.ray.lsu-scope-home{-webkit-mask-image:radial-gradient(circle,rgba(0,0,0,.9) 0%,rgba(0,0,0,.35) 34%,rgba(0,0,0,0) 66%);mask-image:radial-gradient(circle,#000000e6,#00000059 34%,#0000 66%);filter:blur(1.2px)}.streak.lsu-scope-home{height:3px;background:linear-gradient(90deg,#0000,#fff8e429 32%,#fffcf466,#fff8e429 68%,#0000);filter:blur(2px)}.mid.lsu-scope-home{border-radius:50%;background:radial-gradient(circle,#fff9e838,#fff4d812 40%,#0000);filter:blur(9px)}.haze.lsu-scope-home{border-radius:50%;background:radial-gradient(circle,#fff6dc24,#fff2d20a 48%,#0000);filter:blur(22px)}.rain.lsu-scope-home{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen}.rain-back.lsu-scope-home{opacity:.9;-webkit-mask-image:linear-gradient(to bottom,rgba(0,0,0,.95) 0%,rgba(0,0,0,.8) 55%,rgba(0,0,0,.55) 100%);mask-image:linear-gradient(to bottom,#000000f2,#000c 55%,#0000008c)}.rain-front.lsu-scope-home{z-index:4;filter:blur(1.2px);opacity:.5}@media(max-width:900px){.rain-front.lsu-scope-home{filter:none}}.hero-vignette.lsu-scope-home{position:absolute;inset:0;background:radial-gradient(120% 90% at 50% 10%,#0000,#0000008c 55%,#000000f5)}.hero-foot.lsu-scope-home{position:absolute;left:0;right:0;bottom:0;height:40%;pointer-events:none;z-index:2;background:linear-gradient(to bottom,#0000,#0000004d 45%,#000000bf 78%,#000)}.hero-mist.lsu-scope-home{position:absolute;inset:0;pointer-events:none;background:radial-gradient(60% 45% at 22% 78%,#becddc29,#0000 70%),radial-gradient(50% 40% at 76% 66%,#becddc1f,#0000 70%);animation:lsuMist 17s ease-in-out infinite alternate;mix-blend-mode:screen}.hero-flash.lsu-scope-home{position:absolute;inset:0;pointer-events:none;background:linear-gradient(to bottom,#d2e1f01a,#0000 55%);animation:lsuFlash 14s linear infinite;mix-blend-mode:screen}.hero-copy.lsu-scope-home{position:relative;z-index:3;width:100%;max-width:calc(var(--lsu-max) + 2 * var(--lsu-pad-x));margin-inline:auto;padding:clamp(96px,12vh,140px) var(--lsu-pad-x) 56px;display:flex;flex-direction:column;gap:28px}.hero-live.lsu-scope-home{display:flex;align-items:center;gap:14px;font-size:11px;letter-spacing:.3em;text-transform:uppercase;color:var(--lsu-red);text-shadow:0 1px 14px rgba(0,0,0,.95),0 0 4px rgba(0,0,0,.8)}.hero-dot.lsu-scope-home{width:8px;height:8px;border-radius:50%;background:var(--lsu-red);animation:lsuPulse 2.4s ease-in-out infinite;flex:0 0 auto}.hero-copy.lsu-scope-home h1.lsu-scope-home{margin:0;font-family:var(--lsu-display);font-size:clamp(24px,8vw,190px);line-height:1.05;letter-spacing:.02em;text-transform:uppercase;max-width:1100px;white-space:nowrap}.hero-copy.lsu-scope-home h1.lsu-scope-home .hero-kicker.lsu-scope-home{display:block;margin-bottom:26px;font-family:var(--lsu-body);line-height:1.4;white-space:normal;color:#ffffffb8;text-shadow:0 1px 14px rgba(0,0,0,.95),0 0 4px rgba(0,0,0,.8)}.hero-base.lsu-scope-home{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:32px;border-top:1px solid var(--lsu-line);padding-top:26px}.hero-base.lsu-scope-home p.lsu-scope-home{margin:0;max-width:480px;font-size:18px;line-height:1.6;color:#ffffffb8}.hero-actions.lsu-scope-home{display:flex;gap:14px;flex-wrap:wrap}@media(max-width:1080px){.hero-actions.lsu-scope-home{display:none}}.marquee-band.lsu-scope-home{position:relative;z-index:4;background:var(--lsu-black);border-top:1px solid var(--lsu-line-soft);border-bottom:1px solid var(--lsu-line-soft);overflow:hidden}.marquee.lsu-scope-home{display:flex;gap:56px;padding:16px 0;white-space:nowrap;font-family:var(--lsu-display);font-size:15px;letter-spacing:.24em;text-transform:uppercase;color:#ffffff73;width:max-content;animation:lsuMarquee 60s linear infinite;will-change:transform}.marquee.lsu-scope-home>.lsu-scope-home{flex:none}@keyframes lsuMarquee{to{transform:translate(-50%)}}.marquee.lsu-scope-home .slash.lsu-scope-home{color:var(--lsu-red)}.lapscroll.lsu-scope-home{position:relative;background:var(--lsu-black)}.lap-inner.lsu-scope-home{position:relative;min-height:100vh;overflow:hidden;display:flex;align-items:center;padding-block:clamp(40px,5vw,72px)}.lap-photo.lsu-scope-home{position:absolute;inset:-10% 0;background-image:url(/assets/lsu/images/rappid-65.webp);background-size:cover;background-position:center;filter:grayscale(1) contrast(1.2) brightness(.3);opacity:.5}.lap-scrim.lsu-scope-home{position:absolute;inset:0;background:linear-gradient(to bottom,#000000f2,#00000080 50%,#000000f2)}.lap-grid.lsu-scope-home{position:relative;z-index:2;width:100%;padding:0 var(--lsu-pad-x);display:grid;grid-template-columns:1.15fr 1fr;gap:64px;align-items:center}.lap-kicker.lsu-scope-home{margin-bottom:22px}.lap-readouts.lsu-scope-home{display:flex;align-items:flex-start;gap:24px;flex-wrap:wrap}.seg.lsu-scope-home{position:relative;display:inline-block}.seg-ghost.lsu-scope-home{color:#ffffff14}.seg-live.lsu-scope-home{position:absolute;left:0;top:0;color:var(--lsu-white);text-shadow:0 0 16px rgba(255,255,255,.5),0 0 52px rgba(255,255,255,.2)}.seg-ghost.lsu-scope-home,.seg-live.lsu-scope-home{font-family:var(--lsu-seg);font-variant-numeric:tabular-nums}.seg-ghost-red.lsu-scope-home{color:#ff2a1a17}.seg-live-red.lsu-scope-home{color:var(--lsu-seg-red);text-shadow:0 0 18px rgba(255,42,26,.75),0 0 60px rgba(255,42,26,.35)}.seg-lap.lsu-scope-home{font-size:min(16vw,168px,18vh);line-height:.9}.seg-live.lsu-scope-home.seg-lap{inset:0}.seg-clock.lsu-scope-home{font-size:clamp(24px,3vw,46px);line-height:1;white-space:nowrap}.seg-live.lsu-scope-home.seg-clock{text-shadow:0 0 14px rgba(255,42,26,.7)}.seg-souls.lsu-scope-home{font-size:clamp(52px,7.5vw,110px);line-height:1}.seg-km.lsu-scope-home{font-size:clamp(30px,4vw,58px);line-height:1;white-space:nowrap}.seg-live.lsu-scope-home.seg-km{text-shadow:0 0 14px rgba(255,255,255,.45),0 0 44px rgba(255,255,255,.18)}.seg-unit.lsu-scope-home{font-family:var(--lsu-body);font-size:.35em;letter-spacing:.2em;color:var(--lsu-dim-2)}.seg-label.lsu-scope-home{font-size:10px;letter-spacing:.3em;text-transform:uppercase;color:#ffffff52;margin-bottom:8px}.seg-label-red.lsu-scope-home{color:#ff2a1aa6}.lap-elapsed.lsu-scope-home{margin-top:14px;padding-top:14px;border-top:1px solid rgba(255,42,26,.25);display:flex;align-items:baseline;gap:12px}.lap-elapsed.lsu-scope-home .seg-label.lsu-scope-home{margin-bottom:0;color:#ff2a1a99}.lap-side.lsu-scope-home{padding-top:14px;display:flex;flex-direction:column;gap:18px}.lap-meta.lsu-scope-home{display:flex;flex-direction:column;gap:6px;font-size:11px;letter-spacing:.26em;text-transform:uppercase;color:#ffffff52;text-shadow:0 0 10px rgba(255,255,255,.15)}.lap-meta-live.lsu-scope-home{color:#ffffffd9;text-shadow:0 0 10px rgba(255,255,255,.25)}.attr.lsu-scope-home{margin-top:34px}.attr-head.lsu-scope-home{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 16px;font-size:9px;letter-spacing:.28em;text-transform:uppercase;color:#ffffff4d;margin-bottom:8px}.attr.lsu-scope-home canvas.lsu-scope-home{cursor:crosshair;display:block;width:100%;height:44px;filter:drop-shadow(0 0 8px rgba(255,255,255,.28)) drop-shadow(0 0 5px rgba(255,42,26,.3))}.lap-copy.lsu-scope-home{display:flex;flex-direction:column;gap:26px}.lap-copy.lsu-scope-home p.lsu-scope-home{white-space:pre-line}.lap-copy.lsu-scope-home h2.lsu-scope-home{margin:0;font-family:var(--lsu-display);font-size:clamp(34px,4.2vw,62px);line-height:1.05;text-transform:uppercase;letter-spacing:.02em}.lap-copy.lsu-scope-home p.lsu-scope-home{margin:0;font-size:18px;line-height:1.6;color:var(--lsu-dim-2);max-width:430px;min-height:116px}.lap-facts.lsu-scope-home{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--lsu-line);border:1px solid var(--lsu-line)}.lap-facts.lsu-scope-home>div.lsu-scope-home{background:var(--lsu-black);padding:20px 22px}.lap-fact-l.lsu-scope-home{font-size:10px;letter-spacing:.26em;text-transform:uppercase;color:#ffffff4d;margin-bottom:8px}.lap-fact-v.lsu-scope-home{font-family:var(--lsu-display);font-size:22px;text-transform:uppercase}.y87scroll.lsu-scope-home{position:relative;background:var(--lsu-black);border-top:1px solid var(--lsu-line-soft)}.y87-sticky.lsu-scope-home{position:relative;min-height:62vh;overflow:hidden;display:flex;align-items:flex-start;justify-content:flex-start;padding:clamp(56px,8vh,80px) 0 clamp(40px,14vh,140px)}.y87-bg.lsu-scope-home{position:absolute;inset:0}.y87-poster.lsu-scope-home{position:absolute;inset:0;background-image:url(/assets/lsu/images/yard87-poster.jpg);background-size:cover;background-position:38% 30%}.y87-vid.lsu-scope-home{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:38% 30%}.y87-top.lsu-scope-home{position:absolute;inset:0;background:linear-gradient(to bottom,#000000d9,#0000 30% 68%,#00000080)}.y87-shell.lsu-scope-home{position:relative;width:100%;padding:0 var(--lsu-pad-x);display:flex;justify-content:center}.y87-col.lsu-scope-home{width:100%;max-width:var(--lsu-max);display:flex;flex-direction:column;gap:clamp(18px,2.6vh,28px)}.y87-stage.lsu-scope-home{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.y87-chapter.lsu-scope-home{display:flex;flex-direction:column;gap:10px;padding:20px;background:#0000008c;border:1px solid rgba(255,255,255,.16);backdrop-filter:blur(3px)}.y87-chapter.lsu-scope-home h2.lsu-scope-home{margin:0;font-family:var(--lsu-display);font-size:clamp(20px,2.2vw,30px);line-height:1;text-transform:uppercase;text-shadow:0 2px 30px rgba(0,0,0,.9)}.y87-chapter.lsu-scope-home p.lsu-scope-home{margin:0;font-size:14px;line-height:1.55;color:var(--lsu-dim-1);text-shadow:0 1px 12px rgba(0,0,0,.8)}@media(max-width:900px){.y87-stage.lsu-scope-home{grid-template-columns:1fr 1fr}.y87-vid.lsu-scope-home{object-position:42% 30%}.y87-poster.lsu-scope-home{background-position:42% 30%}}@media(max-width:560px){.y87-stage.lsu-scope-home{grid-template-columns:1fr}}.recap.lsu-scope-home{position:relative;padding:clamp(66px,8.6vw,120px) var(--lsu-pad-x);background:var(--lsu-black)}.recap-head.lsu-scope-home{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:22px 30px;margin-bottom:52px;border-bottom:1px solid var(--lsu-line);padding-bottom:22px}.recap-title.lsu-scope-home{margin:0;font-family:var(--lsu-display);font-size:clamp(38px,5.5vw,84px);line-height:1.05;text-transform:uppercase}.recap-meta.lsu-scope-home{display:flex;flex-direction:column;align-items:flex-end;gap:14px;padding-bottom:8px}.recap-sub.lsu-scope-home{font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--lsu-dim-2)}.recap-link.lsu-scope-home{display:inline-flex;align-items:center;gap:10px;font-size:12px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--lsu-red);border-bottom:1px solid var(--lsu-red);padding-bottom:4px}.recap-link.lsu-scope-home:hover{color:var(--lsu-white);border-color:var(--lsu-white)}.carousel-track.lsu-scope-home{display:flex;gap:20px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;overscroll-behavior-x:contain}.carousel-track.lsu-scope-home::-webkit-scrollbar{display:none}.carousel-track.lsu-scope-home:focus-visible{outline:2px solid var(--lsu-red);outline-offset:4px}.carousel-slide.lsu-scope-home{flex:0 0 calc((100% - 40px) / 3);scroll-snap-align:start;aspect-ratio:3 / 4;overflow:hidden}.carousel-slide.lsu-scope-home img.lsu-scope-home{display:block;width:100%;height:100%;object-fit:cover;object-position:center}.carousel-nav.lsu-scope-home{display:flex;align-items:center;justify-content:center;gap:22px;margin-top:26px}.carousel-btn.lsu-scope-home{width:56px;height:56px;border:1px solid var(--lsu-line);background:transparent;color:var(--lsu-white);font-size:22px;cursor:pointer}.carousel-btn.lsu-scope-home:hover:not(:disabled){background:var(--lsu-red);border-color:var(--lsu-red);color:var(--lsu-white)}.carousel-btn.lsu-scope-home:disabled{opacity:.3;cursor:default}.carousel-count.lsu-scope-home{min-width:5ch;text-align:center;font-family:var(--lsu-mono);font-size:13px;letter-spacing:.16em;color:var(--lsu-dim-2)}@media(max-width:1000px){.carousel-slide.lsu-scope-home{flex-basis:calc((100% - 20px)/2)}}@media(max-width:640px){.carousel-slide.lsu-scope-home{flex-basis:100%}.carousel-track.lsu-scope-home{gap:12px}}@media(max-width:900px){.recap-head.lsu-scope-home>div.lsu-scope-home{align-items:flex-start}}.duelscroll.lsu-scope-home{position:relative;background:var(--lsu-black);border-top:1px solid var(--lsu-line-soft)}.duel-sticky.lsu-scope-home{position:relative;min-height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:flex-start;padding-block:clamp(40px,5vw,72px)}.duel-bg.lsu-scope-home{position:absolute;inset:-26% 0;background-image:url(/assets/lsu/images/rappid-13-1080.webp);background-size:cover;background-position:center 30%;opacity:.22;filter:grayscale(1) contrast(1.15);will-change:transform}.duel-scrim.lsu-scope-home{position:absolute;inset:0;background:radial-gradient(90% 75% at 50% 46%,#00000052,#000000e6),linear-gradient(to bottom,#000000e6,#0003 26% 72%,#000000eb)}.duel-shell.lsu-scope-home{position:relative;width:100%;max-width:var(--lsu-max);margin:0 auto;padding:0 var(--lsu-pad-x)}.duel-kicker.lsu-scope-home{margin-bottom:18px}.duel-title.lsu-scope-home{margin-bottom:46px}.duel-bars.lsu-scope-home{display:flex;flex-direction:column;gap:38px}.duel-head.lsu-scope-home{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px;gap:16px;flex-wrap:wrap}.duel-id.lsu-scope-home{display:flex;align-items:baseline;gap:16px}.duel-ed.lsu-scope-home{font-family:var(--lsu-display);font-size:20px;text-transform:uppercase;color:#ffffffd9}.duel-ed-2.lsu-scope-home{color:var(--lsu-red)}.duel-km.lsu-scope-home{font-family:var(--lsu-seg);font-size:15px;color:var(--lsu-dim-1)}.duel-km-2.lsu-scope-home{color:var(--lsu-red)}.duel-unit.lsu-scope-home{font-family:var(--lsu-mono);font-size:12px;letter-spacing:.12em}.duel-note.lsu-scope-home{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--lsu-dim-3)}.duel-track.lsu-scope-home{position:relative;height:34px;background:#ffffff12}.duel-fill.lsu-scope-home{position:absolute;left:0;top:0;bottom:0;width:0%}.duel-fill-1.lsu-scope-home{background:#ffffffd9}.duel-fill-2.lsu-scope-home{background:var(--lsu-red)}.duel-yard.lsu-scope-home{position:absolute;left:8px;top:50%;transform:translateY(-50%);font-family:var(--lsu-seg);font-size:18px}.duel-yard-1.lsu-scope-home{color:#000;mix-blend-mode:difference;filter:invert(1)}.duel-yard-2.lsu-scope-home{color:var(--lsu-white);text-shadow:0 0 10px rgba(0,0,0,.6)}.duel-mark.lsu-scope-home{position:relative;height:0}.duel-mark-line.lsu-scope-home{position:absolute;left:95.74%;top:-152px;width:1px;height:170px;background:#ff2a1a80}.duel-mark-label.lsu-scope-home{position:absolute;left:95.74%;top:22px;transform:translate(-100%);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:#ff2a1acc;white-space:nowrap;padding-right:8px}.duel-text.lsu-scope-home{margin:6px 0 0;max-width:560px;font-size:16px;line-height:1.6;color:var(--lsu-dim-2);min-height:52px}.attr-band.lsu-scope-home .band-bg.lsu-scope-home{inset:-8% 0;background-image:url(/assets/lsu/images/statement-1080.webp);background-size:cover;background-position:center 44%;filter:brightness(.6)}@media(max-width:760px){.attr-band.lsu-scope-home .band-bg.lsu-scope-home{background-image:url(/assets/lsu/images/statement-720.webp);background-position:center 30%}}.attr-band.lsu-scope-home .band-scrim.lsu-scope-home{background:linear-gradient(to top,#000000d9,#00000026 60%,#00000040)}.attr-band.lsu-scope-home .band-copy.lsu-scope-home{align-self:flex-end;padding-bottom:clamp(24px,5vw,64px)}.attr-band.lsu-scope-home{height:85vh;min-height:480px}.attr-copy.lsu-scope-home{font-size:clamp(28px,3.8vw,56px);letter-spacing:.02em}@media(max-width:760px){.lap-inner.lsu-scope-home{min-height:0}.lap-facts.lsu-scope-home{display:none}.lap-readouts.lsu-scope-home{gap:16px}.lap-side.lsu-scope-home{flex-direction:row;align-items:baseline;gap:26px;padding-top:6px;flex-wrap:wrap}}@media(prefers-reduced-motion:reduce){.rig.lsu-scope-home,.hero-mist.lsu-scope-home,.hero-flash.lsu-scope-home,.hero-dot.lsu-scope-home{animation:none}}
2
3/* Moved out of stx-site.css, which every route downloads and none of these
4 can match: the duel bars and the deferral hints belong to this page. */
5.duel-fill-1.lsu-scope-home{width:71.28%}
6.duel-fill-2.lsu-scope-home{width:100%}
7/* Let the browser defer distant story panels and their background photos.
8 Explicitly sized bands keep their authored height. Story panels remember
9 their measured height after their first visit; one viewport reserves space
10 before they approach the viewport. Unsupported browsers render normally. */
11.lapscroll.lsu-scope-home,.duelscroll.lsu-scope-home{content-visibility:auto;contain-intrinsic-block-size:auto 100svh}
12.attr-band.lsu-scope-home{content-visibility:auto}
resources/assets/styles/site/next-loop.cssmodified+4-0
Changes to resources/assets/styles/site/next-loop.css
@@ -1,1 +1,5 @@
11.enter.lsu-scope-next-loop{position:relative;min-height:640px;height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:center}.enter-bg.lsu-scope-next-loop{position:absolute;inset:-20% 0;background-image:url(/assets/lsu/images/rappid-20.webp);background-size:cover;background-position:center 40%;filter:grayscale(1) brightness(.45)}.enter-scrim.lsu-scope-next-loop{position:absolute;inset:0;background:radial-gradient(80% 70% at 50% 50%,#00000059,#000000f2)}.enter-copy.lsu-scope-next-loop{position:relative;z-index:3;text-align:center;padding:0 var(--lsu-pad-x);display:flex;flex-direction:column;align-items:center;gap:30px}.seg.lsu-scope-next-loop{position:relative;display:inline-block}.seg-ghost.lsu-scope-next-loop,.seg-live.lsu-scope-next-loop{font-family:var(--lsu-seg);font-variant-numeric:tabular-nums;font-size:clamp(56px,12vw,160px);line-height:1;white-space:nowrap}.seg-ghost.lsu-scope-next-loop{color:#ffffff14}.seg-live.lsu-scope-next-loop{position:absolute;left:0;top:0;color:var(--lsu-white);text-shadow:0 0 16px rgba(255,255,255,.5),0 0 52px rgba(255,255,255,.2)}.enter-sub.lsu-scope-next-loop{margin-top:-18px;font:13px var(--lsu-mono);letter-spacing:.24em;text-transform:uppercase;color:var(--lsu-dim-1)}.enter-title.lsu-scope-next-loop{margin:0;font-family:var(--lsu-display);font-size:clamp(44px,8vw,132px);line-height:1;letter-spacing:.02em;text-transform:uppercase}.enter-copy.lsu-scope-next-loop p.lsu-scope-next-loop{margin:0;max-width:560px;font-size:17px;line-height:1.6;color:#ffffffb8}
2
3/* Moved out of stx-site.css: this sheet is loaded by the two pages that
4 have an .enter band, and no others. */
5.enter.lsu-scope-next-loop{content-visibility:auto}
resources/assets/styles/site/stx-site.cssmodified+1-18
Changes to resources/assets/styles/site/stx-site.css
@@ -1,18 +1,1 @@
1.lsu-skip{position:fixed;left:1rem;top:-5rem;z-index:200;background:#fff;color:#000;padding:1rem}.lsu-skip:focus{top:1rem}main:focus{outline:none}.nav-links{gap:clamp(12px,1.6vw,28px)}.coaching-hero{position:relative;padding:clamp(140px,18vw,240px) clamp(18px,5vw,40px) 100px;background:linear-gradient(90deg,#000e,#0003),url('/assets/lsu/images/hero-desktop.webp') 50% 35%/cover}.coaching-hero h1{max-width:13ch;font:400 clamp(48px,8vw,120px)/1.05 var(--lsu-display);text-transform:uppercase;letter-spacing:.02em;margin:24px 0}.coaching-hero p{max-width:54ch;color:#ffffffb3;font:400 19px/1.6 var(--lsu-body)}.coaching-body{max-width:1360px;margin:auto;padding:clamp(50px,7vw,100px) clamp(18px,5vw,40px)}.coaching-steps{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #ffffff24;border-bottom:1px solid #ffffff24;margin:3rem 0}.coaching-steps article{padding:2rem;border-right:1px solid #ffffff24}.coaching-steps article:last-child{border:0}.coaching-steps h2{font:400 30px/1.2 var(--lsu-display);text-transform:uppercase}.coaching-steps p{color:#ffffffa6;line-height:1.7}.coaching-note{padding:2rem;border-left:3px solid var(--lsu-red);background:#0d0d0f}.coaching-note h2{font:400 36px var(--lsu-display);text-transform:uppercase}.coaching-note p{max-width:65ch;color:#ffffffa6;line-height:1.7}.race-portal{max-width:720px;margin:auto;padding:clamp(24px,5vw,64px);border:1px solid #ffffff24;background:#0d0d0f}.race-portal label{display:block;font:600 12px var(--lsu-body);text-transform:uppercase;letter-spacing:.12em;margin:1rem 0 .5rem}.race-portal input,.race-portal textarea,.race-portal select{display:block;width:100%;padding:1rem;background:#050505;border:1px solid #ffffff40;color:#fff;font:inherit}.race-portal .btn{margin-top:1.5rem}.race-portal [role=alert]{color:#ff928f}.race-portal h2{font:400 36px var(--lsu-display);text-transform:uppercase}.race-portal p{line-height:1.65}.race-tabs{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:2rem}.race-tabs button{background:transparent;color:#fff;border:0;border-bottom:2px solid #ffffff40;padding:.75rem;cursor:pointer}.race-tabs button[aria-selected=true]{border-color:#dd0f15}.race-portal .field-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.lsu-scroll-gallery{overflow:auto;scroll-snap-type:x mandatory}.lsu-scroll-gallery>*{scroll-snap-align:start}@media(max-width:700px){.coaching-hero{background-image:linear-gradient(90deg,#000d,#0006),url('/assets/lsu/images/hero-mobile.webp')}.coaching-steps{grid-template-columns:1fr}.coaching-steps article{border-right:0;border-bottom:1px solid #ffffff24}.race-portal .field-row{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
2
3.lsu-globe-stage{position:relative;width:100%;height:100%;min-height:420px}.lsu-globe-fallback{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}.lsu-event-dot{display:block;width:14px;height:14px;border-radius:50%;background:#dd0f15;border:2px solid white;box-shadow:0 0 0 6px #dd0f1540}.ts-map{background:transparent}.lsu-globe-stage .ts-map{position:absolute;inset:0}.lsu-globe-stage:has([data-ts-map])>.lsu-globe-fallback{visibility:hidden}
4
5.hour-dial .rest-ring{width:100%;height:auto;aspect-ratio:1;transform:rotate(-90deg)}
6
7.duel-fill-1.lsu-scope-home{width:71.28%}.duel-fill-2.lsu-scope-home{width:100%}
8@supports(animation-timeline:view()){.duelscroll{view-timeline-name:--duel;view-timeline-axis:block}.duel-fill{transform-origin:left;animation:lsu-grow linear both;animation-timeline:--duel;animation-range:entry 20% exit 65%}@keyframes lsu-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}}
9@media(prefers-reduced-motion:reduce){.duel-fill{animation:none}}
10
11.lsu-host-dialog[data-stx-dialog]{z-index:200}.lsu-host-dialog .sr-dialog{color:var(--lsu-white,#fff);background:#080808;padding:0;border:1px solid #333;border-radius:0}
12
13/* Let the browser defer distant story panels and their background photos.
14 Explicitly sized bands keep their authored height. Story panels remember
15 their measured height after their first visit; one viewport reserves space
16 before they approach the viewport. Unsupported browsers render normally. */
17.lapscroll.lsu-scope-home,.duelscroll.lsu-scope-home{content-visibility:auto;contain-intrinsic-block-size:auto 100svh}
18.attr-band.lsu-scope-home,.enter.lsu-scope-next-loop{content-visibility:auto}
1.lsu-skip{position:fixed;left:1rem;top:-5rem;z-index:200;background:#fff;color:#000;padding:1rem}.lsu-skip:focus{top:1rem}main:focus{outline:none}.nav-links{gap:clamp(12px,1.6vw,28px)}.race-portal{max-width:720px;margin:auto;padding:clamp(24px,5vw,64px);border:1px solid #ffffff24;background:#0d0d0f}.race-portal label{display:block;font:600 12px var(--lsu-body);text-transform:uppercase;letter-spacing:.12em;margin:1rem 0 .5rem}.race-portal input,.race-portal textarea,.race-portal select{display:block;width:100%;padding:1rem;background:#050505;border:1px solid #ffffff40;color:#fff;font:inherit}.race-portal .btn{margin-top:1.5rem}.race-portal [role=alert]{color:#ff928f}.race-portal h2{font:400 36px var(--lsu-display);text-transform:uppercase}.race-portal p{line-height:1.65}.race-tabs{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:2rem}.race-tabs button{background:transparent;color:#fff;border:0;border-bottom:2px solid #ffffff40;padding:.75rem;cursor:pointer}.race-tabs button[aria-selected=true]{border-color:#dd0f15}.race-portal .field-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.lsu-scroll-gallery{overflow:auto;scroll-snap-type:x mandatory}.lsu-scroll-gallery>*{scroll-snap-align:start}@media(max-width:700px){.race-portal .field-row{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}.lsu-globe-stage{position:relative;width:100%;height:100%;min-height:420px}.lsu-globe-fallback{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}.lsu-event-dot{display:block;width:14px;height:14px;border-radius:50%;background:#dd0f15;border:2px solid white;box-shadow:0 0 0 6px #dd0f1540}.ts-map{background:transparent}.lsu-globe-stage .ts-map{position:absolute;inset:0}.lsu-globe-stage:has([data-ts-map])>.lsu-globe-fallback{visibility:hidden}.hour-dial .rest-ring{width:100%;height:auto;aspect-ratio:1;transform:rotate(-90deg)}@supports(animation-timeline:view()){.duelscroll{view-timeline-name:--duel;view-timeline-axis:block}.duel-fill{transform-origin:left;animation:lsu-grow linear both;animation-timeline:--duel;animation-range:entry 20% exit 65%}@keyframes lsu-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}}@media(prefers-reduced-motion:reduce){.duel-fill{animation:none}}.lsu-host-dialog[data-stx-dialog]{z-index:200}.lsu-host-dialog .sr-dialog{color:var(--lsu-white,#fff);background:#080808;padding:0;border:1px solid #333;border-radius:0}
tests/styles.test.tsadded+43-0
Changes to tests/styles.test.ts
@@ -0,0 +1,43 @@
1import { describe, expect, it } from 'bun:test'
2import { readdirSync } from 'node:fs'
3
4/**
5 * stx-site.css is the one sheet every route downloads. It drifted into being
6 * the place page-specific rules went, and 7 of its 11.5 KB ended up being
7 * /coaching rules served to twenty-four pages that cannot match them.
8 */
9
10const siteWide = await Bun.file('resources/assets/styles/site/stx-site.css').text()
11
12/** Selectors a rule can be keyed on, one per top-level rule. */
13function selectors(css: string): string[] {
14 return [...css.matchAll(/(^|[}\n])([^{}@][^{}]*)\{/g)]
15 .flatMap(match => match[2]!.split(','))
16 .map(selector => selector.trim())
17 .filter(Boolean)
18}
19
20describe('the sheet every page downloads', () => {
21 it('carries nothing keyed to one page', () => {
22 // Page sheets live beside it and are named for their route.
23 const pages = readdirSync('resources/assets/styles/site')
24 .filter(name => name.endsWith('.css') && !['base.css', 'stx-site.css'].includes(name))
25 .map(name => name.slice(0, -'.css'.length))
26
27 const offenders = selectors(siteWide).filter(selector =>
28 pages.some(page => selector.includes(`.${page}-`) || selector.includes(`.lsu-scope-${page}`)))
29
30 expect(offenders).toEqual([])
31 })
32
33 it('stays small enough to be worth sending everywhere', () => {
34 expect(siteWide.length).toBeLessThan(5000)
35 })
36
37 it('still carries what every page needs', () => {
38 // The skip link, the shared portal chrome, and the one global motion rule.
39 expect(siteWide).toContain('.lsu-skip')
40 expect(siteWide).toContain('.race-portal')
41 expect(siteWide).toContain('prefers-reduced-motion')
42 })
43})