/* =========================================================
   KASPER SCHAUWERS — PORTFOLIO
   Design system: Swiss / International Typographic Style
   Helvetica Bold · Electric blue · Fluo green · White
   ========================================================= */

/* ---- Reset ---- */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
::selection{background:var(--green);color:var(--ink)}

/* ---- Tokens ---- */
:root{
  --blue:#0042FF;
  --green:#00FF00;
  --white:#FFFFFF;
  --ink:#0A0A0A;
  --blue-deep:#0033CC;

  --font:"Helvetica Neue",Helvetica,Arial,sans-serif;

  /* fluid type */
  --t-mega: clamp(3rem, 15vw, 19rem);
  --t-huge: clamp(3rem, 9vw, 9rem);
  --t-big:  clamp(2rem, 5vw, 4.25rem);
  --t-mid:  clamp(1.35rem, 2.4vw, 2.1rem);
  --t-body: clamp(1rem, 1.15vw, 1.2rem);
  --t-label: 0.78rem;

  --pad: clamp(20px, 4.2vw, 64px);
  --rule: 2px;

  --ease: cubic-bezier(.16,1,.3,1);
}

/* ---- Base ---- */
html,body{background:var(--blue);color:var(--white)}
body{
  font-family:var(--font);
  font-weight:400;
  font-size:var(--t-body);
  line-height:1.4;
  letter-spacing:.005em;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}

/* Theme variants applied on <body> */
body.theme-green{background:var(--green);color:var(--ink)}
body.theme-green ::selection{background:var(--blue);color:var(--white)}
body.theme-white{background:var(--white);color:var(--ink)}
body.theme-white ::selection{background:var(--blue);color:var(--white)}
body.theme-black{background:var(--ink);color:var(--white)}
body.theme-black ::selection{background:var(--green);color:var(--ink)}

/* ---------------------------------------------------------
   WHITE THEME — accent policy
   Blue carries text, links & rules (readable on white).
   Green is reserved for solid fills (badges, button hovers).
   --------------------------------------------------------- */
body.theme-white .green{color:var(--blue)}
body.theme-white .link-arrow{border-bottom-color:var(--blue)}
body.theme-white .link-arrow:hover{color:var(--blue)}
body.theme-white .footer .cta a:hover{color:var(--blue)}
body.theme-white .chip{border-color:var(--ink)}
body.theme-white .chip:hover{border-color:var(--blue)}

/* ---- Layout ---- */
.pad{padding-left:var(--pad);padding-right:var(--pad)}
.wrap{width:100%;margin:0 auto}
.row{display:flex}
.col{display:flex;flex-direction:column}
.grid{display:grid;gap:clamp(8px,1.2vw,18px)}

/* ---- Type helpers ---- */
.display{
  font-weight:700;
  line-height:.86;
  letter-spacing:-.035em;
  text-transform:none;
}
.mega{font-size:var(--t-mega)}
.huge{font-size:var(--t-huge)}
.big{font-size:var(--t-big)}
.tight{letter-spacing:-.04em}
.upper{text-transform:uppercase;letter-spacing:.02em}

.label{
  font-size:var(--t-label);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.14em;
}
.mono{font-family:var(--font);font-feature-settings:"tnum"}
.num{
  font-variant-numeric:tabular-nums;
  font-weight:700;
  letter-spacing:.02em;
}

.green{color:var(--green)}
.blue{color:var(--blue)}
.ink{color:var(--ink)}

/* Inline logo glyph — sized to the surrounding text by default.
   Scoped overrides (.marquee .dot-logo, .burl .dot-logo) win where present. */
.dot-logo{height:1em;width:auto;display:inline-block;vertical-align:-.12em}

hr,.rule{border:none;height:var(--rule);background:currentColor;width:100%;opacity:1}

/* Titles are sentence-cased directly in the markup; only the name wordmark
   is auto-title-cased. Lowercase UI (nav, buttons, chips, labels) stays as-is. */
.brand-name{text-transform:capitalize}

/* =========================================================
   NAV
   ========================================================= */
