/* ============================================================
   REGULATORN / regulatorn.se
   Built on the Regulatorn identity, rev. 02.
   Tokens map 1:1 onto the brand kit; nothing is invented here.

   Radius is 0 everywhere. The kit's rule is "nothing in the
   system rounds", and that is the page's shape lock.
   ============================================================ */

/* ---------- brand constants (never change with theme) ---------- */
:root{
  --kakel:#EDE9E1;
  --kakel-2:#E2DDD2;
  --grout:#D5CFC2;
  --gron:#2F3E35;
  --gron-djup:#232F28;
  --massing:#CFA83F;
  --massing-djup:#7E6118;
  --tejp:#15171A;
  --dimma:#A9B3A9;
  --skiffer:#5C6459;

  --sans:"Familjen Grotesk","Helvetica Neue",Helvetica,Arial,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;

  --pad:clamp(20px,5vw,64px);
  --maxw:1280px;
  --ease:cubic-bezier(.16,1,.3,1);
}

/* ---------- semantic tokens: LIGHT (complete set) ---------- */
:root{
  --bg:var(--kakel);
  --bg-2:var(--kakel-2);
  --ink:var(--tejp);
  --ink-2:var(--skiffer);
  --line:rgba(21,23,26,.16);
  --line-soft:rgba(21,23,26,.085);
  --accent-text:var(--massing-djup);
  --block:var(--gron);
  --block-ink:var(--kakel);
  --block-ink-2:var(--dimma);
  --block-line:rgba(237,233,225,.2);
  --mark:var(--tejp);
  --btn-bg:var(--tejp);
  --btn-ink:var(--kakel);
}

/* ---------- semantic tokens: DARK ---------- */
@media(prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:var(--gron-djup);
    --bg-2:#293630;
    --ink:var(--kakel);
    --ink-2:var(--dimma);
    --line:rgba(237,233,225,.2);
    --line-soft:rgba(237,233,225,.1);
    --accent-text:var(--massing);
    --block:#36463B;
    --mark:var(--kakel);
    --btn-bg:var(--massing);
    --btn-ink:var(--gron-djup);
  }
}
:root[data-theme="dark"]{
  --bg:var(--gron-djup);
  --bg-2:#293630;
  --ink:var(--kakel);
  --ink-2:var(--dimma);
  --line:rgba(237,233,225,.2);
  --line-soft:rgba(237,233,225,.1);
  --accent-text:var(--massing);
  --block:#36463B;
  --mark:var(--kakel);
  --btn-bg:var(--massing);
  --btn-ink:var(--gron-djup);
}

/* ============================================================ base */
*,*::before,*::after{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto;}}

body{
  margin:0;
  background:var(--bg);
  color:var(--ink);
  font-family:var(--sans);
  font-size:17px;
  line-height:1.55;
  font-synthesis-weight:none;
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%;display:block;}
svg{max-width:100%;}
p{margin:0;}
a{color:inherit;}

:focus-visible{outline:2px solid var(--accent-text);outline-offset:3px;}

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

.lbl{
  font-family:var(--mono);font-size:.6875rem;font-weight:500;
  letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2);margin:0;
}

h1,h2,h3{margin:0;font-weight:600;letter-spacing:-.03em;text-wrap:balance;}
h2{font-size:clamp(1.9rem,4.2vw,3.1rem);line-height:1.02;}
h3{font-size:clamp(1.2rem,2.2vw,1.6rem);line-height:1.1;letter-spacing:-.025em;}

.body-lg{font-size:clamp(1.02rem,1.5vw,1.15rem);line-height:1.6;color:var(--ink-2);max-width:58ch;}
.body{font-size:.9375rem;line-height:1.6;color:var(--ink-2);max-width:60ch;}

section{padding-block:clamp(64px,9vw,132px);}

/* ---------- the mark ---------- */
.mark{color:var(--mark);}

