/* © 2026 BookWerksLLC. One Hour Forever: player pages (TASKS/09). Admin pages use style.css.
   From design/mockup.html: Warcraft in the chrome, plain and readable in the data. */

@font-face{font-family:"Cinzel";src:url("/static/fonts/cinzel-latin.woff2") format("woff2");
  font-weight:400 600;font-style:normal;font-display:swap}
/* Source Sans 3, subset and renamed "OHF Sans" inside the file as its OFL Reserved Font Name requires */
@font-face{font-family:"OHF Sans";src:url("/static/fonts/ohf-sans-latin.woff2") format("woff2");
  font-weight:400 600;font-style:normal;font-display:swap}

:root{
  color-scheme:dark;
  --night:#10161f; --stone:#1a222d; --stone-lip:#232d3a;
  --parchment:#e9ddc0; --ink:#2e2619;
  --gold:#c9a227; --gold-lit:#ffd100; --arcane:#82c5ff;
  --text:#d8d2c3; --muted:#8d9099;
  --combat:#4f9d4f; --running:#c9a227; --still:#b2473e; --town:#c57b36; --away:#7a5c9e; --other:#4a5666;
  /* the site's activities on the mockup palette (David, 2026-11-08) */
  --act-questing:var(--running); --act-grinding:var(--combat); --act-dungeon:var(--away);
  --act-travel:var(--other); --act-town:var(--town); --act-idle:var(--still);
  --measure:64ch;
  --serif:Cinzel,Georgia,serif;
  --sans:"OHF Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0}
body{
  background:var(--night);color:var(--text);
  font:400 17px/1.65 var(--sans);
  font-variant-numeric:tabular-nums lining-nums;
  padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);
  background-image:
    radial-gradient(ellipse 80% 50% at 50% -10%, rgba(130,197,255,.07), transparent 70%),
    repeating-linear-gradient(94deg, rgba(255,255,255,.012) 0 2px, transparent 2px 5px);
  overflow-x:hidden;
}
h1,h2,h3{font-family:var(--serif);font-weight:600;letter-spacing:.01em;margin:0}
a{color:var(--arcane)}
a:focus-visible,button:focus-visible,input:focus-visible{outline:2px solid var(--gold-lit);outline-offset:3px}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}

.wrap{max-width:1040px;margin:0 auto;padding:0 24px;position:relative;z-index:1}

/* The banner is atmosphere, not a backdrop: behind the top of the page only, under a scrim, gone
   before any data. A CSS background never blocks first paint. */
.sky{position:absolute;inset:0 0 auto;height:620px;z-index:0;overflow:hidden;pointer-events:none}
.sky::before{content:"";position:absolute;inset:0;
  background:url("/static/img/hero-band-1500.jpg") 50% 42%/cover no-repeat;
  opacity:.5;filter:saturate(.72) brightness(.62)}
@media (min-width:1500px){.sky::before{background-image:url("/static/img/hero-band-2400.jpg")}}
.sky::after{content:"";position:absolute;inset:0;
  background:
    linear-gradient(180deg, rgba(16,22,31,.55) 0%, rgba(16,22,31,.72) 38%, rgba(16,22,31,.94) 78%, var(--night) 100%),
    radial-gradient(ellipse 58% 70% at 50% 34%, rgba(16,22,31,.55), transparent 72%)}
.sky.short{height:340px}
/* a short band crops the art closer, so its lettering would read: fade it further on those pages */
.sky.short::before{opacity:.26;background-position:50% 12%}

/* masthead */
.mast{display:flex;align-items:center;gap:13px;padding:24px 0 0;flex-wrap:wrap}
.mast .logo{width:46px;height:46px;flex:none;filter:drop-shadow(0 2px 6px rgba(0,0,0,.7))}
.mast .home{display:flex;align-items:center;gap:13px;text-decoration:none}
.mast .name{font-family:var(--serif);font-size:19px;color:var(--text)}
.mast .sub{color:var(--muted);font-size:14px}
.mast nav{margin-left:auto;font-size:15px}
.mast nav a{margin-left:20px;color:var(--muted);text-decoration:none;border-bottom:1px solid transparent}
.mast nav a:hover{color:var(--text);border-bottom-color:var(--gold)}