.nav{
  position:sticky;top:0;z-index:100;
  display:flex;align-items:center;justify-content:space-between;
  gap:24px;
  padding:18px var(--pad);
  background:var(--blue);
  border-bottom:var(--rule) solid var(--white);
  mix-blend-mode:normal;
}
body.theme-green .nav{background:var(--green);border-color:var(--ink)}
body.theme-white .nav{background:var(--white);border-color:var(--ink)}
body.theme-black .nav{background:var(--ink);border-color:var(--white)}

.brand{display:flex;align-items:center;gap:14px;font-weight:700;letter-spacing:-.02em}
.brand svg{width:34px;height:34px;display:block;transition:transform 1.2s var(--ease)}
.brand:hover svg{transform:rotate(180deg)}
.brand .star-fill{fill:var(--green)}
body.theme-green .brand .star-fill{fill:var(--blue)}
body.theme-white .brand .star-fill{fill:var(--blue)}
.brand-name{font-size:1.05rem}

.nav-links{display:flex;align-items:center;gap:clamp(12px,2vw,38px)}
.nav-links a{
  position:relative;
  font-weight:700;font-size:.95rem;
  text-transform:lowercase;letter-spacing:-.01em;
  display:inline-flex;align-items:baseline;gap:6px;
  padding:4px 0;
}
.nav-links a .idx{font-size:.65rem;opacity:.55;font-variant-numeric:tabular-nums;letter-spacing:.05em}
.nav-links a::after{
  content:"";position:absolute;left:0;bottom:-2px;height:3px;width:0;
  background:var(--green);transition:width .35s var(--ease);
}
body.theme-green .nav-links a::after,body.theme-white .nav-links a::after{background:var(--blue)}
.nav-links a:hover::after,.nav-links a[aria-current="page"]::after{width:100%}
.nav-links a[aria-current="page"]{color:var(--green)}
body.theme-green .nav-links a[aria-current="page"],
body.theme-white .nav-links a[aria-current="page"]{color:var(--blue)}

.nav-toggle{display:none}

/* =========================================================
   FOOTER
   ========================================================= */
.footer{border-top:var(--rule) solid currentColor;margin-top:0}
.footer .big-mark{
  padding:clamp(30px,6vw,90px) var(--pad);
  display:flex;flex-direction:column;gap:8px;
}
.footer .cta{
  font-weight:700;line-height:.9;letter-spacing:-.04em;
  font-size:var(--t-huge);
}
.footer .cta a{display:inline-block;transition:color .25s var(--ease)}
.footer .cta a:hover{color:var(--green)}
.footer-meta{
  display:flex;flex-wrap:wrap;gap:18px 48px;justify-content:space-between;
  border-top:var(--rule) solid currentColor;
  padding:18px var(--pad);
  font-size:.8rem;
}
.footer-meta .label{opacity:.85}

/* =========================================================
   PLACEHOLDER MEDIA
   ========================================================= */
.ph{
  position:relative;width:100%;height:100%;
  background:
    repeating-linear-gradient(45deg,
      rgba(255,255,255,.10) 0 2px, transparent 2px 11px),
    var(--blue-deep);
  border:var(--rule) solid var(--white);
  display:flex;align-items:flex-end;
  overflow:hidden;
}
.ph[data-on="green"]{background:
    repeating-linear-gradient(45deg, rgba(0,0,0,.10) 0 2px, transparent 2px 11px),
    var(--green);border-color:var(--ink);color:var(--ink)}