/* ---------- buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.55em;
  padding:.92em 1.5em;border-radius:0;border:1px solid transparent;
  font-family:var(--sans);font-size:.9375rem;font-weight:600;letter-spacing:-.01em;
  text-decoration:none;white-space:nowrap;cursor:pointer;
  transition:transform .18s var(--ease),background-color .18s var(--ease),border-color .18s var(--ease);
}
.btn:active{transform:translateY(1px);}
.btn-primary{background:var(--btn-bg);color:var(--btn-ink);}
.btn-primary:hover{background:var(--accent-text);color:var(--bg);}
.btn-ghost{background:transparent;color:var(--ink);border-color:var(--line);}
.btn-ghost:hover{border-color:var(--ink);}
/* on a green block the buttons take fixed brand colours */
.on-block .btn-primary{background:var(--massing);color:var(--gron-djup);}
.on-block .btn-primary:hover{background:var(--kakel);color:var(--gron-djup);}
.on-block .btn-ghost{color:var(--kakel);border-color:rgba(237,233,225,.36);}
.on-block .btn-ghost:hover{border-color:var(--kakel);}

/* ---------- image slots ----------
   The <img> sits on a labelled tile-grid plate. If the photo is
   missing the plate shows what belongs there, at what ratio.     */
.shot{position:relative;margin:0;overflow:hidden;background:var(--bg-2);}
.shot::before{
  content:"";position:absolute;inset:0;z-index:0;
  background-image:linear-gradient(var(--line) 1px,transparent 1px),
                   linear-gradient(90deg,var(--line) 1px,transparent 1px);
  background-size:80px 50px;
}
.shot::after{
  content:attr(data-slot);position:absolute;left:14px;bottom:12px;z-index:0;
  font-family:var(--mono);font-size:.625rem;letter-spacing:.15em;
  text-transform:uppercase;color:var(--ink-2);
}
.shot img{position:relative;z-index:1;width:100%;height:100%;object-fit:cover;}

/* ============================================================ nav */
.nav{
  position:sticky;top:0;z-index:40;background:var(--bg);
  border-bottom:1px solid var(--line);
}
.nav-in{
  height:68px;display:flex;align-items:center;gap:28px;
  max-width:var(--maxw);margin:0 auto;padding-inline:var(--pad);
}
.brand{display:flex;align-items:center;gap:.55em;text-decoration:none;color:var(--ink);flex:none;}
.brand svg{height:22px;width:auto;}
.brand span{font-weight:600;font-size:1.05rem;letter-spacing:-.022em;}
.nav-links{display:none;gap:26px;margin-left:auto;}
.nav-links a{
  font-size:.9rem;text-decoration:none;color:var(--ink-2);
  transition:color .18s var(--ease);white-space:nowrap;
}
.nav-links a:hover{color:var(--ink);}
.nav .btn{margin-left:auto;padding:.62em 1.05em;font-size:.85rem;}
@media(min-width:900px){
  .nav-links{display:flex;}
  .nav .btn{margin-left:0;}
}

/* ============================================================ hero */
.hero{padding-top:clamp(40px,6vw,88px);padding-bottom:clamp(48px,7vw,96px);}
.hero-grid{display:grid;grid-template-columns:1fr;gap:clamp(32px,5vw,56px);align-items:center;}
@media(min-width:940px){.hero-grid{grid-template-columns:1.06fr .94fr;}}

.hero h1{
  font-size:clamp(2.5rem,6.4vw,4.9rem);line-height:.96;letter-spacing:-.042em;
  margin-top:.28em;
}
.hero h1 .rate{color:var(--accent-text);}
.hero .body-lg{margin-top:clamp(18px,2.4vw,26px);max-width:42ch;}
.hero-cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:clamp(26px,3.4vw,36px);}
.hero-shot{aspect-ratio:4/5;}
@media(min-width:940px){.hero-shot{aspect-ratio:auto;height:min(72vh,620px);}}

/* ============================================================ facts */
.facts{border-block:1px solid var(--line);background:var(--bg-2);padding-block:0;}
.facts-in{
  display:grid;grid-template-columns:1fr 1fr;
  max-width:var(--maxw);margin:0 auto;
}
@media(min-width:760px){.facts-in{grid-template-columns:repeat(4,1fr);}}
.fact{
  padding:clamp(22px,3vw,34px) var(--pad);
  border-right:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);
}
@media(min-width:760px){
  .fact{border-bottom:0;padding-inline:clamp(20px,2.6vw,34px);}
  .fact:first-child{padding-left:var(--pad);}
  .fact:last-child{border-right:0;padding-right:var(--pad);}
}
.fact b{display:block;font-size:clamp(1.8rem,3.4vw,2.7rem);font-weight:600;letter-spacing:-.04em;line-height:1;}
.fact span{
  display:block;margin-top:9px;font-family:var(--mono);font-size:.625rem;
  letter-spacing:.15em;text-transform:uppercase;color:var(--ink-2);
}

