/* Lawrence Cooper portfolio V5. One stylesheet, plain CSS custom properties.
   Ported from the approved Claude Design V5 bundle (System Sheet) with tweaks T1 to T6 (Oct 12, 2026). */
@font-face{font-family:Satoshi;src:url('fonts/Satoshi-Variable.woff2') format('woff2');font-weight:300 900;font-style:normal;font-display:swap}
@font-face{font-family:Satoshi;src:url('fonts/Satoshi-VariableItalic.woff2') format('woff2');font-weight:300 900;font-style:italic;font-display:swap}

:root{
  --heather-100:#E4E3E0; --heather-200:#D3D2CE; --heather-300:#BEBDB8;
  --graphite:#4A4946; --ink:#0D0D0D; --orange:#FF5F15; --orange-text:#A63D00;
  /* Spacing scale: no other values. */
  --s4:4px; --s8:8px; --s12:12px; --s16:16px; --s24:24px; --s32:32px; --s48:48px; --s72:72px; --s112:112px;
  /* Stepped, so every value sits on the scale (no fluid in-between values). */
  --margin:16px; --section:48px; --field:24px; --pad-x:16px; --frame-y:24px; --inset:16px; --inset-b:24px;
  --max:1440px;
  --ease:150ms ease;
}
@media (min-width:601px){:root{--margin:24px;--field:32px;--pad-x:32px;--frame-y:48px;--inset:24px}}
@media (min-width:1280px){:root{--margin:32px;--section:72px;--field:48px;--pad-x:48px;--frame-y:72px;--inset:32px;--inset-b:32px}}
*{box-sizing:border-box}
html{background:var(--heather-100);scroll-padding-top:112px;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--heather-100);color:var(--ink);font:400 16px/1.6 Satoshi,system-ui,sans-serif;font-synthesis:none;-webkit-font-smoothing:antialiased}
img,video{display:block}
button{font:inherit;color:inherit}
h1,h2,h3{text-wrap:balance}
p{text-wrap:pretty}
.sr-only{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;margin:0}
.skip-link{position:absolute;left:16px;top:-80px;z-index:300;padding:12px 16px;background:var(--ink);color:var(--heather-100)}
.skip-link:focus{top:16px}
:focus-visible{outline:2px solid var(--ink);outline-offset:2px;box-shadow:0 0 0 4px var(--orange)}

/* T1. Text links: orange underline on hover, keyboard focus and press. text-decoration only, so nothing shifts.
   Words on heather stay ink. Hover is gated so touch has no sticky state. */
a{color:var(--ink);text-decoration:underline 2px transparent;text-underline-offset:4px;transition:text-decoration-color var(--ease),color var(--ease)}
a:focus-visible,a:active{text-decoration-color:var(--orange)}
@media (hover:hover){a:hover{text-decoration-color:var(--orange)}}
a.plain,a.plain:hover,a.media{text-decoration:none}
/* On ink the words themselves may turn orange (6.4:1). */
@media (hover:hover){.on-ink a:not(.btn):hover{color:var(--orange)!important}}
.on-ink a:not(.btn):focus-visible,.on-ink a:not(.btn):active{color:var(--orange)!important}

.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--margin)}

