/* stevegeddes.com — shared styles. Dark, Outfit 200 + Fragment Mono. */
:root{--bg:#0E0F11;--ink:#ECEBE6;--dim:#8A8B90;--line:rgba(236,235,230,.13);--panel:#15161A;--gut:clamp(16px,4vw,56px)}
*{box-sizing:border-box}
html{background:var(--bg);color:var(--ink);font-family:'Outfit',system-ui,-apple-system,'Segoe UI',sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}
html.home{scrollbar-width:none}
html.home::-webkit-scrollbar{display:none}
body{margin:0;min-height:100vh;overflow-x:clip}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
:focus-visible{outline:1px solid var(--ink);outline-offset:4px}
.k{display:block;font-family:'Fragment Mono',ui-monospace,monospace;font-size:11px;letter-spacing:.3em;text-transform:uppercase;color:var(--dim)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
@keyframes bob{50%{transform:translateY(6px)}}
.grain{position:fixed;inset:-50%;pointer-events:none;z-index:40;opacity:.09;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .1 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-size:280px;animation:grain 1.2s steps(4) infinite;mix-blend-mode:screen}
@keyframes grain{0%{transform:translate(0,0)}25%{transform:translate(-4%,3%)}50%{transform:translate(3%,-2%)}75%{transform:translate(-2%,-4%)}100%{transform:translate(0,0)}}

/* preloader (home, first visit) */
.pre{position:fixed;inset:0;z-index:70;background:#111214;color:#ECEBE6;display:grid;place-items:center;transition:transform .9s cubic-bezier(.76,0,.24,1)}
.pre.off{transform:translateY(-101%)}
.pre-in{display:grid;gap:16px;text-align:center}
.pre-n{font-family:'Fragment Mono',monospace;font-size:12px;letter-spacing:.2em}
.pre-t{font-size:11px;letter-spacing:.24em;text-transform:uppercase;line-height:2;font-family:'Fragment Mono',monospace}
.pre-t em{font-style:normal;color:#8A8B90}
.pre-b{position:absolute;left:0;bottom:0;height:2px;background:#ECEBE6;width:0}

/* cursor */
.cur{position:fixed;left:0;top:0;width:7px;height:7px;border-radius:50%;background:#fff;pointer-events:none;z-index:65;mix-blend-mode:difference;display:none;will-change:transform}
.cur i{position:absolute;inset:-13px;border:1px solid #fff;border-radius:50%;opacity:.55;transition:inset .35s cubic-bezier(.2,.7,.2,1),opacity .35s}
.cur.big i{inset:-24px;opacity:.95}
@media (pointer:fine){.cur{display:block}body,body *{cursor:none!important}}

/* top line */
.hud{position:fixed;left:0;right:0;top:0;z-index:60;display:flex;justify-content:space-between;align-items:center;gap:16px;padding:22px clamp(16px,3vw,40px);font-family:'Fragment Mono',monospace;font-size:11px;letter-spacing:.18em;text-transform:uppercase;pointer-events:none}
.hud a,.hud button{pointer-events:auto}
.hud .wm{font-family:'Outfit',sans-serif;font-weight:300;font-size:14px;letter-spacing:.16em}
.hud .nv{display:flex;gap:30px}
.hud .nv a{position:relative;padding-bottom:4px}
.hud .nv a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .45s cubic-bezier(.2,.7,.2,1)}
.hud .nv a:hover::after,.hud .nv a[aria-current="page"]::after{transform:none}
.hud .mb{all:unset;pointer-events:auto;cursor:pointer;display:none;font:inherit;letter-spacing:inherit;text-transform:inherit;padding:6px 0}
@media (max-width:800px){.hud .nv{display:none}.hud .mb{display:block}}
.fade{position:fixed;left:0;right:0;top:0;height:96px;background:linear-gradient(var(--bg) 30%,rgba(14,15,17,0));z-index:5;pointer-events:none}

/* full-screen menu (phones) */
.menu{position:fixed;inset:0;z-index:52;background:var(--bg);display:grid;align-content:center;padding:0 clamp(16px,6vw,60px);clip-path:inset(0 0 100% 0);transition:clip-path .6s cubic-bezier(.76,0,.24,1);pointer-events:none}
.menu.on{clip-path:inset(0 0 0 0);pointer-events:auto}
.menu .mi{display:block;overflow:hidden;font-weight:200;font-size:clamp(44px,12vw,110px);line-height:1.08;letter-spacing:-.02em}
.menu .mi span{display:block;transform:translateY(110%);transition:transform .8s cubic-bezier(.2,.7,.2,1)}
.menu.on .mi span{transform:none}
.menu.on .mi:nth-child(2) span{transition-delay:.06s}.menu.on .mi:nth-child(3) span{transition-delay:.12s}.menu.on .mi:nth-child(4) span{transition-delay:.18s}
.menu .mi[aria-current="page"]{color:var(--dim)}
.menu .mc{margin-top:40px;display:grid;gap:8px;font-family:'Fragment Mono',monospace;font-size:12px;letter-spacing:.08em;color:var(--dim);opacity:0;transition:opacity .6s .3s}
.menu.on .mc{opacity:1}

/* cut between pages */
.wipe{position:fixed;inset:0;z-index:55;background:#08090B;transform:scaleY(0);transform-origin:50% 100%;transition:transform .46s cubic-bezier(.76,0,.24,1);pointer-events:none}
.wipe.on{transform:scaleY(1)}
html.nav .wipe{transform:scaleY(1);transform-origin:50% 0;transition:none}

/* reveals */
.ln{display:block;overflow:hidden;padding-bottom:.08em}
.ln>span{display:block;transform:translateY(110%);transition:transform 1s cubic-bezier(.2,.7,.2,1) .08s}
body.in .ln>span{transform:none}
.fd{opacity:0;transform:translateY(14px);transition:opacity .9s .35s,transform .9s cubic-bezier(.2,.7,.2,1) .35s}
body.in .fd{opacity:1;transform:none}

/* ---------- HOME: the fly-through ---------- */
.home{min-height:100vh}
.home .stage{position:fixed;inset:0;overflow:hidden;z-index:1;pointer-events:none}
.home .world{position:absolute;inset:0}
.home .it{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transform-origin:50% 50%;will-change:transform,opacity;opacity:0;visibility:hidden}
.home .ph{width:var(--w,30vw);margin:0}
.home .ph img{width:100%;height:auto;aspect-ratio:16/10;object-fit:cover;background:var(--panel);filter:saturate(.72) brightness(.92);transition:filter .5s}
.home .ph:hover img{filter:saturate(1) brightness(1)}
.home .cap{margin-top:12px;font-family:'Fragment Mono',monospace;font-size:15px;letter-spacing:.04em;display:flex;justify-content:space-between;gap:14px}
.home .cap small{color:var(--dim);font-size:inherit;white-space:nowrap}
.home .cap b{font-weight:400;position:relative}
.home .cap b::after{content:"";position:absolute;left:0;right:0;bottom:-3px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .45s cubic-bezier(.2,.7,.2,1)}
.home .ph:hover .cap b::after{transform:none}
.home .nm{width:min(94vw,1500px);text-align:center}
.home .nm h1{margin:0;font-weight:200;font-size:clamp(56px,11.5vw,190px);line-height:.95;letter-spacing:-.025em}
.home .nm .ln>span{transition-delay:.15s}
.home .nm .k{margin-bottom:22px;opacity:0;transition:opacity 1s .6s}body.in .home .nm .k{opacity:1}
.home .nm .k2{margin-top:26px;opacity:0;transition:opacity 1s .9s}body.in .home .nm .k2{opacity:1}
.home .lbl{font-family:'Fragment Mono',monospace;font-size:12px;letter-spacing:.3em;text-transform:uppercase;color:var(--dim);white-space:nowrap}
.home .txt{width:min(84vw,1000px);text-align:center}
.home .txt .k{margin-bottom:18px}
.home .txt h2{margin:0;font-weight:200;font-size:clamp(28px,4.4vw,70px);line-height:1.1;letter-spacing:-.01em}
.home .txt h2.sm{font-size:clamp(20px,2.4vw,38px);line-height:1.25}
.home .txt h2 i{font-style:normal;color:var(--dim);margin:0 .25em}
.home .txt .more{display:inline-block;margin-top:22px;font-family:'Fragment Mono',monospace;font-size:11px;letter-spacing:.22em;text-transform:uppercase;border-bottom:1px solid var(--line);padding-bottom:3px}
.home .nums{display:grid;grid-template-columns:repeat(4,auto);justify-content:center;gap:clamp(18px,4vw,70px);text-align:center}
.home .nums b{display:block;font-weight:200;font-size:clamp(40px,6vw,96px);line-height:1}
.home .nums small{display:block;margin-top:8px;font-family:'Fragment Mono',monospace;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
.home .end{width:min(88vw,900px);text-align:center;pointer-events:auto}
.home .end h2{margin:0 0 20px;font-weight:200;font-size:clamp(48px,9vw,150px);line-height:.95;letter-spacing:-.02em}
.home .end .mail{display:inline-block;font-size:clamp(16px,1.6vw,22px);border-bottom:1px solid var(--ink);padding-bottom:3px}
.home .end p{margin:16px 0 0;font-family:'Fragment Mono',monospace;font-size:12px;letter-spacing:.08em;color:var(--dim)}
.home .end .lk{display:flex;justify-content:center;gap:26px;margin-top:30px;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink)}
.home .end .lk a{border-bottom:1px solid var(--line);padding-bottom:3px}
.home .hint{position:fixed;left:50%;bottom:calc(22px + env(safe-area-inset-bottom,0px));translate:-50% 0;font-family:'Fragment Mono',monospace;font-size:10px;letter-spacing:.3em;text-transform:uppercase;color:var(--dim);z-index:3;transition:opacity .6s;animation:bob 2.4s ease-in-out infinite;white-space:nowrap}
.home .prg{position:fixed;right:clamp(16px,3vw,40px);top:50%;translate:0 -50%;width:1px;height:120px;background:rgba(236,235,230,.15);z-index:3}
.home .prg i{display:block;width:100%;height:var(--p,0%);background:var(--ink)}
.home .spc{position:relative;z-index:0}
.home .vig{position:fixed;inset:0;z-index:2;pointer-events:none;background:radial-gradient(ellipse at 50% 50%,transparent 40%,rgba(14,15,17,.75) 100%)}
@media (max-width:800px){
 .home .ph{width:max(64vw,var(--w,30vw))}
 .home .cap{font-size:12px;flex-direction:column;gap:2px}
 .home .nums{grid-template-columns:repeat(2,auto)}
 .home .k,.home .lbl{letter-spacing:.18em}
 .home .end .lk{gap:18px;flex-wrap:wrap}
}

/* ---------- PAGES ---------- */
.wrap{padding:112px var(--gut) 40px;max-width:1560px;margin:0 auto}
.pg h1{margin:0;font-weight:200;font-size:clamp(54px,11vw,180px);line-height:.95;letter-spacing:-.025em}
.pg .hd{display:flex;justify-content:space-between;align-items:end;gap:20px;flex-wrap:wrap}
.pg .hd .k{margin-bottom:18px}
.pg .hd .k.r{text-align:right}
.ft{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px 24px;margin-top:14vh;padding:22px 0 calc(28px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--line);font-family:'Fragment Mono',monospace;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
.ft nav{display:flex;gap:22px}
.ft nav a:hover{color:var(--ink)}

/* work: a wall of squares */
.gr{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;margin:36px calc(-1*var(--gut)) 0}
.tl{position:relative;display:block;aspect-ratio:1;overflow:hidden;background:var(--panel);opacity:0;transform:translateY(16px);transition:opacity .8s cubic-bezier(.2,.7,.2,1) calc(var(--i)*30ms),transform .8s cubic-bezier(.2,.7,.2,1) calc(var(--i)*30ms)}
body.in .tl{opacity:1;transform:none}
.tl img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.72) brightness(.9);transition:filter .6s,transform 1.2s cubic-bezier(.2,.7,.2,1)}
.tl:hover img{filter:saturate(1) brightness(1);transform:scale(1.04)}
.tl.st{cursor:default}.tl.st img{filter:saturate(.72) brightness(.9)}.tl.st:hover img{transform:none}
.tl i{position:absolute;left:12px;top:10px;font-family:'Fragment Mono',monospace;font-style:normal;font-size:10px;letter-spacing:.2em;color:var(--ink);opacity:.75;text-shadow:0 1px 8px rgba(0,0,0,.6)}
.tl .cp{position:absolute;left:0;right:0;bottom:0;padding:34px 12px 12px;display:grid;gap:3px;background:linear-gradient(transparent,rgba(8,9,11,.8));transform:translateY(100%);transition:transform .5s cubic-bezier(.2,.7,.2,1);line-height:1.2}
.tl .cp b{font-weight:300;font-size:clamp(14px,1.1vw,17px)}
.tl .cp small{font-family:'Fragment Mono',monospace;font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--dim)}
.tl .cp .cm{font-weight:300;font-size:clamp(12px,.9vw,14px);color:var(--ink);opacity:.85}
.tl:hover .cp{transform:none}
.tl.slot .sl{position:absolute;inset:0;display:grid;place-content:center;gap:10px;text-align:center;padding:12%;background:var(--panel)}
.tl.slot .sl::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 50% 40%,rgba(236,235,230,.07),transparent 60%)}
.tl.slot .sl em{position:relative;font-style:normal;font-weight:200;font-size:clamp(18px,1.7vw,28px);line-height:1.1;letter-spacing:-.01em}
.tl.slot .sl small{position:relative;font-family:'Fragment Mono',monospace;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
.tl.slot .cp b{display:none}
.blk{margin-top:12vh}
.blk .k{padding:14px 0;border-top:1px solid var(--line)}
.nums{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:10px}
.nums b{display:block;font-weight:200;font-size:clamp(44px,7vw,120px);line-height:1;letter-spacing:-.03em}
.nums small{display:block;margin-top:10px;font-family:'Fragment Mono',monospace;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
@media (max-width:1200px){.gr{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:800px){
 .gr{grid-template-columns:repeat(2,minmax(0,1fr));gap:3px}
 .tl .cp{transform:none;padding:28px 10px 10px}.tl .cp b{font-size:13px}.tl .cp .cm{font-size:11px}.tl i{left:8px;top:7px}.tl.slot .sl em{font-size:16px}
 .nums{grid-template-columns:repeat(2,1fr)}
 .pg .hd .k.r{display:none}
}
@media (hover:none){.tl .cp{transform:none}}

/* show */
.sh{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(24px,6vw,100px);align-items:end}
.sh .art{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;background:var(--panel);filter:saturate(.84)}
.sh .none{width:100%;aspect-ratio:3/2;display:grid;place-items:center;background:var(--panel);font-family:'Fragment Mono',monospace;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
.sh h1{font-size:clamp(44px,7vw,120px)}
.sh h1.long{font-size:clamp(34px,4.6vw,76px)}
.sh h1 small{display:block;font-size:.32em;font-weight:200;color:var(--dim);letter-spacing:0;margin-top:.3em}
.sh .k{margin-bottom:18px}
.meta{display:grid;grid-template-columns:auto 1fr;gap:12px 28px;margin:30px 0 0;padding-top:22px;border-top:1px solid var(--line);font-family:'Fragment Mono',monospace;font-size:12px;letter-spacing:.14em;text-transform:uppercase}
.meta dt{color:var(--dim)}
.meta dd{margin:0}
.syn{margin:28px 0 0;max-width:46ch;font-weight:300;font-size:clamp(16px,1.3vw,19px);line-height:1.6}
.syn.todo{color:var(--dim)}
.tc{display:block;margin-top:12px;font-style:normal;font-family:'Fragment Mono',monospace;font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--dim)}
.stills{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,360px),1fr));gap:4px;margin-top:10vh}
.stills img{width:100%;height:auto;aspect-ratio:16/10;object-fit:cover;filter:saturate(.84)}
.nx{margin-top:12vh;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr}
.nx a{padding:28px 0;display:grid;gap:10px;align-content:start}
.nx a+a{text-align:right;border-left:1px solid var(--line);padding-left:24px}
.nx b{font-weight:200;font-size:clamp(22px,3vw,48px);line-height:1.05;letter-spacing:-.015em;transition:transform .55s cubic-bezier(.2,.7,.2,1)}
.nx a:hover b{transform:translateX(10px)}
.nx a+a:hover b{transform:translateX(-10px)}
.sh .all{display:inline-block;margin-top:24px;font-family:'Fragment Mono',monospace;font-size:11px;letter-spacing:.22em;text-transform:uppercase;border-bottom:1px solid var(--line);padding-bottom:3px}
@media (max-width:800px){.sh{grid-template-columns:minmax(0,1fr)}.nx a{padding:22px 0}}

/* about */
.ab{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:clamp(24px,6vw,100px);margin-top:36px;align-items:start}
.por{position:sticky;top:112px;aspect-ratio:4/5;background:var(--panel);display:grid;place-items:center;text-align:center;overflow:hidden;margin:0}
.por::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 50% 35%,rgba(236,235,230,.08),transparent 60%)}
.por .k{position:relative;line-height:2.2}
.por img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.8)}
.ab .lead{margin:0 0 .9em;font-weight:200;font-size:clamp(28px,3.4vw,56px);line-height:1.12;letter-spacing:-.015em;max-width:20ch}
.ab p{margin:0 0 1.2em;max-width:52ch;font-weight:300;font-size:clamp(17px,1.4vw,21px);line-height:1.6}
.svc{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 32px;margin-top:40px;padding-top:24px;border-top:1px solid var(--line)}
.svc div{font-weight:300;font-size:clamp(16px,1.3vw,20px)}
.svc div::before{content:"—";color:var(--dim);margin-right:12px}
.ab .say{display:inline-block;margin-top:40px;font-weight:200;font-size:clamp(24px,2.6vw,40px);letter-spacing:-.01em;border-bottom:1px solid var(--ink);padding-bottom:.08em}
@media (max-width:800px){.ab{grid-template-columns:minmax(0,1fr)}.por{position:static;max-width:72vw}.svc{grid-template-columns:minmax(0,1fr)}}