/* ============================================================ studios */
.studio{display:grid;grid-template-columns:1fr;gap:clamp(26px,4vw,54px);align-items:center;}
@media(min-width:940px){
  .studio{grid-template-columns:1fr 1fr;}
  .studio.flip .studio-shot{order:-1;}
}
.studio + .studio{margin-top:clamp(56px,7vw,104px);}
.studio-shot{aspect-ratio:3/2;}
.gloss{
  font-family:var(--mono);font-size:.6875rem;letter-spacing:.15em;
  text-transform:uppercase;color:var(--accent-text);margin-top:12px;
}
.studio .body{margin-top:16px;}
.kit{
  margin:22px 0 0;padding:0;list-style:none;
  display:grid;gap:0;border-top:1px solid var(--line-soft);max-width:34rem;
}
.kit li{
  display:flex;align-items:center;gap:12px;padding:11px 0;
  border-bottom:1px solid var(--line-soft);
  font-family:var(--mono);font-size:.6875rem;letter-spacing:.11em;
  text-transform:uppercase;color:var(--ink-2);
}
.kit svg{width:15px;height:auto;flex:none;color:var(--accent-text);}
.kit em{margin-left:auto;font-style:normal;color:var(--ink);}
.rate-tag{
  display:inline-flex;align-items:baseline;gap:.4em;margin-top:24px;
  font-size:clamp(1.5rem,2.6vw,2rem);font-weight:600;letter-spacing:-.035em;
  color:var(--accent-text);
}
.rate-tag small{
  font-family:var(--mono);font-size:.625rem;font-weight:400;letter-spacing:.15em;
  text-transform:uppercase;color:var(--ink-2);
}

/* ============================================================ included (bento) */
.bento{display:grid;grid-template-columns:1fr;gap:1px;background:var(--line);border:1px solid var(--line);}
@media(min-width:700px){.bento{grid-template-columns:1fr 1fr;}}
@media(min-width:1040px){
  /* 4 cells, 3 x 2 field, zero empty slots: tall cell left,
     two square cells top-right, wide cell across the bottom. */
  .bento{grid-template-columns:1.35fr 1fr 1fr;grid-template-rows:auto auto;}
  .cell-a{grid-row:span 2;}
  .cell-d{grid-column:span 2;}
}
.cell{background:var(--bg);padding:clamp(22px,2.8vw,32px);display:flex;flex-direction:column;gap:16px;justify-content:space-between;min-height:200px;}
.cell-txt h3{margin-bottom:9px;}
.cell-txt p{font-size:.875rem;line-height:1.55;color:var(--ink-2);}
.cell .shot{aspect-ratio:4/3;margin-bottom:2px;}
.cell-a .shot{aspect-ratio:3/4;flex:1;}
.cell-green{background:var(--block);color:var(--block-ink);}
.cell-green h3,.cell-green .huge{color:var(--block-ink);}
.cell-green p{color:var(--block-ink-2);}
.huge{font-size:clamp(2.6rem,5.4vw,3.8rem);font-weight:600;letter-spacing:-.045em;line-height:.92;}
.cell-tint{background:var(--bg-2);}
/* The module used as a device band, not as wallpaper. */
.modstrip{width:100%;max-width:290px;height:auto;color:var(--accent-text);opacity:.42;}