.preview{margin:18px 0 0;padding:10px 14px;border:1px solid var(--gold);border-radius:3px;
  background:rgba(201,162,39,.12);color:var(--text);font-size:15px}

/* hero: the hour as a dial */
.hero{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:56px;align-items:center;padding:52px 0 44px}
.hero h1{font-size:clamp(34px,5vw,52px);line-height:1.12;margin-bottom:18px;text-shadow:0 2px 18px rgba(0,0,0,.85)}
.hero p{max-width:var(--measure);font-size:19px;text-shadow:0 1px 12px rgba(0,0,0,.8)}
.hero .quiet{color:var(--muted);font-size:16px}

.dial{position:relative;width:400px;height:400px;justify-self:center;max-width:100%}
.dial svg{display:block;width:100%;height:100%}
.dial .case{filter:drop-shadow(0 10px 26px rgba(0,0,0,.6))}
.dial-centre{position:absolute;inset:0;display:grid;place-content:center;text-align:center;pointer-events:none}
.dial-centre .big{font-family:var(--sans);font-weight:600;font-size:46px;color:var(--text);line-height:1}
.dial-centre .big small{font-size:24px;font-weight:400}
.dial-centre .lab{color:var(--muted);font-size:14px;margin-top:6px;max-width:150px}
.seg{transition:opacity .15s}
.dial:hover .seg{opacity:.45}
.dial .seg:hover{opacity:1}
.legend{margin:18px auto 0;display:grid;grid-template-columns:1fr 1fr;gap:4px 22px;font-size:15px;max-width:400px}
.legend div{display:flex;align-items:center;gap:9px;color:var(--muted)}
.legend i{width:11px;height:11px;border-radius:2px;flex:none}
.legend b{color:var(--text);font-weight:600;margin-left:auto}
.caption{color:var(--muted);font-size:14px;text-align:center;margin:12px auto 0;max-width:400px}

/* the scroll: the one parchment thing on the page, and it is the upload */
.scroll{background:var(--parchment);color:var(--ink);max-width:640px;margin:8px auto 0;padding:34px 38px 32px;
  border:1px solid #a98c4e;border-radius:3px;
  box-shadow:0 14px 40px rgba(0,0,0,.55), inset 0 0 70px rgba(168,134,74,.22);
  background-image:repeating-linear-gradient(101deg, rgba(120,95,50,.045) 0 3px, transparent 3px 7px)}