/* contact */
.ct{margin-top:36px;display:grid;gap:26px;justify-items:start}
.ct .mail{font-weight:200;font-size:clamp(26px,5vw,84px);letter-spacing:-.02em;line-height:1.1;border-bottom:1px solid var(--ink);padding-bottom:.06em;max-width:100%;overflow-wrap:anywhere}
.ct .tel{font-weight:200;font-size:clamp(22px,3vw,48px);letter-spacing:-.01em}
.ct p{margin:0;font-family:'Fragment Mono',monospace;font-size:12px;letter-spacing:.08em;color:var(--dim);line-height:1.9}
.ct p a{color:var(--ink);border-bottom:1px solid var(--line)}
.ct .av{display:grid;gap:10px;margin-top:20px;padding-top:24px;border-top:1px solid var(--line);width:100%}
.ct .av div{font-weight:300;font-size:clamp(16px,1.3vw,20px)}
.ct .av div::before{content:"—";color:var(--dim);margin-right:12px}

/* 404 */
.nf{min-height:70vh;display:grid;align-content:center}

@media (prefers-reduced-motion:reduce){
 .grain,.home .hint{animation:none}
 .ln>span,.fd,.tl,.home .nm .k,.home .nm .k2,.wipe,.menu,.menu .mi span{transition:none}
}