/* ============================================================ tiers */
.tiers{display:grid;grid-template-columns:1fr;gap:1px;background:var(--line);border:1px solid var(--line);margin-top:clamp(34px,4.4vw,54px);}
@media(min-width:840px){.tiers{grid-template-columns:1fr 1.14fr 1fr;align-items:stretch;}}
.tier{background:var(--bg);padding:clamp(26px,3.2vw,38px);display:flex;flex-direction:column;gap:20px;}
.tier-hi{background:var(--block);color:var(--block-ink);}
.tier-hi .tier-en,.tier-hi .tier-body{color:var(--block-ink-2);}
.tier-hi .price b{color:var(--massing);}
.tier-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;}
.tier h3{font-size:clamp(1.3rem,2.2vw,1.7rem);}
.tier-en{font-family:var(--mono);font-size:.625rem;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-2);margin-top:7px;}
.pick{
  font-family:var(--mono);font-size:.5625rem;letter-spacing:.14em;text-transform:uppercase;
  padding:5px 9px;background:var(--massing);color:var(--gron-djup);flex:none;font-weight:600;
}
.price{display:flex;align-items:baseline;gap:.4em;padding-block:4px;}
.price b{font-size:clamp(2rem,3.8vw,2.9rem);font-weight:600;letter-spacing:-.045em;line-height:1;color:var(--accent-text);}
.price span{font-family:var(--mono);font-size:.625rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);}
.tier-hi .price span{color:var(--block-ink-2);}
.price-math{
  font-family:var(--mono);font-size:.6875rem;letter-spacing:.06em;
  color:var(--ink-2);margin-top:-6px;
}
.tier-hi .price-math{color:var(--block-ink-2);}
.tier-body{font-size:.9rem;line-height:1.55;color:var(--ink-2);margin-top:6px;}
.feats{list-style:none;margin:0;padding:0;display:grid;gap:0;border-top:1px solid var(--line-soft);}
.tier-hi .feats{border-color:rgba(237,233,225,.16);}
.feats li{
  display:flex;align-items:baseline;gap:11px;padding:11px 0;
  border-bottom:1px solid var(--line-soft);font-size:.9rem;
}
.tier-hi .feats li{border-color:rgba(237,233,225,.16);}
.feats svg{width:13px;height:auto;flex:none;color:var(--accent-text);align-self:center;}
.tier-hi .feats svg{color:var(--massing);}
.tier .btn{margin-top:auto;width:100%;}
.tier-hi .btn-primary{background:var(--massing);color:var(--gron-djup);}
.tier-hi .btn-primary:hover{background:var(--kakel);color:var(--gron-djup);}
.tier-note{
  margin-top:22px;font-family:var(--mono);font-size:.6875rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink-2);
}

/* ============================================================ building */
/* Stacked editorial: wide plate on top, headline and two columns under.
   Deliberately NOT another side-by-side split; the studios own that. */
.building{background:var(--bg-2);}
.building-shot{aspect-ratio:16/9;}
@media(min-width:940px){.building-shot{aspect-ratio:21/9;}}
.building-text{margin-top:clamp(30px,4vw,52px);}
.building-cols{display:grid;grid-template-columns:1fr;gap:20px;margin-top:22px;}
@media(min-width:820px){
  .building-text{display:grid;grid-template-columns:1fr 1.25fr;gap:clamp(30px,4vw,56px);align-items:start;}
  .building-cols{grid-template-columns:1fr 1fr;gap:clamp(26px,3vw,44px);margin-top:0;}
}
.building h2{max-width:14ch;}

/* ============================================================ closing block */
.closing{background:var(--block);color:var(--block-ink);}
.closing h2{max-width:16ch;}
.closing p{color:var(--block-ink-2);margin-top:20px;max-width:46ch;font-size:clamp(1rem,1.5vw,1.12rem);line-height:1.6;}
.closing-cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:clamp(26px,3.4vw,38px);}
.closing-mark{margin-bottom:clamp(26px,3.6vw,40px);}
.closing-mark svg{height:clamp(46px,6.4vw,68px);width:auto;color:var(--kakel);}
.closing-mail{margin-top:20px;font-size:.9375rem;color:var(--block-ink-2);}
.closing-mail a{color:var(--massing);text-decoration:underline;text-underline-offset:3px;}

/* ============================================================ footer */
footer{border-top:1px solid var(--line);padding-block:clamp(40px,5vw,64px);}
.foot-grid{display:grid;grid-template-columns:1fr;gap:32px;}
@media(min-width:760px){.foot-grid{grid-template-columns:1.3fr 1fr 1fr;}}
.foot-col h4{
  margin:0 0 14px;font-family:var(--mono);font-size:.625rem;font-weight:500;
  letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2);
}
.foot-col p,.foot-col a{font-size:.9375rem;line-height:1.75;color:var(--ink-2);text-decoration:none;display:block;}
.foot-col a:hover{color:var(--ink);}
.foot-brand svg{height:34px;width:auto;color:var(--mark);margin-bottom:16px;}
.foot-base{
  margin-top:clamp(34px,4.4vw,52px);padding-top:20px;border-top:1px solid var(--line-soft);
  display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;
}

/* ============================================================ motion
   Two moves only. The mark draws itself the way the logo went up
   on the wall in tape, and sections rise as they arrive.        */
