/* ===========================================================================
   Pickleland TV — player chrome + the banner template
   ---------------------------------------------------------------------------
   Tokens are transcribed from the marketing site's design.md (the same ones
   flyers/social/_social.css uses). Don't invent hexes here.

   Everything is authored on a fixed 1920x1080 canvas (#stage) that player.js
   scales to the TV, so px values below are literal 1080p pixels. TVs are read
   from across a room: nothing meant to be read goes under 32px.
   =========================================================================== */

@font-face{font-family:'Inter';font-style:normal;font-weight:400 700;font-display:swap;src:url('/fonts/inter.woff2') format('woff2')}
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:400 700;font-display:swap;src:url('/fonts/space-grotesk.woff2') format('woff2')}

:root{
  --ink:#0F0A2E;
  --paper:#FBFAFF;
  --purple:#6D28D9;
  --purple-deep:#4C1D95;
  --purple-light:#C4B5FD;
  --blue:#2563EB;
  --blue-light:#93C5FD;
  --sky:#DBEAFE;
  --yellow:#FACC15;
  --line:#E9E5F5;
  --brand:linear-gradient(135deg,#6D28D9 0%,#2563EB 100%);
  --gold:linear-gradient(120deg,#FDE047 0%,#FB923C 100%);
  --display:'Space Grotesk',sans-serif;
  --body:'Inter',sans-serif;
  --footer:128px;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{width:100%;height:100%;overflow:hidden;background:#000;cursor:none}
body{font-family:var(--body);color:var(--ink);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}

/* --- player chrome ------------------------------------------------------- */
#stage{position:absolute;top:0;left:0;width:1920px;height:1080px;transform-origin:0 0;overflow:hidden;background:var(--ink)}
#stage.behind{visibility:hidden}
.layer{position:absolute;inset:0;opacity:0;transition:opacity .8s ease;z-index:1}
.layer.on{opacity:1;z-index:2}
.full{position:absolute;inset:0;width:100%;height:100%;border:0;object-fit:cover;background:var(--ink)}

#progress{position:absolute;left:0;right:0;bottom:0;height:6px;z-index:5;background:rgba(15,10,46,.08)}
#progress i{display:block;height:100%;width:0;background:var(--brand)}

#takeover{position:fixed;inset:0;width:100%;height:100%;border:0;background:var(--ink);z-index:10}
#takeover[hidden]{display:none}

#debug{position:fixed;top:0;left:0;right:0;z-index:20;padding:6px 12px;font:12px/1.4 ui-monospace,Menlo,monospace;color:#fff;background:rgba(0,0,0,.75)}

/* --- banner template ----------------------------------------------------- */
.banner{position:absolute;inset:0;overflow:hidden;color:#fff;background:linear-gradient(135deg,#4C1D95 0%,#6D28D9 42%,#2563EB 100%)}
.banner .court-grid{
  position:absolute;inset:0;pointer-events:none;
  background-image:
    repeating-linear-gradient(0deg,rgba(255,255,255,.055) 0 2px,transparent 2px 60px),
    repeating-linear-gradient(90deg,rgba(255,255,255,.055) 0 2px,transparent 2px 60px);
}

.banner .copy{
  position:absolute;left:104px;top:0;bottom:var(--footer);right:104px;
  display:flex;flex-direction:column;justify-content:center;gap:34px;
}
.banner.has-photo .copy{right:936px}

.banner .eyebrow{
  align-self:flex-start;padding:14px 30px;border-radius:999px;
  font:700 32px/1 var(--display);letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink);background:var(--yellow);
}
.banner h1{font-family:var(--display);font-weight:700;letter-spacing:-.035em;line-height:.98;text-wrap:balance}
.banner h1[data-size="xl"]{font-size:188px}
.banner h1[data-size="lg"]{font-size:148px}
.banner h1[data-size="md"]{font-size:116px}
.banner h1[data-size="sm"]{font-size:92px}
.banner.has-photo h1[data-size="xl"]{font-size:164px}
.banner.has-photo h1[data-size="lg"]{font-size:128px}
.banner.has-photo h1[data-size="md"]{font-size:100px}
.banner.has-photo h1[data-size="sm"]{font-size:80px}
.banner h1 em,.banner .sub em{font-style:normal;color:var(--yellow)}

.banner .sub{font-size:46px;line-height:1.25;font-weight:500;opacity:.92;max-width:1400px;text-wrap:balance}

/* A two-column grid so the labels line up whatever their width ($59/mo vs $119/mo). */
.banner .points{list-style:none;display:grid;grid-template-columns:auto 1fr;align-items:baseline;gap:14px 32px;margin-top:6px;font-size:42px;line-height:1.2;font-weight:500}
.banner .points li{display:contents}
.banner .points li > span:only-child{grid-column:1 / -1}
.banner .points b{
  font:700 34px/1 var(--display);letter-spacing:.08em;text-transform:uppercase;color:var(--yellow);
}

.banner .photo{
  position:absolute;top:72px;right:72px;bottom:calc(var(--footer) + 64px);width:800px;
  border-radius:44px;overflow:hidden;box-shadow:0 40px 80px -30px rgba(15,10,46,.7);
  border:6px solid rgba(255,255,255,.9);
}
.banner .photo img{width:100%;height:100%;object-fit:cover;display:block}

/* The sticker: one short word or price, optionally a line under it. */
.banner .badge{
  position:absolute;right:120px;top:50%;width:400px;height:400px;margin-top:calc(-200px - var(--footer) / 2);
  border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  text-align:center;padding:40px;color:var(--ink);background:var(--gold);
  transform:rotate(-8deg);box-shadow:0 30px 60px -20px rgba(15,10,46,.6);
}
.banner.has-photo .badge{right:auto;left:888px;top:36px;width:264px;height:264px;margin-top:0;padding:26px;z-index:3}
.banner .badge strong{font:700 112px/.95 var(--display);letter-spacing:-.04em}
.banner .badge span{font-size:32px;line-height:1.15;font-weight:600}
.banner.has-photo .badge strong{font-size:76px}
.banner.has-photo .badge span{font-size:25px}
.banner:not(.has-photo) .copy:has(~ .badge){right:600px}

.banner footer{
  position:absolute;left:0;right:0;bottom:0;height:var(--footer);
  display:flex;align-items:center;gap:48px;padding:0 104px;
  background:var(--paper);color:var(--ink);
}
.banner footer .logo{height:50px;width:auto;flex:none}
.banner footer .cta{
  font:600 38px/1.1 var(--display);letter-spacing:-.01em;padding-left:48px;border-left:3px solid var(--line);
}

.banner .qr{
  position:absolute;right:72px;bottom:28px;z-index:4;width:268px;padding:22px 22px 18px;border-radius:32px;
  background:#fff;color:var(--ink);text-align:center;box-shadow:0 30px 60px -20px rgba(15,10,46,.55);
}
.banner .qr-code svg{display:block;width:100%;height:auto}
.banner .qr-label{margin-top:14px;font:700 28px/1.1 var(--display);letter-spacing:-.01em}
.banner.has-qr footer{padding-right:400px}
.banner.has-qr.has-photo .photo{bottom:calc(var(--footer) + 64px)}

/* --- themes -------------------------------------------------------------- */
.banner.theme-ink{background:radial-gradient(1200px 800px at 85% 10%,#2A1A6B 0%,var(--ink) 60%)}
.banner.theme-ink h1 em,.banner.theme-ink .sub em{color:var(--purple-light)}

.banner.theme-paper{background:var(--paper);color:var(--ink)}
.banner.theme-paper .court-grid{
  background-image:
    repeating-linear-gradient(0deg,rgba(109,40,217,.06) 0 2px,transparent 2px 60px),
    repeating-linear-gradient(90deg,rgba(109,40,217,.06) 0 2px,transparent 2px 60px);
}
.banner.theme-paper h1 em,.banner.theme-paper .sub em{
  background:var(--brand);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.banner.theme-paper .eyebrow{color:#fff;background:var(--brand)}
.banner.theme-paper .points b{color:var(--purple)}
.banner.theme-paper footer{background:var(--ink);color:#fff}
.banner.theme-paper footer .logo{filter:brightness(0) invert(1)}
.banner.theme-paper footer .cta{border-left-color:rgba(255,255,255,.25)}
.banner.theme-paper .photo{border-color:#fff;box-shadow:0 40px 80px -30px rgba(76,29,149,.45)}