/* burnt orange accent (Steven, 7 Oct 2026): a touch of colour on labels, lines and hovers */
:root{--acc:#D0632A}
::selection{background:var(--acc);color:#fff}
:focus-visible{outline-color:var(--acc)}
.k,.home .lbl{color:var(--acc)}
.pre-b,.home .prg i{background:var(--acc)}
.hud .nv a::after{background:var(--acc)}
.hud .nv a[aria-current="page"],.menu .mi[aria-current="page"]{color:var(--acc)}
.tl i{color:var(--acc);opacity:1}
.tl .cp small{color:var(--acc)}
.home .txt h2 i{color:var(--acc)}
.home .cap b::after{background:var(--acc)}
.home .end .mail,.ct .mail,.ab .say{border-bottom-color:var(--acc)}
.home .txt .more,.sh .all,.home .end .lk a,.ct p a{border-bottom-color:var(--acc)}
.svc div::before,.ct .av div::before{color:var(--acc)}
.nx a:hover b,.ft nav a:hover,.home .end .lk a:hover,.ct .mail:hover,.ab .say:hover{color:var(--acc)}
.nx a small,.nx a .k{color:var(--acc)}
.meta{border-top-color:rgba(208,99,42,.45)}
.tl img{object-position:var(--op,50% 50%)}