@media(prefers-reduced-motion:no-preference){
  .js-motion .rv{opacity:0;transform:translateY(18px);
    transition:opacity .72s var(--ease),transform .72s var(--ease);}
  .js-motion .rv.in{opacity:1;transform:none;}
  .js-motion .rv-d1{transition-delay:.08s;}
  .js-motion .rv-d2{transition-delay:.16s;}
  .js-motion .rv-d3{transition-delay:.24s;}

  #closingMark .h-run{stroke-dasharray:480;stroke-dashoffset:480;}
  #closingMark .v-run{stroke-dasharray:355;stroke-dashoffset:355;}
  #closingMark.draw .h-run{animation:tape 1.05s var(--ease) .28s forwards;}
  #closingMark.draw .v-run{animation:tape 1.15s var(--ease) .06s forwards;}
  @keyframes tape{to{stroke-dashoffset:0;}}

  .shot img{transition:transform .8s var(--ease);}
  .studio-shot:hover img,.cell .shot:hover img{transform:scale(1.03);}
}

/* ============================================================
   MEMBER AREA — login, signup, booking
   New surfaces, same tokens. Nothing here introduces a color,
   radius, or type role the identity doesn't already define.
   ============================================================ */

/* ---------- narrow page shell for auth screens ---------- */
.auth-shell{min-height:calc(100dvh - 68px);display:flex;align-items:center;justify-content:center;padding:clamp(28px,6vw,64px) var(--pad);}
.auth-card{width:100%;max-width:26rem;}
.auth-card h1{font-size:clamp(1.7rem,3.4vw,2.2rem);letter-spacing:-.03em;}
.auth-card .body-lg{margin-top:10px;max-width:none;}
.auth-switch{margin-top:22px;font-size:.9rem;color:var(--ink-2);}
.auth-switch a{color:var(--accent-text);text-decoration:underline;text-underline-offset:3px;}

/* ---------- form fields ----------
   Label above, helper or error below, never a placeholder standing
   in for a label. */