.ph[data-on="white"]{background:
    repeating-linear-gradient(45deg, rgba(0,0,0,.07) 0 2px, transparent 2px 11px),
    #f1f1f1;border-color:var(--ink);color:var(--ink)}
body.theme-black .ph{background:
    repeating-linear-gradient(45deg, rgba(255,255,255,.07) 0 2px, transparent 2px 11px),
    #141414;border-color:var(--white);color:var(--white)}
.ph::after{
  content:attr(data-label);
  font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;
  padding:9px 11px;opacity:.7;
}
/* Any real photo dropped into a placeholder fully covers the frame,
   cropping/zooming as needed regardless of aspect ratio. */
.ph > img{
  position:absolute;inset:0;
  width:100%;height:100%;
  object-fit:cover;display:block;
}
.ph > img ~ ::after,.ph:has(> img)::after{content:none}

/* =========================================================
   WORK TILES
   ========================================================= */
.tile{position:relative;display:block;overflow:hidden;background:transparent}
.tile .ph{transition:transform .6s var(--ease)}
.tile:hover .ph{transform:scale(1.03)}
.tile .meta{
  display:flex;align-items:baseline;justify-content:space-between;gap:16px;
  padding:12px 2px 0;
}
.tile .meta h3{font-weight:700;font-size:1.15rem;letter-spacing:-.02em}
.tile .meta .cat{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;opacity:.7}
.tile .num-badge{
  position:absolute;top:10px;left:10px;z-index:2;
  font-size:.7rem;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.05em;
  background:var(--green);color:var(--ink);padding:3px 7px;
  opacity:0;transform:translateY(-6px);transition:.4s var(--ease);
}
.tile:hover .num-badge{opacity:1;transform:none}

/* =========================================================
   BUTTONS / LINKS
   ========================================================= */
.btn{
  display:inline-flex;align-items:center;gap:10px;
  font-weight:700;font-size:.95rem;text-transform:lowercase;letter-spacing:-.01em;
  border:var(--rule) solid currentColor;
  padding:12px 20px;border-radius:999px;
  transition:.28s var(--ease);
}
.btn:hover{background:var(--green);color:var(--ink);border-color:var(--green)}
.btn .arr{transition:transform .3s var(--ease)}
.btn:hover .arr{transform:translateX(4px)}

.link-arrow{display:inline-flex;align-items:center;gap:8px;font-weight:700;border-bottom:3px solid var(--green);padding-bottom:2px}
.link-arrow:hover{color:var(--green)}

/* chips / filter */
.filters{display:flex;flex-wrap:wrap;gap:10px}
.chip{
  font-weight:700;font-size:.9rem;text-transform:lowercase;letter-spacing:-.01em;
  border:var(--rule) solid var(--white);border-radius:999px;
  padding:9px 18px;transition:.25s var(--ease);
}
.chip[aria-pressed="true"]{background:var(--green);color:var(--ink);border-color:var(--green)}
.chip:hover{border-color:var(--green)}

/* =========================================================
   MARQUEE
   ========================================================= */
.marquee{overflow:hidden;white-space:nowrap;border-top:var(--rule) solid currentColor;border-bottom:var(--rule) solid currentColor}
.marquee .track{display:inline-flex;gap:0;will-change:transform;animation:scroll 64s linear infinite}
.marquee span{
  flex:0 0 auto;
  font-weight:700;letter-spacing:-.03em;
  font-size:clamp(1.1rem,2.6vw,2rem);line-height:1;padding:9px 0;
}
.marquee .dot{color:var(--green)}
.marquee .dot-logo{height:1.15em;width:auto;display:inline-block;vertical-align:-.32em;margin:0 .05em}
@keyframes scroll{to{transform:translateX(-50%)}}
.marquee:hover .track{animation-play-state:paused}

/* =========================================================
   MOBILE NAV
   ========================================================= */
@media (max-width:760px){
  .nav-toggle{display:inline-flex;font-weight:700;font-size:.95rem;text-transform:lowercase}
  .nav-links{
    position:absolute;top:100%;left:0;right:0;
    flex-direction:column;align-items:flex-start;gap:0;
    background:var(--blue);border-bottom:var(--rule) solid var(--white);
    max-height:0;overflow:hidden;transition:max-height .4s var(--ease);
  }
  body.theme-green .nav-links{background:var(--green)}
  body.theme-white .nav-links{background:var(--white)}
  body.theme-black .nav-links{background:var(--ink)}
  .nav-links a{padding:16px var(--pad);width:100%;border-top:1px solid rgba(255,255,255,.25)}
  body.theme-white .nav-links a{border-top-color:rgba(0,0,0,.12)}
  .nav.open .nav-links{max-height:60vh}
}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms!important;transition-duration:.001ms!important}
}

/* =========================================================
   SMALL-SCREEN HARDENING
   Lets baseline header/label rows wrap instead of overflowing
   on very narrow viewports (sub-320px).
   ========================================================= */
.sec-head,.cat-bar,.cv-sub{flex-wrap:wrap}