.scroll h2{font-size:25px;color:#43351f;margin-bottom:8px}
.scroll p{margin:0 0 20px;font-size:16px;color:#5a4a30;max-width:52ch}
.drop{border:1.5px dashed #a98c4e;border-radius:3px;background:rgba(255,255,255,.3);padding:22px 18px;text-align:center}
.drop .path{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;color:#5f4c2d;word-break:break-all;margin-top:14px}
.drop input[type=file]{font:400 15px var(--sans);color:var(--ink);max-width:100%;margin:0 0 12px}
.drop input[type=file]::file-selector-button{font:600 15px var(--sans);color:var(--ink);background:#f6eedb;
  border:1px solid #a98c4e;border-radius:3px;padding:7px 14px;margin-right:10px;cursor:pointer}
.drop input[type=file]::file-selector-button:hover{background:#fff8e6}
.scroll .fine{font-size:14px;color:#5f4c2d;margin:16px 0 0}
.scroll .fine a{color:#6a4f16}
.scroll .msg{margin:12px 0 0;font-size:15px;color:#5a4a30}
.scroll .msg.bad{color:#8a2318;font-weight:600}

.btn{font:600 17px/1 var(--sans);background:linear-gradient(#d8b23f,#a8842a);color:#27200f;
  border:1px solid #6f5a1d;border-radius:3px;padding:13px 26px;cursor:pointer;
  box-shadow:0 2px 0 #6f5a1d, inset 0 1px 0 rgba(255,255,255,.45)}
.btn:active{transform:translateY(1px);box-shadow:0 1px 0 #6f5a1d, inset 0 1px 0 rgba(255,255,255,.45)}
.btn:disabled{opacity:.6;cursor:default}

/* rules and sections */
.rule{height:1px;background:linear-gradient(90deg,transparent,var(--gold),transparent);opacity:.5;margin:64px 0 0}
section{padding:46px 0}
section h2{font-size:27px;margin-bottom:10px}
section > p{max-width:var(--measure);color:var(--muted)}
.cols{display:grid;grid-template-columns:repeat(3,1fr);gap:34px;margin-top:30px}
.cols h3{font-size:19px;color:var(--text);margin-bottom:7px}
.cols p{color:var(--muted);font-size:16px;margin:0}

/* data: plain, solid panels, nothing behind a number */
.panel{background:var(--stone);border:1px solid #2b3643;border-top-color:var(--stone-lip);border-radius:4px;padding:26px 28px;margin-top:22px}
.panel h3{font-family:var(--serif);font-size:18px;color:var(--gold-lit);margin-bottom:14px}
.panel h4{font:600 14px var(--sans);color:var(--muted);margin:0 0 6px;text-transform:uppercase;letter-spacing:.04em}
.panel p{margin:0 0 10px}
.panel .muted,.muted{color:var(--muted)}
table{width:100%;border-collapse:collapse}
th,td{text-align:left;padding:7px 10px 7px 0;border-bottom:1px solid #27313d;font-size:16px}
th{color:var(--muted);font-weight:600;font-size:14px}
td:last-child,th:last-child{text-align:right;padding-right:0}
td.num{white-space:nowrap}
.bar{height:9px;border-radius:2px;background:#27313d;overflow:hidden;min-width:60px}
.bar span{display:block;height:100%}
.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:22px}
.card{background:var(--stone);border:1px solid #2b3643;border-radius:4px;padding:16px 18px}
.card .n{font:600 28px/1.2 var(--sans);color:var(--text)}
.card .l{color:var(--muted);font-size:14px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:28px}
.result-top{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:40px;align-items:center;padding:40px 0 8px}
.result-top h1{font-size:clamp(30px,4.4vw,44px);line-height:1.15;margin-bottom:12px;text-shadow:0 2px 18px rgba(0,0,0,.85)}
.result-top .dial{width:340px;height:340px}

/* the seam: what the free view doesn't include, shown as one quiet blurred panel (ohf/tiers.py decides) */
.locked{position:relative;margin-top:22px;border-radius:4px;overflow:hidden}
/* the overlay sets the height; the blurred panel fills the space behind it at any width */
.locked .panel{position:absolute;inset:0;filter:blur(3.5px);opacity:.5;pointer-events:none;user-select:none;margin-top:0}
.locked .ghost{height:12px;border-radius:2px;background:#2b3643;margin:16px 0}
.locked .over{position:relative;display:grid;place-content:center;text-align:center;padding:38px 24px 30px}
.locked .over h3{font-family:var(--serif);font-size:21px;color:var(--text)}
.locked .over p{max-width:46ch;color:var(--muted);margin:8px auto 0;font-size:16px}
.email-row{margin-top:18px;display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.email-row input{font:400 16px var(--sans);background:#111923;border:1px solid #38424f;color:var(--text);
  padding:12px 14px;border-radius:3px;min-width:240px;max-width:100%}
.sr{position:absolute;left:-9999px}
.msg{font-size:15px;margin-top:10px;color:var(--muted)}
.msg.bad{color:#f0a08f}

.prose{max-width:var(--measure)}
.prose h1{font-size:clamp(28px,4vw,38px);margin:40px 0 8px}
.prose h2{font-size:21px;margin:30px 0 8px;color:var(--gold-lit)}
.prose li{margin:5px 0}

footer{color:var(--muted);font-size:14px;padding:40px 0 56px;border-top:1px solid #222b36;margin-top:40px}
footer a{color:var(--muted)}

@media (max-width:900px){
  .hero,.result-top{grid-template-columns:1fr;gap:34px;padding-top:34px}
  .dial,.result-top .dial{width:min(360px,86vw);height:min(360px,86vw)}
  .legend{grid-template-columns:1fr}
  .cols{grid-template-columns:1fr;gap:26px}
  .cards{grid-template-columns:1fr 1fr}
  .two{grid-template-columns:1fr}
  .scroll{padding:26px 22px}
}
@media (max-width:480px){
  .wrap{padding:0 16px}
  .mast .sub{display:none}
  .mast nav a{margin-left:14px}
  .panel{padding:20px 18px}
  .card .n{font-size:24px}
  .email-row input{min-width:0;width:100%}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