.field{display:flex;flex-direction:column;gap:7px;margin-top:18px;}
.field:first-of-type{margin-top:28px;}
.field label{
  font-family:var(--mono);font-size:.6875rem;font-weight:500;
  letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);
}
.field input{
  font-family:var(--sans);font-size:1rem;color:var(--ink);
  background:var(--bg);border:1px solid var(--line);border-radius:0;
  padding:.8em .9em;transition:border-color .18s var(--ease);
}
.field input::placeholder{color:var(--ink-2);opacity:.7;}
.field input:focus-visible{outline:2px solid var(--accent-text);outline-offset:1px;border-color:var(--accent-text);}
.field-help{font-size:.8125rem;color:var(--ink-2);}
.field-error{font-size:.8125rem;color:#A8402B;}
.field.has-error input{border-color:#A8402B;}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .field-error{color:#E08A73;}}
:root[data-theme="dark"] .field-error{color:#E08A73;}

.form-actions{margin-top:26px;}
.form-actions .btn{width:100%;}

/* ---------- alert banners ---------- */
.alert{
  display:flex;gap:10px;align-items:flex-start;padding:13px 15px;
  font-size:.875rem;line-height:1.5;border:1px solid;margin-top:20px;
}
.alert-error{background:rgba(168,64,43,.08);border-color:rgba(168,64,43,.35);color:#8A3423;}
.alert-ok{background:rgba(47,62,53,.08);border-color:var(--line);color:var(--ink);}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .alert-error{background:rgba(224,138,115,.1);border-color:rgba(224,138,115,.35);color:#E08A73;}}
:root[data-theme="dark"] .alert-error{background:rgba(224,138,115,.1);border-color:rgba(224,138,115,.35);color:#E08A73;}

/* ---------- account nav chip ----------
   Swapped in by auth-nav.js once we know whether someone is signed
   in. Starts hidden so there is never a flash of the wrong state. */
.acct{display:none;align-items:center;gap:12px;margin-left:auto;}
.acct.is-ready{display:flex;}
.acct-name{font-size:.875rem;color:var(--ink-2);white-space:nowrap;}
.acct-name b{color:var(--ink);font-weight:600;}
.nav[data-auth="out"] .acct-only,
.nav[data-auth="in"] .guest-only{display:none;}

/* ---------- member dashboard ---------- */
.dash-head{
  display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
  gap:16px;padding-bottom:24px;border-bottom:1px solid var(--line);margin-bottom:clamp(32px,4.5vw,48px);
}
.dash-head h1{font-size:clamp(1.8rem,3.4vw,2.5rem);}
.tier-chip{
  font-family:var(--mono);font-size:.625rem;letter-spacing:.12em;text-transform:uppercase;
  padding:6px 10px;border:1px solid var(--line);color:var(--ink-2);
}

.dash-grid{display:grid;grid-template-columns:1fr;gap:clamp(32px,4.5vw,56px);}
@media(min-width:980px){.dash-grid{grid-template-columns:1fr 1.35fr;}}

/* ---------- upcoming bookings list ---------- */
.upcoming{list-style:none;margin:0;padding:0;border-top:1px solid var(--line-soft);}
.upcoming li{
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:14px 0;border-bottom:1px solid var(--line-soft);
}
.upcoming .when{font-size:.9375rem;}
.upcoming .when b{font-weight:600;}
.upcoming .studio-name{
  display:block;font-family:var(--mono);font-size:.625rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink-2);margin-top:3px;
}
.upcoming .cancel{
  font-family:var(--mono);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-2);background:none;border:1px solid var(--line);padding:7px 10px;
  cursor:pointer;transition:border-color .18s var(--ease),color .18s var(--ease);
}
.upcoming .cancel:hover{border-color:#A8402B;color:#A8402B;}
.empty-note{padding:20px 0;color:var(--ink-2);font-size:.9375rem;}

/* ---------- booking panel ---------- */
.book-controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:20px;}
.studio-tabs{display:flex;border:1px solid var(--line);}
.studio-tabs button{
  font-family:var(--sans);font-size:.875rem;font-weight:600;letter-spacing:-.01em;
  padding:.6em 1.1em;background:none;border:0;color:var(--ink-2);cursor:pointer;
  transition:background-color .18s var(--ease),color .18s var(--ease);
}
.studio-tabs button + button{border-left:1px solid var(--line);}
.studio-tabs button[aria-selected="true"]{background:var(--ink);color:var(--bg);}

.date-picker{display:flex;align-items:center;gap:8px;margin-left:auto;}
.date-picker input[type="date"]{
  font-family:var(--mono);font-size:.8125rem;color:var(--ink);
  background:var(--bg);border:1px solid var(--line);border-radius:0;padding:.55em .7em;
}
.date-picker button{
  font-family:var(--mono);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;
  background:none;border:1px solid var(--line);color:var(--ink-2);padding:.55em .7em;cursor:pointer;
}
.date-picker button:hover{border-color:var(--ink);color:var(--ink);}

.slot-grid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:var(--line);border:1px solid var(--line);
}
@media(min-width:520px){.slot-grid{grid-template-columns:repeat(4,1fr);}}
@media(min-width:700px){.slot-grid{grid-template-columns:repeat(6,1fr);}}
.slot{
  background:var(--bg);padding:14px 6px;display:flex;flex-direction:column;align-items:center;gap:4px;
  font-family:var(--mono);border:0;cursor:pointer;color:var(--ink);
  transition:background-color .15s var(--ease),color .15s var(--ease);
}
.slot .hh{font-size:.9375rem;font-weight:500;}
.slot .st{font-size:.5625rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);}
.slot:hover:not(:disabled){background:var(--bg-2);}
.slot:disabled{cursor:not-allowed;opacity:.4;}
.slot.is-mine{background:var(--block);color:var(--block-ink);}
.slot.is-mine .st{color:var(--block-ink-2);}
.slot.is-mine:hover{background:var(--gron-djup,var(--block));}
.slot.is-past{opacity:.28;cursor:not-allowed;}

/* ---------- skeleton loader ----------
   Shape-matched to the slot grid it stands in for, not a spinner. */
.skel-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);}
@media(min-width:520px){.skel-grid{grid-template-columns:repeat(4,1fr);}}
@media(min-width:700px){.skel-grid{grid-template-columns:repeat(6,1fr);}}
.skel-cell{background:var(--bg);height:56px;position:relative;overflow:hidden;}
.skel-cell::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,var(--line-soft),transparent);
  transform:translateX(-100%);
}
@media(prefers-reduced-motion:no-preference){
  .skel-cell::after{animation:shimmer 1.4s var(--ease) infinite;}
  @keyframes shimmer{to{transform:translateX(100%);}}
}
