/* Oliver Shadforth PHP Portfolio */
:root{--orange:#f8b42a;--black:#050505;--white:#fff;--muted:rgba(255,255,255,.64);--dim:rgba(255,255,255,.42);--line:rgba(255,255,255,.13);--digital-red:#d95d73;--digital-pink:#e5979f;--ease:cubic-bezier(.16,1,.3,1);--gap:clamp(8px,1.1vw,18px)}*{box-sizing:border-box}html{scroll-behavior:smooth;background:#2d2d2d}body{margin:0;background:#2d2d2d;color:var(--white);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;overflow-x:hidden;cursor:none;-webkit-font-smoothing:antialiased}a{color:inherit;cursor:none}button{font:inherit;cursor:none}.progress{position:fixed;top:0;left:0;height:2px;width:0;z-index:999;background:white;mix-blend-mode:difference}.custom-cursor{position:fixed;left:0;top:0;z-index:10000;width:18px;height:18px;border:1px solid rgba(255,255,255,.92);border-radius:50%;pointer-events:none;transform:translate3d(-50%,-50%,0);mix-blend-mode:difference;transition:width .28s var(--ease),height .28s var(--ease),border-color .28s var(--ease),background .28s var(--ease)}.custom-cursor:after{content:"";position:absolute;left:50%;top:50%;width:4px;height:4px;background:white;border-radius:50%;transform:translate(-50%,-50%)}.custom-cursor.is-hover{width:58px;height:58px;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.7)}.page-glow{position:fixed;inset:0;z-index:1;pointer-events:none;background:radial-gradient(circle at var(--cursorX,50%) var(--cursorY,50%),rgba(255,255,255,.16),transparent 9rem);mix-blend-mode:soft-light;opacity:.72}.orange-wash{position:fixed;inset:0;z-index:0;background:var(--orange);opacity:var(--orangeOpacity,1);pointer-events:none;will-change:opacity}.nav{position:fixed;inset:0 0 auto;z-index:100;height:76px;display:flex;align-items:center;justify-content:flex-end;gap:clamp(15px,2.6vw,42px);padding:0 clamp(18px,4vw,64px);transition:background .4s var(--ease),backdrop-filter .4s var(--ease)}body.is-scrolled .nav{background:rgba(5,5,5,.72);backdrop-filter:blur(18px)}.nav a{text-decoration:none;text-transform:uppercase;letter-spacing:.18em;font-size:.68rem;font-weight:850;opacity:.92;transition:opacity .25s var(--ease),transform .25s var(--ease)}.nav a:hover{opacity:.55;transform:translateY(-2px)}.hero{position:relative;z-index:2;min-height:108vh;overflow:hidden;background:transparent}.hero:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at var(--mx,50%) var(--my,35%),rgba(255,255,255,.42),transparent 13rem);opacity:var(--orangeOpacity,1);pointer-events:none}.hero-inner{position:relative;z-index:2;min-height:92vh;display:grid;place-items:center;align-content:center;text-align:center;padding:96px clamp(18px,6vw,90px) 70px}.hero-logo{width:min(72vw,720px);max-height:220px;object-fit:contain;filter:none;mix-blend-mode:normal;opacity:calc(1 - min(var(--scrollY,0) / 360,.92));transform:translate3d(0,calc(var(--scrollY,0) * .02px),0) scale(calc(1 - min(var(--scrollY,0) / 780,.62)));transform-origin:center;will-change:transform,opacity}.hero-inner p{margin:clamp(78px,8vw,128px) 0 clamp(22px,3.6vw,46px);max-width:900px;text-transform:uppercase;letter-spacing:clamp(.16em,.42vw,.32em);font-size:clamp(.86rem,1.18vw,1.15rem);line-height:1.7;font-weight:780;color:rgba(255,255,255,.84)}.scroll-cue{position:absolute;left:50%;bottom:10vh;transform:translateX(-50%);text-decoration:none;display:grid;place-items:center;gap:14px;text-transform:uppercase;letter-spacing:.24em;font-size:.82rem;color:rgba(255,255,255,.94)}.scroll-cue i{display:block;width:1px;height:68px;background:linear-gradient(to bottom,white,transparent);animation:cue 1.75s var(--ease) infinite;transform-origin:top}@keyframes cue{0%,100%{transform:scaleY(.25);opacity:.35}50%{transform:scaleY(1);opacity:1}}main{position:relative;z-index:3;background:var(--black)}.section-head{max-width:1640px;margin:0 auto clamp(22px,4vw,56px);border-top:1px solid var(--line);padding-top:18px;display:flex;justify-content:space-between;align-items:end;gap:20px}.section-head p{margin:0;display:flex;align-items:center;gap:12px;text-transform:uppercase;letter-spacing:.2em;font-size:.72rem;font-weight:850;color:rgba(255,255,255,.76)}.section-head p span{width:7px;height:7px;display:inline-block;background:var(--accent,var(--orange));border-radius:50%}.section-head small{color:var(--dim);text-transform:uppercase;letter-spacing:.15em;font-size:.66rem}.chapter{--bgStart:#2d2d2d;--bgEnd:#050505;padding:clamp(58px,8vw,136px) clamp(10px,2.5vw,36px);background:linear-gradient(180deg,var(--bgStart) 0%,var(--bgStart) 68%,color-mix(in srgb,var(--bgStart) 62%,var(--bgEnd)) 86%,var(--bgEnd) 100%);overflow:hidden}.chapter+.chapter{padding-top:clamp(66px,9vw,150px)}.chapter-intro{max-width:1640px;margin:0 auto clamp(28px,5vw,82px);display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(24px,4vw,54px);align-items:start}.chapter-meta{color:rgba(255,255,255,.56);text-transform:uppercase;letter-spacing:.18em;font-size:.72rem;font-weight:850}.chapter-title{margin:16px 0 0;font-size:clamp(2.7rem,7.2vw,10.8rem);line-height:.82;letter-spacing:clamp(.08em,.58vw,.18em);font-weight:930;text-transform:uppercase}.chapter-date{margin:0 0 22px;color:rgba(255,255,255,.9);text-transform:uppercase;letter-spacing:.16em;font-size:clamp(.72rem,1vw,.95rem);font-weight:850}.chapter-summary{margin:0;max-width:920px;color:rgba(255,255,255,.72);font-size:clamp(1.05rem,1.45vw,1.45rem);line-height:1.42}.media-grid{max-width:1640px;margin:0 auto;display:grid;grid-template-columns:repeat(12,1fr);grid-auto-flow:dense;grid-auto-rows:clamp(78px,7vw,126px);gap:var(--gap)}.media-card{position:relative;overflow:hidden;background:#111;border:1px solid rgba(255,255,255,.07);opacity:0;transform:translateY(34px) scale(.985);transition:opacity .82s var(--ease),transform .82s var(--ease),filter .52s var(--ease),box-shadow .52s var(--ease),border-color .52s var(--ease);will-change:transform,opacity}.media-card.is-visible{opacity:1;transform:translateY(0) scale(1)}.media-card img,.media-card video,.website-preview{width:100%;height:100%;display:block;object-fit:cover;transform:scale(1.015);transition:transform 1.1s var(--ease)}.logo-tile{display:grid;place-items:center;padding:clamp(20px,3vw,52px);background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.08),transparent 18rem),rgba(0,0,0,.18)}.logo-tile img{object-fit:contain}.link-tile,.private-tile{padding:clamp(18px,2vw,30px);display:flex;flex-direction:column;justify-content:space-between;text-decoration:none;background:radial-gradient(circle at var(--x,50%) var(--y,50%),color-mix(in srgb,var(--accent,#f8b42a) 28%,transparent),transparent 18rem),linear-gradient(135deg,rgba(255,255,255,.09),rgba(255,255,255,.025)),rgba(0,0,0,.20)}.link-tile.has-preview{padding:0}.website-preview{position:absolute;inset:0;filter:brightness(.55)}.link-content{position:relative;z-index:2;padding:clamp(18px,2vw,30px);min-height:100%;display:flex;flex-direction:column;justify-content:space-between}.link-tile strong,.private-tile strong{font-size:clamp(1.9rem,3vw,4rem);line-height:.88;letter-spacing:-.04em}.link-tile span,.private-tile span{color:rgba(255,255,255,.68);text-transform:uppercase;letter-spacing:.15em;font-size:.68rem;font-weight:850}.link-tile em{font-style:normal;align-self:flex-start;color:black;background:white;padding:12px 14px;text-transform:uppercase;letter-spacing:.14em;font-size:.68rem;font-weight:900}.media-grid:hover .media-card:not(:hover){filter:brightness(.58) saturate(.78)}.media-grid:hover .media-card:hover{z-index:10;transform:scale(1.045);filter:brightness(1.06) saturate(1.08);box-shadow:0 42px 110px rgba(0,0,0,.66),0 0 0 1px rgba(255,255,255,.38),0 0 46px rgba(255,255,255,.16);border-color:rgba(255,255,255,.95)}.media-card:hover img,.media-card:hover video,.media-card:hover .website-preview{transform:scale(1.11)}.media-card:after{content:"";position:absolute;inset:0;background:radial-gradient(circle at var(--x,50%) var(--y,50%),rgba(255,255,255,.22),transparent 14rem),linear-gradient(to bottom,transparent 45%,rgba(0,0,0,.44));opacity:0;transition:opacity .42s var(--ease);pointer-events:none}.media-card:hover:after{opacity:1}.link-tile:after,.private-tile:after,.logo-tile:after{display:none}.play{position:absolute;top:16px;right:16px;z-index:2;width:42px;height:42px;display:grid;place-items:center;background:rgba(0,0,0,.42);border:1px solid rgba(255,255,255,.24);backdrop-filter:blur(10px);transition:opacity .28s var(--ease),transform .28s var(--ease)}.play:before{content:"";width:0;height:0;border-top:7px solid transparent;border-bottom:7px solid transparent;border-left:10px solid white;margin-left:2px}.media-card:hover .play{opacity:0;transform:scale(.8)}.size-small{grid-column:span 2;grid-row:span 2}.size-square{grid-column:span 3;grid-row:span 3}.size-portrait{grid-column:span 3;grid-row:span 5}.size-landscape{grid-column:span 5;grid-row:span 3}.size-wide{grid-column:span 7;grid-row:span 4}.size-hero{grid-column:span 8;grid-row:span 6}.size-tall{grid-column:span 4;grid-row:span 6}.digital{--accent:var(--digital-red);padding:clamp(70px,9vw,150px) clamp(10px,2.5vw,36px);background:linear-gradient(180deg,#050505 0%,#0b0b0b 100%)}.digital-grid{max-width:1640px;margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap)}.digital-card{min-height:clamp(310px,32vw,500px);padding:clamp(18px,2vw,30px);border:1px solid color-mix(in srgb,var(--digital-red) 52%,rgba(255,255,255,.18));background:radial-gradient(circle at var(--x,50%) var(--y,50%),color-mix(in srgb,var(--digital-pink) 28%,transparent),transparent 20rem),linear-gradient(135deg,rgba(255,255,255,.075),rgba(255,255,255,.018)),#101010;text-decoration:none;display:flex;flex-direction:column;justify-content:space-between;opacity:0;transform:translateY(34px) scale(.985);transition:opacity .82s var(--ease),transform .82s var(--ease),border-color .42s var(--ease),box-shadow .42s var(--ease)}.digital-card.is-visible{opacity:1;transform:translateY(0) scale(1)}.digital-card:hover{transform:translateY(-10px) scale(1.025);border-color:var(--digital-pink);box-shadow:0 42px 110px rgba(0,0,0,.55),0 0 0 1px color-mix(in srgb,var(--digital-pink) 55%,transparent),0 0 52px color-mix(in srgb,var(--digital-pink) 26%,transparent)}.digital-card .tag{display:flex;justify-content:space-between;gap:14px;color:color-mix(in srgb,var(--digital-pink) 78%,white);text-transform:uppercase;letter-spacing:.14em;font-size:.66rem;font-weight:850}.digital-card h3{color:white;margin:0 0 16px;font-size:clamp(2rem,3.2vw,4.2rem);line-height:.88;letter-spacing:-.04em}.digital-card p{margin:0;color:rgba(255,255,255,.66);font-size:clamp(.98rem,1.1vw,1.15rem);line-height:1.35}.digital-card .action{color:white;text-transform:uppercase;letter-spacing:.14em;font-size:.68rem;font-weight:900}.about,.contact{max-width:1640px;margin:0 auto;padding:clamp(60px,9vw,140px) clamp(18px,3vw,36px);border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1.4fr;gap:clamp(34px,8vw,150px)}.about h2,.contact h2{margin:0;font-size:clamp(2.7rem,7vw,8rem);line-height:.86;letter-spacing:-.06em}.about p,.contact a{margin:0;color:rgba(255,255,255,.78);font-size:clamp(1.45rem,3vw,4rem);line-height:1;letter-spacing:-.04em;text-decoration:none;overflow-wrap:anywhere}.contact div{display:grid;gap:22px}.contact a:hover{color:var(--orange)}@media(pointer:coarse){body,a,button{cursor:auto}.custom-cursor{display:none}}@media(max-width:1050px){.chapter-intro,.about,.contact{grid-template-columns:1fr}.media-grid{grid-template-columns:repeat(8,1fr)}.size-small{grid-column:span 2;grid-row:span 2}.size-square{grid-column:span 4;grid-row:span 3}.size-portrait{grid-column:span 4;grid-row:span 5}.size-landscape{grid-column:span 4;grid-row:span 3}.size-wide,.size-hero{grid-column:span 8;grid-row:span 4}.size-tall{grid-column:span 4;grid-row:span 5}.digital-grid{grid-template-columns:1fr}}@media(max-width:640px){.nav{justify-content:center;gap:13px;height:64px}.nav a{font-size:.56rem;letter-spacing:.08em}.hero{min-height:100vh}.hero-logo{width:88vw}.hero-inner p{font-size:.66rem;line-height:1.8}.section-head{align-items:start;flex-direction:column;gap:12px}.chapter-title{letter-spacing:.08em}.media-grid{grid-template-columns:repeat(4,1fr);grid-auto-rows:86px}.size-small,.size-square,.size-portrait,.size-landscape,.size-wide,.size-hero,.size-tall{grid-column:span 4}.size-small{grid-row:span 2}.size-square,.size-landscape{grid-row:span 3}.size-wide{grid-row:span 4}.size-portrait,.size-hero,.size-tall{grid-row:span 5}.media-grid:hover .media-card:not(:hover),.media-grid:hover .media-card:hover{filter:none;transform:none}.digital-card{min-height:290px}}

/* v1.5 emergency fixes */
.chapter-title{
  font-size:clamp(3.4rem,8.4vw,8.6rem) !important;
  letter-spacing:clamp(.055em,.42vw,.13em) !important;
}
.media-card video{
  background:#050505;
}
.size-portrait{
  grid-column:span 3 !important;
  grid-row:span 5 !important;
  aspect-ratio:9/16;
}
.size-landscape{
  grid-column:span 5 !important;
  grid-row:span 3 !important;
  aspect-ratio:16/9;
}
.size-square{
  grid-column:span 3 !important;
  grid-row:span 3 !important;
  aspect-ratio:1/1;
}
.logo-tile{
  padding:0 !important;
  background:#050505 !important;
}
.logo-tile img{
  width:100% !important;
  height:100% !important;
  object-fit:cover !important;
  transform:none !important;
}
.link-tile strong{
  max-width:100%;
  font-size:clamp(2.6rem,6.2vw,7rem) !important;
  white-space:nowrap;
}
@media(max-width:1050px){
  .size-portrait{grid-column:span 4 !important;grid-row:span 5 !important;}
  .size-landscape{grid-column:span 4 !important;grid-row:span 3 !important;}
  .size-square{grid-column:span 4 !important;grid-row:span 3 !important;}
}
@media(max-width:640px){
  .chapter-title{font-size:clamp(2.6rem,15vw,5.2rem) !important;}
  .size-portrait,.size-landscape,.size-square{grid-column:span 4 !important;}
  .size-portrait{grid-row:span 5 !important;}
  .size-landscape,.size-square{grid-row:span 3 !important;}
}