/* Header (V4 as built: monogram with WIP note, centered wordmark, Work and Contact). */
.site-head{position:sticky;top:0;z-index:50;height:88px;background:var(--heather-100);border-bottom:1px solid var(--heather-300);transition:background 200ms ease}
.site-head.scrolled{background:rgba(228,227,224,.92);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
.head-grid{max-width:var(--max);height:100%;margin:0 auto;padding:0 var(--margin);display:grid;grid-template-columns:1fr auto 1fr;align-items:center}
.profile{position:relative;justify-self:start}
.avatar-hit{display:grid;place-items:center;min-width:44px;min-height:44px}
.avatar{width:52px;height:52px;display:grid;place-items:center;border-radius:50%;background:#fff;border:2px solid var(--heather-100);outline:2px solid var(--ink)}
.avatar img{width:72%;height:72%;object-fit:contain}
.wip{position:absolute;top:-8px;left:32px;white-space:nowrap;padding:6px 12px;border-radius:16px;background:#fff;color:var(--ink);font-size:13px;font-weight:700;line-height:1;box-shadow:0 1px 2px rgba(0,0,0,.12);pointer-events:none}
.wip::before,.wip::after{content:"";position:absolute;background:#fff;border-radius:50%}
.wip::before{width:9px;height:9px;bottom:-6px;left:12px}
.wip::after{width:5px;height:5px;bottom:-12px;left:8px}
.logo{display:flex;align-items:center;min-height:44px}
.logo img{height:26px;width:auto;max-width:100%}
.site-nav{justify-self:end;display:flex;gap:24px;font-size:15px;font-weight:500}
.site-nav a{padding:8px 0;display:inline-flex;align-items:center;min-height:44px}
/* T1: current page in the header takes an orange underline, 2 px, 6 px offset. */
.site-nav a[aria-current="page"]{text-decoration-color:var(--orange);text-underline-offset:6px}
.menu-btn{display:none;justify-self:end;min-height:44px;min-width:44px;padding:0 0 0 16px;border:0;background:none;font:500 13px/1 Satoshi,system-ui,sans-serif;color:var(--ink);cursor:pointer}
.menu-sheet{position:fixed;inset:0;z-index:100;background:var(--heather-100);padding:16px;display:flex;flex-direction:column}
.menu-sheet[hidden]{display:none}
.menu-sheet .menu-top{display:flex;justify-content:flex-end}
.menu-sheet nav{display:flex;flex-direction:column;align-items:flex-start;gap:32px;padding-top:72px;font-size:44px;line-height:1.08;font-weight:700;letter-spacing:-.02em}
@media (max-width:1000px){.logo img{height:22px}}
@media (max-width:600px){
  .site-head{height:64px}
  .avatar{width:40px;height:40px}
  .wip{left:20px}
  .logo img{height:16px}
  .site-nav{display:none}
  .menu-btn{display:block}
}

/* Footer */
.site-foot{border-top:1px solid var(--heather-300);margin-top:72px}
.site-foot .wrap{padding-top:48px;padding-bottom:72px;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:32px}
.foot-contact{display:flex;flex-direction:column;gap:16px;min-width:0}
.foot-label{font-size:13px;line-height:1.4;font-weight:500;color:var(--graphite)}
.foot-mail{display:inline-flex;align-items:center;min-height:44px;font-size:clamp(24px,3vw,44px);line-height:1.08;letter-spacing:-.02em;font-weight:700;overflow-wrap:anywhere}
.foot-links{display:flex;flex-wrap:wrap;gap:0 24px;font-size:15px;font-weight:500}
.foot-links a{min-height:44px;display:inline-flex;align-items:center}
.foot-links a.quiet{color:var(--graphite)}
.home .site-foot,.work .site-foot{margin-top:112px}

/* Type roles */
.display{margin:0;max-width:1100px;font-size:clamp(40px,5vw,72px);line-height:1.02;letter-spacing:-.025em;font-weight:700}
.h1{margin:0;font-size:clamp(30px,3vw,44px);line-height:1.08;letter-spacing:-.02em;font-weight:700}
.h2{margin:0;font-size:24px;line-height:1.2;letter-spacing:-.01em;font-weight:700}
.h3{margin:0;font-size:18px;line-height:1.3;font-weight:700}
.lede{margin:0;max-width:60ch;font-size:18px;line-height:1.5;font-weight:500}
.body{margin:0;max-width:68ch;font-size:16px;line-height:1.6}
.meta{font-size:13px;line-height:1.4;font-weight:500;color:var(--graphite)}

/* Home and Work */
.index-main{padding-top:48px}
.work-title{display:flex;align-items:baseline;gap:12px}
.toolbar{margin-top:16px;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:0 24px}
.filters{display:flex;flex-wrap:wrap;gap:0 24px}
.filters a{min-height:44px;min-width:44px;display:inline-flex;align-items:center;gap:4px;font-size:15px;font-weight:500;color:var(--graphite)}
.filters a[aria-current="true"]{color:var(--ink);text-decoration-color:var(--orange)}
.filters .count{font-size:11px;color:var(--graphite)}
.views{display:flex;gap:16px;font-size:15px;font-weight:500}
.views button{min-height:44px;min-width:44px;padding:0;border:0;background:none;cursor:pointer;color:var(--graphite);text-decoration:underline 2px transparent;text-underline-offset:4px;transition:text-decoration-color var(--ease)}
.views button[aria-pressed="true"]{color:var(--ink);text-decoration-color:var(--ink)}
@media (hover:hover){.views button:hover{text-decoration-color:var(--orange)}}
.views button:focus-visible,.views button:active{text-decoration-color:var(--orange)}
.grid{margin-top:16px;display:flex;flex-wrap:wrap;gap:24px 12px;align-items:flex-start}
.grid.js-rows{display:flex;flex-direction:column;gap:24px}
.grow{display:flex;gap:12px;align-items:flex-start}
.feature{display:flex;gap:12px;align-items:flex-start}
.feature-right{display:flex;flex-direction:column;gap:24px;min-width:0}
.feature-right .grow{gap:12px}
/* No-JS fallback: flex-wrap with flex-grow equal to the aspect ratio. */
.card{display:block;flex:var(--r) 1 calc(var(--r) * 300px);min-width:0;color:var(--ink);text-decoration:none}
.grid.js-rows .card{flex:none}
.card img{width:100%;height:auto;max-width:calc(var(--nw) * 1px);background:var(--heather-200)}
.card-name{display:block;margin-top:8px;font-size:14px;line-height:1.4;font-weight:700;text-decoration:underline 2px transparent;text-underline-offset:4px;transition:text-decoration-color var(--ease)}
.card-role{display:block;font-size:13px;line-height:1.4;font-weight:500;color:var(--graphite)}
@media (hover:hover){.card:hover .card-name{text-decoration-color:var(--orange)}}
.card:focus-visible .card-name,.card:active .card-name{text-decoration-color:var(--orange)}
.card[hidden]{display:none}
@media (max-width:600px){.grid,.grid.js-rows{flex-direction:column;flex-wrap:nowrap;gap:24px}.card{flex:none;width:100%}}
.index-table{margin-top:16px;font-size:15px;line-height:1.4}
.index-table [role=row]{display:flex;flex-wrap:wrap;gap:4px 24px;padding:16px 0;border-top:1px solid var(--heather-300)}
.index-table .ihead{padding:12px 0;border-top:0;font-size:13px;font-weight:500;color:var(--graphite)}
.index-table .c1{flex:3 1 260px;font-weight:700}
.index-table .c2{flex:2 1 200px}
.index-table .c3{flex:2 1 160px;color:var(--graphite)}
.index-table .c4{flex:1 1 120px;color:var(--graphite)}
.index-table .ihead span{font-weight:500}
.index-table [role=row][hidden]{display:none}

/* Case pages: shared modules */
.back{padding-top:16px;font-size:13px;font-weight:500}
.back a,.pages-nav a{min-height:44px;display:inline-flex;align-items:center}
.case-head{margin-top:8px;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:24px}
.case-head .title{flex:1 1 480px;min-width:0}
.case-head .lede{margin-top:24px}
.case-head .sub{margin:12px 0 0}
.facts{flex:1 1 400px;max-width:664px;min-width:0;margin:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:16px 24px;font-size:13px;line-height:1.4}
.facts dt,.credits dt{font-weight:700}
.facts dd{margin:4px 0 0;font-weight:500}
.concept-tag{color:var(--graphite)}
.case-head .context{margin-top:16px}
.sec{margin-top:var(--section)}
.mod{margin-top:48px}
.rule{padding-top:16px;border-top:1px solid var(--heather-300)}
.sec-head{margin:0 0 24px}
.split{display:flex;flex-wrap:wrap;gap:12px 24px}
.split>.h2,.split>.left{flex:1 1 280px;margin:0}
.split>.body,.split>.right{flex:2 1 400px;margin:0}
.stack{display:flex;flex-direction:column;gap:12px}
/* Justified row: each item flex: ratio 1 calc(ratio x basis). Items in a line share one height, nothing cropped. */
.jrow{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start}
.jrow>.m{flex:var(--r) 1 calc(var(--r) * var(--bh,275px));min-width:0;max-width:calc(var(--nw) * 1px)}
.m,.full{display:block;text-decoration:none}
.m img,.full img{width:100%;height:auto}
.full img{max-width:calc(var(--nw) * 1px)}
/* Native-size field: a raster narrower than its slot sits centered in heather-200, never stretched. */
.framed{display:grid;place-items:center;background:var(--heather-200);padding:var(--frame-y) var(--pad-x);text-decoration:none}
.framed img{width:100%;height:auto;max-width:calc(var(--nw) * 1px)}
.field{background:var(--heather-200);padding:var(--field);min-width:0}
.field .body{margin-top:16px;max-width:52ch}
.tm{display:flex;flex-wrap:wrap;gap:12px;align-items:stretch}
.tm>.m{flex:0 1 calc(var(--nw) * 1px);align-self:flex-start}
.tm>.field{flex:1 1 320px}
.credits-sec{display:flex;flex-wrap:wrap;gap:12px 24px}
.credits-sec>.h2{flex:1 1 280px}
.credits{flex:2 1 400px;margin:0;display:grid;grid-template-columns:minmax(0,max-content) minmax(0,1fr);gap:12px 24px;font-size:13px;line-height:1.4}
.credits dd{margin:0;font-weight:500}
.next{margin-top:112px;padding-top:24px;border-top:1px solid var(--heather-300)}
.next .label{display:block;font-size:13px;line-height:1.4;font-weight:500;color:var(--graphite)}
.next a{display:inline-block;margin-top:8px;text-decoration:none}
.next .nname{display:block;font-size:clamp(30px,3vw,44px);line-height:1.08;letter-spacing:-.02em;font-weight:700;text-decoration:underline 2px transparent;text-underline-offset:6px;transition:text-decoration-color var(--ease)}
.next .nrole{display:block;margin-top:8px;font-size:13px;line-height:1.4;font-weight:500;color:var(--graphite)}
@media (hover:hover){.next a:hover .nname{text-decoration-color:var(--orange)}}
.next a:focus-visible .nname,.next a:active .nname{text-decoration-color:var(--orange)}
.btn{display:inline-flex;align-items:center;min-height:48px;padding:0 24px;border-radius:24px;background:var(--orange);color:var(--ink);font-size:15px;font-weight:700;text-decoration:none!important}
.press-list{margin:16px 0 0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:0 24px;font-size:15px;line-height:1.4}
.press-list li{border-top:1px solid var(--heather-300)}
.press-list a{min-height:48px;display:flex;justify-content:space-between;align-items:center;gap:12px;font-weight:700}
.press-list .dom{font-size:13px;font-weight:500;color:var(--graphite)}
.press-rows{flex:2 1 400px;margin:0;padding:0;list-style:none;font-size:15px;line-height:1.4}
.press-rows li{border-bottom:1px solid var(--heather-300)}
.press-rows a{min-height:56px;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 24px;padding:8px 0}
.press-rows .t{color:var(--graphite)}
.cap{display:block;margin-top:8px;font-size:13px;line-height:1.4;font-weight:500;color:var(--ink)}
.chapter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:12px 24px;background:var(--heather-200);padding:12px}
.chapter-bar>.m{flex:0 0 auto;width:192px}

/* BTS sketch row: one row fitted to the width (grid by ratio); on phones two justified rows, no sideways scroll. */
.sketch-row{display:grid;grid-template-columns:0.7467fr 0.8728fr 0.6709fr 1.2414fr 0.4387fr;gap:12px;align-items:start}
@media (max-width:600px){.sketch-row{display:flex;flex-wrap:wrap;align-items:flex-start}.sketch-row>a{flex:var(--r) 1 0}.sketch-row>a[data-brk]{margin-left:0}.sketch-row::after{content:none}
  .sketch-row>a:nth-child(-n+3){flex-basis:calc((100% - 24px) * var(--r) / 2.2904)}.sketch-row>a:nth-child(n+4){flex-basis:calc((100% - 12px) * var(--r) / 1.6801)}}
/* Film. Container takes the film's own ratio before the file loads; only Morgan's hero may crop (fit cover). */
.film{position:relative;margin:0;width:100%;aspect-ratio:var(--ar);background:var(--ink);overflow:hidden}
.film video,.film .poster{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.film.cover{aspect-ratio:auto;height:100%}
.film.cover video,.film.cover .poster{object-fit:cover}
.film .poster{pointer-events:none}
.film.has-video .poster{display:none}
.film-ctrl{position:absolute;right:4px;bottom:4px;display:flex;z-index:2}
.film.top .film-ctrl{right:var(--inset);top:var(--inset);bottom:auto}
.film-ctrl button[hidden]{display:none}
.film-ctrl button{min-width:44px;height:44px;padding:0 4px;border:0;background:none;display:grid;place-items:center;cursor:pointer}
.film-ctrl span{display:block;height:28px;padding:0 12px;border-radius:14px;background:rgba(13,13,13,.72);color:var(--heather-100);font:600 11px/28px Satoshi,system-ui,sans-serif;letter-spacing:.02em;white-space:nowrap}
.film-ctrl .snd[aria-pressed="true"] span{box-shadow:0 0 0 2px var(--orange)}
.film-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;min-width:88px;height:48px;padding:0 24px;border:0;border-radius:24px;background:var(--heather-100);color:var(--ink);font:700 15px/1 Satoshi,system-ui,sans-serif;cursor:pointer}
.film-play[hidden]{display:none}
.film.cover .film-play{display:none}

/* Viewer */
.viewer{position:fixed;inset:0;z-index:400;background:var(--ink);color:var(--heather-100);font-family:Satoshi,system-ui,sans-serif}
.viewer[hidden]{display:none}
.viewer .vbar{position:absolute;top:16px;left:16px;right:16px;display:flex;align-items:center;gap:8px;z-index:2}
.viewer .vcount{margin-right:auto;font:500 13px/1.4 Satoshi,system-ui,sans-serif}
.viewer button{min-width:44px;height:44px;padding:0 16px;border:1px solid var(--graphite);border-radius:22px;background:var(--ink);color:var(--heather-100);font:500 13px/1 Satoshi,system-ui,sans-serif;cursor:pointer}
.viewer .vstage{position:absolute;inset:76px 16px 16px;display:grid;place-items:center}
.viewer .vstage img{max-width:100%;max-height:100%;width:auto;height:auto}
[data-zoom]{cursor:zoom-in}

/* Opener: film 0 to 4.33 s, LAWRENCE COOPER to 5.13 s, SCROLL RESPONSIBLY held to 5.73 s, title out by 5.93 s,
   film and ground fade 6.0 to 6.6 s. The homepage never shows through a title. */
.opener{position:fixed;inset:0;z-index:200;background:var(--heather-100);transition:opacity 600ms ease}
.opener[hidden]{display:none}
.opener.out{opacity:0;pointer-events:none}
.opener.quick{transition-duration:180ms}
.opener video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.opener-title{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none;opacity:0;transition:opacity 200ms ease}
.opener-title.on{opacity:1}
.opener-title span{font-weight:700;font-size:clamp(24px,4.8vw,72px);line-height:1.08;color:var(--ink);white-space:nowrap;text-align:center}
.opener-sound{position:absolute;left:24px;bottom:24px;height:44px;padding:0 24px;border:0;border-radius:22px;background:var(--heather-100);color:var(--ink);font:500 13px/1 Satoshi,system-ui,sans-serif;cursor:pointer}
.opener-sound[hidden]{display:none}
.opener-skip{position:absolute;right:24px;bottom:24px;height:44px;padding:0 24px;border:0;border-radius:22px;background:var(--heather-100);color:var(--ink);font:500 13px/1 Satoshi,system-ui,sans-serif;cursor:pointer}
html.has-opener{overflow:hidden}
html:not(.has-opener) .opener{display:none}
@media (max-width:600px){.opener-title span{font-size:clamp(20px,6vw,36px)}}

@media (prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important}}
.sec.first{margin-top:48px}
