/* ============================================================================
   TeedOff — "field dossier scoreboard"
   Display: Barlow Condensed (jersey/leaderboard). Data: system mono (scorecard
   ledger). Body: system sans. Accent: flagstick blaze, spent sparingly.
   ========================================================================== */
@font-face{font-family:"Barlow Condensed";font-weight:600;font-style:normal;font-display:swap;
  src:url("/static/vendor/barlow-cond-600.woff2") format("woff2");}
@font-face{font-family:"Barlow Condensed";font-weight:700;font-style:normal;font-display:swap;
  src:url("/static/vendor/barlow-cond-700.woff2") format("woff2");}
/* brand wordmark only — rounded, friendly, echoes the golf-ball mascot (subsetted to TeedOff's letters) */
@font-face{font-family:"Baloo 2";font-weight:800;font-style:normal;font-display:swap;
  src:url("/static/vendor/baloo2-800.woff2") format("woff2");}

:root{
  /* light = on-course, sunlight-first (warm scorecard manila, olive-biased) */
  --ground:#efe9d9; --panel:#f6f2e6; --panel-2:#e6ddc4; --line:#d3c8a8;
  --ink:#1a1e12; --ink-2:#5c5a44; --sand:#8a7f5c;
  --turf:#3f7e26; --turf-ink:#fff; --blaze:#e8531b;
  /* golf score semantics (distinct from the blaze accent) */
  --eagle:#c8471c; --birdie:#2f8f3e; --par:var(--ink); --bogey:#b7791a; --dbl:#c0392b;
  --disp:"Barlow Condensed","Arial Narrow",system-ui,sans-serif;
  --brand:"Baloo 2",-apple-system,system-ui,sans-serif;
  --mono:ui-monospace,"SF Mono",Menlo,monospace;
  --body:-apple-system,system-ui,"Segoe UI",sans-serif;
  --tab-h:60px;
}
@media (prefers-color-scheme:dark){
  :root{
    --ground:#0d110b; --panel:#151c12; --panel-2:#1e281a; --line:#2c3a26;
    --ink:#e9ede0; --ink-2:#9aa58a; --sand:#b8ac83;
    --turf:#5eb23a; --turf-ink:#08130a; --blaze:#ff6a2b;
    --eagle:#ff6a2b; --birdie:#5eb23a; --par:var(--ink); --bogey:#e0a22e; --dbl:#e5615a;
  }
}
:root[data-theme="light"]{
  --ground:#efe9d9; --panel:#f6f2e6; --panel-2:#e6ddc4; --line:#d3c8a8;
  --ink:#1a1e12; --ink-2:#5c5a44; --sand:#8a7f5c; --turf:#3f7e26; --turf-ink:#fff;
  --blaze:#e8531b; --eagle:#c8471c; --birdie:#2f8f3e; --bogey:#b7791a; --dbl:#c0392b;
}
:root[data-theme="dark"]{
  --ground:#0d110b; --panel:#151c12; --panel-2:#1e281a; --line:#2c3a26;
  --ink:#e9ede0; --ink-2:#9aa58a; --sand:#b8ac83; --turf:#5eb23a; --turf-ink:#08130a;
  --blaze:#ff6a2b; --eagle:#ff6a2b; --birdie:#5eb23a; --bogey:#e0a22e; --dbl:#e5615a;
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;-webkit-text-size-adjust:100%;text-size-adjust:100%;}
/* ground lives on html so it paints edge-to-edge — under the status bar, the home
   indicator, and any browser chrome — with no bare-canvas black bands */
html{background:var(--ground);
  background-image:
    linear-gradient(var(--line) 1px,transparent 1px),
    linear-gradient(90deg,var(--line) 1px,transparent 1px);
  background-size:44px 44px,44px 44px;background-position:-1px -1px;
  background-attachment:fixed;min-height:100%;}
body{background:transparent;color:var(--ink);font-family:var(--body);
  -webkit-font-smoothing:antialiased;min-height:100dvh;}
@media (prefers-color-scheme:dark){html{background-blend-mode:soft-light;}}

h1,h2,h3{font-family:var(--disp);font-weight:700;text-transform:uppercase;
  letter-spacing:.01em;text-wrap:balance;margin:0;line-height:.98;}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums;}
.eyebrow{font-family:var(--mono);font-size:.68rem;letter-spacing:.22em;text-transform:uppercase;
  color:var(--blaze);font-weight:600;}

button{font-family:var(--body);border:0;cursor:pointer;color:var(--ink);
  background:var(--panel-2);font-size:1rem;font-weight:600;}
button:active{transform:translateY(1px);}
button:disabled{opacity:.35;}
input,select{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);
  color:var(--ink);padding:.85rem 1rem;font-size:1.05rem;width:100%;font-family:var(--body);}
input:focus,select:focus,button:focus-visible{outline:2px solid var(--blaze);outline-offset:1px;}

/* ---------- app shell ---------- */
#app{max-width:540px;margin:0 auto;
  padding:calc(env(safe-area-inset-top) + 14px) 16px calc(var(--tab-h) + env(safe-area-inset-bottom) + 20px);}
.loading{text-align:center;padding:5rem 0;color:var(--ink-2);font-family:var(--disp);
  text-transform:uppercase;letter-spacing:.15em;}

/* screen title bar */
.screenhead{display:flex;align-items:baseline;justify-content:space-between;
  margin:.2rem 0 1.1rem;border-bottom:2px solid var(--ink);padding-bottom:.5rem;}
.screenhead h1{font-size:2rem;}
.screenhead .tag{font-family:var(--mono);font-size:.7rem;color:var(--ink-2);letter-spacing:.12em;text-transform:uppercase;}

/* clear screen header: big title + a plain, readable one-line purpose (function, not flavor) */
.shead{margin:.2rem 0 1.1rem;border-bottom:2px solid var(--ink);padding-bottom:.6rem;}
.shead h1{font-size:2rem;}
.shead .purpose{font-family:var(--body);font-size:.95rem;color:var(--ink-2);
  margin-top:.35rem;line-height:1.35;max-width:36ch;text-transform:none;letter-spacing:0;}

.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);
  padding:1.1rem;margin:.9rem 0;}
.row{display:flex;gap:.6rem;align-items:center;}
.row>*{flex:1;}
.spread{display:flex;justify-content:space-between;align-items:center;}
.dim{color:var(--ink-2);font-size:.85rem;}
.center{text-align:center;}

/* ---------- bottom tab bar (fixes iOS standalone hidden-nav) ---------- */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:100;
  display:flex;justify-content:space-around;
  background:var(--panel);
  border-top:1.5px solid var(--line);
  padding-bottom:env(safe-area-inset-bottom);}
.tabbar button{flex:1;background:none;display:flex;flex-direction:column;align-items:center;gap:2px;
  height:var(--tab-h);color:var(--ink-2);font-family:var(--mono);font-size:.6rem;
  letter-spacing:.08em;text-transform:uppercase;padding:0;}
.tabbar button svg{width:23px;height:23px;stroke:currentColor;fill:none;stroke-width:1.9;}
.tabbar button.on{color:var(--blaze);}
.tabbar button.on svg{filter:drop-shadow(0 0 6px color-mix(in srgb,var(--blaze) 45%,transparent));}

/* ---------- home: tale of the tape ---------- */
.opsname{margin:.1rem 0 1.2rem;}
.opsname h1{font-size:2.5rem;line-height:.9;}
.opsname .sub{font-family:var(--mono);font-size:.66rem;letter-spacing:.2em;color:var(--ink-2);
  text-transform:uppercase;margin-top:.3rem;}

.tape{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);overflow:hidden;
  box-shadow:6px 6px 0 color-mix(in srgb,var(--ink) 12%,transparent);}
.tape .band{background:var(--ink);color:var(--ground);font-family:var(--mono);font-size:.62rem;
  letter-spacing:.22em;text-transform:uppercase;text-align:center;padding:.35rem;}
.tape .fight{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:1.1rem .6rem;}
.tape .side{text-align:center;display:flex;flex-direction:column;gap:.15rem;}
.tape .side .who{font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.25rem;
  letter-spacing:.02em;color:var(--ink);}
.tape .side .w{font-family:var(--mono);font-size:3.4rem;font-weight:700;line-height:.9;
  font-variant-numeric:tabular-nums;}
.tape .side.lead .w{color:var(--turf);}
.tape .side.trail .w{color:var(--ink-2);}
.tape .side .wl{font-family:var(--mono);font-size:.6rem;letter-spacing:.15em;color:var(--ink-2);text-transform:uppercase;}
.tape .vs{font-family:var(--disp);font-weight:700;font-size:1.1rem;color:var(--blaze);
  transform:rotate(-8deg);padding:0 .3rem;}
.tape .status{border-top:1px dashed var(--line);display:flex;justify-content:space-between;
  align-items:center;padding:.6rem 1rem;font-family:var(--mono);font-size:.72rem;text-transform:uppercase;
  letter-spacing:.05em;color:var(--ink-2);}
.pips{display:flex;gap:4px;}
.pip{width:16px;height:16px;border-radius:var(--r-ctl);display:grid;place-items:center;font-family:var(--mono);
  font-size:.6rem;font-weight:700;color:#fff;}
.pip.W{background:var(--birdie);}.pip.L{background:var(--dbl);}.pip.T{background:var(--sand);color:var(--ink);}
.tape.empty .fight{padding:1.6rem 1rem;text-align:center;grid-template-columns:1fr;}
.tape.empty .msg{font-family:var(--disp);text-transform:uppercase;font-size:1.4rem;letter-spacing:.03em;}

/* home action menu — briefing list, not rounded pills */
.menu{display:flex;flex-direction:column;gap:.55rem;margin-top:1.1rem;}
.op{display:flex;align-items:center;gap:.9rem;background:var(--panel);border:1px solid var(--line);
  border-left:5px solid var(--sand);border-radius:var(--r-ctl);padding:1rem 1.1rem;text-align:left;width:100%;}
.op .ic{width:26px;height:26px;stroke:var(--ink);fill:none;stroke-width:1.9;flex:0 0 auto;}
.op .t{flex:1;display:flex;flex-direction:column;gap:1px;}
.op .t b{font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.15rem;letter-spacing:.02em;}
.op .t span{font-family:var(--mono);font-size:.66rem;color:var(--ink-2);text-transform:uppercase;letter-spacing:.08em;}
.op .chev{color:var(--ink-2);font-size:1.3rem;}
.op.primary{background:var(--turf);border-color:var(--turf);border-left-color:color-mix(in srgb,var(--turf) 60%,#000);}
.op.primary .ic{stroke:var(--turf-ink);}.op.primary .t b,.op.primary .t span,.op.primary .chev{color:var(--turf-ink);}
.secttl{font-family:var(--mono);font-size:.68rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-2);margin:1.4rem 0 .5rem;}
.op.live{border-left-color:var(--birdie);}
.op.live .t{cursor:pointer;}
.endbtn{flex:0 0 auto;font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;
  background:transparent;border:1px solid var(--line);border-radius:var(--r-ctl);color:var(--ink-2);padding:.5rem .65rem;}
.endbtn:active{background:var(--dbl);color:#fff;border-color:var(--dbl);}

/* course picker (new round) */
.copt{display:flex;justify-content:space-between;align-items:center;gap:.6rem;width:100%;text-align:left;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);padding:.85rem 1rem;margin-bottom:.5rem;}
.copt b{font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.1rem;letter-spacing:.02em;color:var(--ink);}
.copt.sel{border-color:var(--turf);border-width:2px;background:color-mix(in srgb,var(--turf) 14%,var(--panel));}
.copt .badge{flex:0 0 auto;font-family:var(--mono);font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;
  padding:.28rem .5rem;border-radius:var(--r-ctl);}
.copt .badge.gps{background:var(--turf);color:var(--turf-ink);}
.copt .badge.nomap{background:var(--panel-2);color:var(--ink-2);}

/* ---------- round entry ---------- */
.holehead{display:flex;align-items:center;justify-content:space-between;gap:.4rem;margin:.1rem 0 .7rem;}
.holehead button{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);
  width:60px;height:60px;font-size:1.9rem;font-weight:700;color:var(--ink);}
.holehead .mid{text-align:center;flex:1;}
.holehead .holeno{font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:2.1rem;line-height:.9;}
.holehead .course{font-family:var(--mono);font-size:.66rem;color:var(--ink-2);text-transform:uppercase;letter-spacing:.1em;}

.gpspanel{background:var(--ink);color:var(--ground);border-radius:var(--r-ctl);padding:.7rem 1rem;margin-bottom:.7rem;}
.gpspanel .dists{display:flex;justify-content:space-around;font-family:var(--mono);font-size:.62rem;
  text-transform:uppercase;letter-spacing:.1em;}
.gpspanel .dists span{display:flex;flex-direction:column;align-items:center;gap:1px;color:color-mix(in srgb,var(--ground) 65%,var(--ink-2));}
.gpspanel .dists b{font-size:1.7rem;font-variant-numeric:tabular-nums;}
.gpspanel .dists .cen b{color:var(--blaze);}
.gpspanel .club{text-align:center;font-family:var(--mono);font-size:.78rem;color:var(--turf);
  margin-top:.4rem;font-weight:600;filter:brightness(1.3);}
/* the caddie "talking": prose advice, not a data readout */
.gpspanel .caddiesay{text-align:left;font-family:var(--body);font-size:1rem;line-height:1.5;
  color:var(--ground);text-transform:none;letter-spacing:0;margin-top:.5rem;filter:none;font-weight:400;}
.gpspanel .caddiesay .lead{display:block;font-family:var(--disp);font-weight:700;text-transform:uppercase;
  font-size:.6rem;letter-spacing:.2em;color:var(--blaze);margin-bottom:.3rem;}
.gpspanel .caddiesay b{color:var(--birdie);font-weight:700;filter:brightness(1.25);}

.parpick{display:flex;gap:.5rem;margin-bottom:.7rem;}
.parpick button{flex:1;background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);
  padding:.7rem;font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.05rem;color:var(--ink);}
.parpick button.on{background:var(--ink);color:var(--ground);border-color:var(--ink);}

.playerrow{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);padding:.85rem 1rem;margin:.6rem 0;}
.playerrow .name{font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.15rem;
  letter-spacing:.02em;margin-bottom:.5rem;display:flex;justify-content:space-between;align-items:baseline;}
.playerrow .name .diff{font-family:var(--mono);font-size:.8rem;}
.stepper{display:flex;align-items:center;gap:.7rem;}
.stepper button{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-ctl);
  width:66px;height:66px;font-size:2rem;font-weight:700;color:var(--ink);flex:0 0 auto;}
.stepper .val{flex:1;text-align:center;font-family:var(--disp);font-weight:700;font-size:3.2rem;line-height:.85;
  font-variant-numeric:tabular-nums;}
.stepper .val small{display:block;font-family:var(--mono);font-size:.62rem;color:var(--ink-2);
  text-transform:uppercase;letter-spacing:.12em;font-weight:600;margin-top:2px;}
.val.eagle{color:var(--eagle);}.val.birdie{color:var(--birdie);}.val.bogey{color:var(--bogey);}.val.dbl{color:var(--dbl);}

.chips{display:flex;gap:.4rem;margin-top:.6rem;flex-wrap:wrap;align-items:center;}
.chips .lbl{flex:0 0 58px;font-family:var(--mono);font-size:.64rem;color:var(--ink-2);
  text-transform:uppercase;letter-spacing:.08em;}
.chips button{min-width:46px;height:42px;padding:0 .6rem;background:var(--panel-2);border:1px solid var(--line);
  border-radius:var(--r-ctl);font-family:var(--mono);font-size:1rem;color:var(--ink);}
.chips button.on{background:var(--turf);border-color:var(--turf);color:var(--turf-ink);}
.chips button.off{background:var(--dbl);border-color:var(--dbl);color:#fff;}

.footpad{height:56px;}
.footerbar{position:fixed;left:0;right:0;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom));
  background:var(--ink);color:var(--ground);max-width:540px;margin:0 auto;
  display:flex;justify-content:space-between;align-items:center;gap:.5rem;
  padding:.6rem 1rem;font-family:var(--mono);font-size:.82rem;font-variant-numeric:tabular-nums;
  border-top:2px solid var(--blaze);}
.footerbar .dim{color:color-mix(in srgb,var(--ground) 60%,var(--ink-2));}

button.big{width:100%;padding:1.1rem;font-family:var(--disp);font-weight:700;text-transform:uppercase;
  font-size:1.3rem;letter-spacing:.03em;border-radius:var(--r-ctl);background:var(--panel-2);color:var(--ink);border:1px solid var(--line);}
button.big.primary,button.primary{background:var(--turf);color:var(--turf-ink);border-color:var(--turf);}
button.danger{background:var(--dbl);color:#fff;}
button.restart{background:var(--panel-2);border:1px solid var(--line);flex:0 0 auto;border-radius:var(--r-ctl);padding:.9rem 1.1rem;}
.btns{display:flex;gap:.7rem;}.btns button{flex:1;padding:1rem;border-radius:var(--r-ctl);font-family:var(--disp);
  text-transform:uppercase;font-weight:700;font-size:1.1rem;letter-spacing:.02em;}
.start{background:var(--turf);color:var(--turf-ink);}.stop{background:var(--dbl);color:#fff;}

/* ---------- scorecard grid ---------- */
.cardgrid{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-ctl);margin:.6rem 0;}
.cardgrid table{border-collapse:collapse;font-family:var(--mono);font-variant-numeric:tabular-nums;
  font-size:.82rem;width:100%;}
.cardgrid th,.cardgrid td{border:1px solid var(--line);padding:.4rem .3rem;text-align:center;min-width:26px;}
.cardgrid thead th,.cardgrid tr:first-child th{background:var(--ink);color:var(--ground);
  font-family:var(--disp);font-weight:700;text-transform:uppercase;letter-spacing:.05em;}
.cardgrid th:first-child{text-align:left;padding-left:.6rem;font-family:var(--disp);text-transform:uppercase;background:var(--panel-2);color:var(--ink);}
.cardgrid .parrow td{background:var(--panel-2);color:var(--ink-2);font-size:.72rem;}
.cardgrid td.eagle{background:color-mix(in srgb,var(--eagle) 22%,transparent);color:var(--eagle);font-weight:700;border-radius:50%;}
.cardgrid td.birdie{color:var(--birdie);font-weight:700;}
.cardgrid td.bogey{color:var(--bogey);}
.cardgrid td.dbl{color:var(--dbl);font-weight:700;}
.cardgrid td.sum{background:var(--panel-2);font-weight:700;}

/* ---------- shots ---------- */
.clubgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;}
.clubgrid button{padding:1.1rem .3rem;background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);
  font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.2rem;color:var(--ink);
  display:flex;flex-direction:column;gap:2px;}
.clubgrid button span{font-family:var(--mono);font-size:.68rem;color:var(--ink-2);font-weight:400;}
.clubgrid button.on{background:var(--turf);border-color:var(--turf);color:var(--turf-ink);}
.clubgrid button.on span{color:color-mix(in srgb,var(--turf-ink) 80%,transparent);}
/* distance slider — big thumb, glove-friendly */
.slidewrap{margin:.6rem 0 1.1rem;}
.slideval{text-align:center;margin-bottom:.3rem;}
.slideval b{font-family:var(--disp);font-size:3rem;font-weight:700;line-height:1;color:var(--turf);}
.slideval span{display:block;font-size:.66rem;color:var(--ink-2);text-transform:uppercase;letter-spacing:.12em;}
input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:44px;background:transparent;
  border:0;padding:0;touch-action:none;}
input[type=range]::-webkit-slider-runnable-track{height:10px;border-radius:5px;
  background:linear-gradient(90deg,var(--turf),var(--blaze));border:1px solid var(--line);}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:34px;height:34px;border-radius:50%;
  background:var(--panel);border:3px solid var(--ink);margin-top:-13px;box-shadow:0 1px 4px #0007;}
input[type=range]::-moz-range-track{height:10px;border-radius:5px;
  background:linear-gradient(90deg,var(--turf),var(--blaze));border:1px solid var(--line);}
input[type=range]::-moz-range-thumb{width:34px;height:34px;border-radius:50%;
  background:var(--panel);border:3px solid var(--ink);box-shadow:0 1px 4px #0007;}
.slidescale{display:flex;justify-content:space-between;font-size:.6rem;color:var(--ink-2);
  padding:0 4px;margin-top:2px;}
.resultrow{display:flex;gap:.45rem;}
.resultrow button{flex:1;padding:.85rem .2rem;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--r-ctl);font-family:var(--mono);font-size:.78rem;text-transform:uppercase;color:var(--ink);
  display:flex;flex-direction:column;gap:3px;}
.shotlist .row{padding:.5rem 0;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:.9rem;}
.shotlist .row b{color:var(--turf);}

/* ---------- stats ---------- */
.statgrid{display:grid;grid-template-columns:1fr 1fr;gap:.55rem;}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);padding:.8rem;text-align:center;}
.stat b{font-family:var(--mono);font-size:1.7rem;font-variant-numeric:tabular-nums;display:block;color:var(--ink);}
.stat span{font-family:var(--mono);font-size:.62rem;color:var(--ink-2);text-transform:uppercase;letter-spacing:.1em;}
.stat.h2h b{color:var(--turf);}
canvas{max-width:100%;}
table.mini{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:.9rem;}
table.mini th{font-family:var(--disp);text-transform:uppercase;text-align:left;color:var(--ink-2);
  border-bottom:2px solid var(--ink);padding:.4rem .3rem;letter-spacing:.03em;}
table.mini td{padding:.5rem .3rem;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;}
table.mini td.num{text-align:right;}

/* ---------- map / mapper ---------- */
#map,#bigmap{height:52vh;border-radius:var(--r-ctl);background:#0a0d0b;border:1px solid var(--line);}
.leaflet-container{background:#0a0d0b;}
/* draggable mapper markers */
.mk{display:grid;place-items:center;font-family:var(--mono);font-weight:700;line-height:1;}
.mk.tee{width:30px;height:30px;border-radius:50%;background:#fff;color:#0d1109;
  border:2px solid #ff6a2b;font-size:.95rem;box-shadow:0 1px 5px #000a;cursor:grab;}
.mk.pin{font-size:28px;filter:drop-shadow(0 2px 3px #000b);cursor:grab;}
.mk.ghost{width:20px;height:20px;border-radius:50%;background:#000a;color:#fff;font-size:.62rem;
  border:1px solid #ffffff66;}
.mk.bend{width:18px;height:18px;border-radius:50%;background:#ff6a2b;border:2px solid #fff;
  box-shadow:0 1px 4px #000a;cursor:grab;}
.mk.mid{width:20px;height:20px;border-radius:50%;background:#0009;color:#ff6a2b;font-size:.9rem;
  border:1px dashed #ff6a2b99;cursor:grab;}
.mk.fwv{width:16px;height:16px;border-radius:50%;background:#7fbf7f;border:2px solid #fff;
  box-shadow:0 1px 3px #000a;cursor:grab;}
.mk.fwmid{width:16px;height:16px;border-radius:50%;background:#0009;color:#7fbf7f;font-size:.8rem;
  border:1px dashed #7fbf7f99;cursor:grab;}
/* hole list (reorder/add/remove) */
.holerow{display:flex;align-items:center;gap:.7rem;padding:.6rem .2rem;border-bottom:1px solid var(--line);
  background:var(--panel);}
.holerow .grab{font-size:1.2rem;color:var(--ink-2);cursor:grab;touch-action:none;padding:.3rem .45rem;
  user-select:none;-webkit-user-select:none;}
.holerow .hno{font-weight:700;font-size:1.05rem;flex:0 0 46px;}
.holerow .hmeta{flex:1;color:var(--ink-2);font-size:.8rem;}
.holerow.dragging{opacity:.55;background:var(--panel-2);outline:2px solid var(--blaze);}
details{margin-top:1rem;}
summary{cursor:pointer;color:var(--ink-2);font-family:var(--mono);font-size:.8rem;text-transform:uppercase;
  letter-spacing:.08em;user-select:none;}
.cheats{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem;margin-top:.8rem;}
.cheats button{font-family:var(--mono);font-size:.82rem;padding:.6rem;background:var(--panel-2);
  border:1px solid var(--line);border-radius:var(--r-ctl);color:var(--ink);}
.admin{display:flex;gap:.5rem;margin-top:.7rem;}
.admin input{flex:1;min-width:0;}
.admin button{flex:0 0 auto;font-family:var(--mono);font-size:.82rem;padding:.6rem .9rem;background:var(--panel-2);
  border:1px solid var(--line);border-radius:var(--r-ctl);color:var(--ink);}
pre.out{background:var(--ink);color:var(--ground);border-radius:var(--r-ctl);padding:.6rem .8rem;font-size:.72rem;
  white-space:pre-wrap;max-height:8rem;overflow-y:auto;margin:.6rem 0 0;display:none;font-family:var(--mono);}
.who{font-family:var(--mono);font-size:.8rem;color:var(--birdie);margin:-.2rem 0 .7rem;min-height:1rem;}
.addr{font-family:var(--mono);font-size:.68rem;color:var(--ink-2);margin-top:.8rem;text-transform:uppercase;letter-spacing:.05em;}

/* ---------- auth ---------- */
.authpage{display:flex;min-height:100dvh;align-items:center;justify-content:center;padding:1.25rem;
  background:var(--ground);overflow-x:hidden;}
.authcard{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);padding:1.6rem;
  width:min(400px,calc(100vw - 2.5rem));display:flex;flex-direction:column;gap:.9rem;
  box-shadow:6px 6px 0 color-mix(in srgb,var(--ink) 14%,transparent);}
.authcard h1{font-size:2.3rem;line-height:.92;}
.authcard .sub{margin:-.3rem 0 .4rem;font-family:var(--mono);font-size:.7rem;letter-spacing:.15em;
  text-transform:uppercase;color:var(--blaze);}
.authcard .big{background:var(--turf);color:var(--turf-ink);}
.invitebox{background:var(--ink);color:var(--ground);border-radius:var(--r-ctl);padding:.7rem;word-break:break-all;
  font-family:var(--mono);font-size:.82rem;}
.err{color:var(--dbl);min-height:1.2em;font-family:var(--mono);font-size:.85rem;}

#toast{position:fixed;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 14px);left:50%;
  transform:translateX(-50%);background:var(--ink);color:var(--ground);padding:.6rem 1.2rem;border-radius:var(--r-ctl);
  opacity:0;transition:opacity .25s;font-family:var(--mono);font-size:.85rem;pointer-events:none;z-index:200;
  max-width:88vw;border-left:4px solid var(--blaze);}

/* ---------- onboarding walkthrough (first run) ---------- */
.walk{position:fixed;inset:0;z-index:300;background:color-mix(in srgb,var(--ground) 94%,#000);
  display:flex;flex-direction:column;
  padding:calc(env(safe-area-inset-top) + 1.2rem) 1.3rem calc(env(safe-area-inset-bottom) + 1.3rem);}
.walk .wtop{display:flex;justify-content:flex-end;min-height:2rem;}
.walk .skip{background:none;color:var(--ink-2);font-family:var(--mono);font-size:.72rem;
  letter-spacing:.12em;text-transform:uppercase;padding:.4rem .2rem;font-weight:600;}
.walk .wbody{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;
  gap:1.1rem;max-width:32ch;margin:0 auto;text-align:center;}
.walk .wicon svg{width:66px;height:66px;stroke:var(--blaze);fill:none;stroke-width:1.7;
  filter:drop-shadow(0 0 12px color-mix(in srgb,var(--blaze) 35%,transparent));}
.walk .wbody h2{font-family:var(--disp);font-weight:700;font-size:2.2rem;text-transform:uppercase;
  color:var(--ink);line-height:1;}
.walk .wbody p{font-family:var(--body);font-size:1.08rem;line-height:1.5;color:var(--ink-2);}
.walk .wdots{display:flex;gap:.45rem;justify-content:center;margin-top:.3rem;}
.walk .wdots i{width:7px;height:7px;border-radius:50%;background:var(--line);transition:background .2s;}
.walk .wdots i.on{background:var(--blaze);}
.walk .wnext{width:100%;}
.walk .wbody{animation:walkin .28s ease;}
@keyframes walkin{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:none;}}

/* ---------- one-time coach-mark tip (points at a real control) ---------- */
.tip{background:var(--panel);border:1.5px solid var(--blaze);border-left-width:4px;border-radius:var(--r-ctl);
  padding:.7rem .9rem;margin:.5rem 0;display:flex;gap:.6rem;align-items:flex-start;
  font-family:var(--body);font-size:.9rem;line-height:1.4;color:var(--ink);}
.tip .tiptxt{flex:1;}
.tip b{font-family:var(--disp);text-transform:uppercase;letter-spacing:.02em;font-size:.95rem;color:var(--blaze);}
.tip .tipx{background:none;color:var(--ink-2);font-family:var(--mono);font-size:1rem;padding:0 .2rem;flex:0 0 auto;}

/* ---------- stats: scorecard tally strip, range meters, par cells (TeedOff own forms) ---------- */
.ceyebrow{font-family:var(--mono);font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--blaze);font-weight:700;margin-bottom:.8rem;}
.ceyebrow .dim{color:var(--ink-2);font-weight:400;letter-spacing:.08em;font-size:.66rem;}
.ceyebrow .dim b{color:var(--ink);}
/* score tally: big avg stamp + a segmented scorecard strip of the round mix */
.scoretally{display:flex;align-items:stretch;gap:1rem;}
.scorestamp{flex:0 0 auto;display:flex;flex-direction:column;justify-content:center;align-items:center;
  padding-right:1rem;border-right:1px solid var(--line);}
.scorestamp b{font-family:var(--disp);font-weight:700;font-size:3.2rem;line-height:.9;color:var(--ink);}
.scorestamp span{font-family:var(--mono);font-size:.54rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);margin-top:.2rem;}
.tallywrap{flex:1;display:flex;flex-direction:column;gap:.6rem;justify-content:center;min-width:0;}
.tallybar{display:flex;height:40px;border-radius:var(--r-ctl);overflow:hidden;border:1px solid var(--line);}
.tallybar .seg{display:flex;align-items:center;justify-content:center;min-width:0;overflow:hidden;
  border-right:1.5px solid color-mix(in srgb,var(--ground) 45%,transparent);}
.tallybar .seg:last-child{border-right:0;}
.tallybar .seg span{font-family:var(--mono);font-weight:700;font-size:.8rem;color:#12160f;}
.tallybar .seg.birdie{background:var(--birdie);} .tallybar .seg.par{background:var(--sand);}
.tallybar .seg.bogey{background:var(--bogey);} .tallybar .seg.dbl{background:var(--dbl);}
.tallybar .seg.empty{flex:1;background:var(--line);}
.tallykey{display:flex;flex-wrap:wrap;gap:.3rem .9rem;font-family:var(--mono);font-size:.72rem;color:var(--ink-2);}
.tallykey span{display:inline-flex;align-items:center;gap:.35rem;}
.tallykey i{width:9px;height:9px;border-radius:var(--r-ctl);flex:0 0 auto;}
.tallykey b{color:var(--ink);font-variant-numeric:tabular-nums;}
.tallykey i.birdie{background:var(--birdie);} .tallykey i.par{background:var(--sand);}
.tallykey i.bogey{background:var(--bogey);} .tallykey i.dbl{background:var(--dbl);}
/* par-average scorecard cells with to-par delta */
.paravg{display:grid;grid-template-columns:1fr 1fr 1fr;text-align:center;}
.paravg div{display:flex;flex-direction:column;gap:.15rem;padding:0 .4rem;border-right:1px solid var(--line);}
.paravg div:last-child{border-right:0;}
.paravg span{font-family:var(--mono);font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);}
.paravg b{font-family:var(--disp);font-weight:700;font-size:2.4rem;line-height:1;color:var(--ink);}
.paravg em{font-family:var(--mono);font-style:normal;font-weight:700;font-size:.82rem;min-height:1em;}
.paravg em.birdie{color:var(--birdie);} .paravg em.bogey{color:var(--bogey);} .paravg em.dbl{color:var(--dbl);}
/* horizontal range meters: hatched turf fill with scorecard tick guides */
.meter{margin:.75rem 0;}
.meter:first-of-type{margin-top:.3rem;}
.meterhead{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.32rem;}
.meterhead span{font-family:var(--mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);}
.meterhead b{font-family:var(--disp);font-weight:700;font-size:1.5rem;color:var(--ink);}
.meterhead b small{font-size:.7rem;color:var(--ink-2);}
.metertrack{position:relative;height:16px;background:var(--line);border-radius:var(--r-ctl);overflow:hidden;}
.metertrack>span{position:absolute;top:0;bottom:0;width:1.5px;background:color-mix(in srgb,var(--ground) 60%,transparent);z-index:2;}
.metertrack .mt25{left:25%;} .metertrack .mt50{left:50%;} .metertrack .mt75{left:75%;}
.meterfill{height:100%;transition:width .5s ease;background:repeating-linear-gradient(-45deg,
  var(--turf),var(--turf) 6px,color-mix(in srgb,var(--turf) 74%,#000) 6px,color-mix(in srgb,var(--turf) 74%,#000) 12px);}
.tipcard{border-left:4px solid var(--blaze);}
.tipcard p{font-family:var(--body);font-size:.95rem;line-height:1.5;color:var(--ink);margin:0;}
.bwholes{font-family:var(--mono);line-height:1.9;}
.bwholes .good{color:var(--birdie);} .bwholes .bad{color:var(--dbl);}
.chartbox{position:relative;height:190px;margin-top:.4rem;}

@media (prefers-reduced-motion:reduce){*{transition:none !important;animation:none !important;}}

/* ---------- Plays Like screen ---------- */
button.big.ghost{background:transparent;border:1.5px dashed var(--line);color:var(--ink-2);font-size:1rem;}
button.big.ghost:hover{color:var(--blaze);border-color:var(--blaze);}
.linkbtn{background:none;border:none;color:var(--blaze);font-family:var(--mono);font-size:.68rem;
  text-transform:uppercase;letter-spacing:.06em;padding:.2rem .1rem;cursor:pointer;white-space:nowrap;}
.playhero{display:flex;justify-content:space-between;align-items:flex-end;gap:.5rem;
  background:var(--ink);border-radius:4px;padding:1.1rem 1rem;margin-bottom:.9rem;}
.playhero>div{display:flex;flex-direction:column;align-items:center;flex:1;text-align:center;}
.playhero span{font-family:var(--mono);font-size:.55rem;letter-spacing:.13em;text-transform:uppercase;
  color:color-mix(in srgb,var(--ground) 55%,var(--ink-2));margin-bottom:.25rem;}
.playhero b{font-family:var(--disp);font-weight:700;font-size:1.9rem;line-height:.95;color:var(--ground);}
.playhero small{font-family:var(--mono);font-size:.58rem;margin-top:.15rem;
  color:color-mix(in srgb,var(--ground) 50%,var(--ink-2));}
.playhero .big b{font-size:3.4rem;color:var(--turf);filter:brightness(1.25);}
/* downrange shot corridor: you at the bottom, pin at the top, drag the wind around the shot line */
.plfield{display:flex;justify-content:center;margin:.3rem 0 .1rem;touch-action:none;cursor:grab;}
.plfield:active{cursor:grabbing;}
.plfield svg{width:100%;max-width:236px;height:auto;}
.fairway{fill:color-mix(in srgb,var(--turf) 15%,transparent);stroke:var(--line);stroke-width:1.5;}
.shotline{stroke:var(--ink-2);stroke-width:1.5;stroke-dasharray:2 6;opacity:.55;}
.ytick{stroke:var(--ink-2);stroke-width:1.5;opacity:.45;}
.teeyou{fill:var(--ink);}
.fdir{fill:var(--ink-2);font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-anchor:middle;}
.flagpole{stroke:var(--ink);stroke-width:2;}
.flag{fill:var(--blaze);}
.whandle{stroke:var(--panel);stroke-width:2.5;filter:drop-shadow(0 1px 3px #0006);}
.pladj{text-align:center;font-family:var(--mono);color:var(--ink);font-size:.9rem;margin:.5rem 0 .7rem;}
.pladj b{color:var(--blaze);}

/* ---------- map: hole info bar, mode switch, shot tracker, map markers ---------- */
.holebar{display:flex;align-items:center;gap:.5rem;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--r-ctl);padding:.4rem .5rem;margin:.3rem 0 .6rem;}
.hbnav{flex:0 0 auto;width:38px;height:38px;font-family:var(--disp);font-size:1.4rem;line-height:1;
  background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-ctl);color:var(--ink);cursor:pointer;}
.hbnav:disabled{opacity:.3;}
.hbmid{flex:1;display:flex;flex-direction:column;align-items:center;gap:.12rem;min-width:0;}
.hbno{font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.15rem;color:var(--ink);line-height:1;}
.hbmeta{display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap;justify-content:center;}
.hbmeta b{font-family:var(--mono);font-weight:700;font-size:.8rem;color:var(--blaze);letter-spacing:.04em;text-transform:uppercase;}
.hbmeta b small{font-size:.62rem;color:var(--ink-2);margin-left:1px;}
.hbmeta .dim{font-size:.68rem;}
.modeswitch{display:flex;border:1px solid var(--line);border-radius:var(--r-ctl);overflow:hidden;margin-top:.6rem;}
.modeswitch button{flex:1;padding:.6rem;font-family:var(--mono);font-size:.72rem;text-transform:uppercase;
  letter-spacing:.08em;background:var(--panel);color:var(--ink-2);border:none;border-right:1px solid var(--line);cursor:pointer;}
.modeswitch button:last-child{border-right:0;}
.modeswitch button.on{background:var(--blaze);color:#fff;font-weight:700;}
.tapplays{text-align:center;font-family:var(--mono);font-size:.8rem;color:var(--ground);margin:.1rem 0 .5rem;
  padding-bottom:.5rem;border-bottom:1px solid color-mix(in srgb,var(--ground) 20%,transparent);}
.tapplays b{font-family:var(--disp);font-size:1.3rem;color:var(--ground);}
.tapplays b.turf{color:var(--turf);filter:brightness(1.3);}
.tapplays small{font-size:.6rem;color:color-mix(in srgb,var(--ground) 60%,var(--ink-2));}
.shotlist2{display:flex;flex-direction:column;margin-top:.5rem;}
.shotrow{display:flex;align-items:center;gap:.6rem;padding:.4rem .2rem;cursor:pointer;
  border-bottom:1px solid color-mix(in srgb,var(--ground) 14%,transparent);}
.shotrow .snum{flex:0 0 auto;width:24px;height:24px;border-radius:50%;background:var(--blaze);color:#fff;
  font-family:var(--mono);font-weight:700;font-size:.76rem;display:flex;align-items:center;justify-content:center;}
.shotrow.tg{cursor:default;} .shotrow.tg .snum{background:var(--turf);font-size:.7rem;}
.shotrow .sinfo{flex:1;font-family:var(--body);font-size:.9rem;color:var(--ground);}
.shotrow .sinfo i{color:color-mix(in srgb,var(--ground) 55%,var(--ink-2));font-style:italic;}
.shotrow .sleg{flex:0 0 auto;color:color-mix(in srgb,var(--ground) 68%,var(--ink-2));font-size:.8rem;}
.shotedit{padding:.4rem .2rem .6rem;display:flex;flex-direction:column;gap:.4rem;}
.chiprow{display:flex;flex-wrap:wrap;gap:.3rem;}
.chip{padding:.3rem .55rem;font-family:var(--mono);font-size:.72rem;border-radius:var(--r-ctl);text-transform:uppercase;
  background:color-mix(in srgb,var(--ground) 12%,transparent);color:var(--ground);
  border:1px solid color-mix(in srgb,var(--ground) 22%,transparent);cursor:pointer;}
.chip.on{background:var(--turf);color:var(--turf-ink);border-color:var(--turf);font-weight:700;}
.chip.del{background:transparent;color:var(--dbl);border-color:color-mix(in srgb,var(--dbl) 50%,transparent);align-self:flex-start;}
.trackctl{display:flex;gap:.5rem;align-items:stretch;margin-top:.5rem;}
.trackctl .big{flex:1;margin:0;}
.putts2{flex:0 0 auto;display:flex;align-items:center;gap:.25rem;border-radius:var(--r-ctl);padding:.2rem .35rem;
  background:color-mix(in srgb,var(--ground) 10%,transparent);}
.putts2 button{width:30px;height:30px;font-size:1.2rem;line-height:1;border:none;border-radius:var(--r-ctl);cursor:pointer;
  background:color-mix(in srgb,var(--ground) 16%,transparent);color:var(--ground);}
.putts2 b{font-family:var(--disp);font-size:1.4rem;color:var(--ground);min-width:1ch;text-align:center;}
.putts2 small{font-family:var(--mono);font-size:.5rem;text-transform:uppercase;letter-spacing:.06em;
  color:color-mix(in srgb,var(--ground) 60%,var(--ink-2));}
.targeticon{background:none;border:none;}
.targeticon .reticle{width:38px;height:38px;border-radius:50%;border:2px solid #ff7a1a;
  background:rgba(255,122,26,.12);position:relative;box-shadow:0 0 0 1px #0006;}
.targeticon .reticle::before,.targeticon .reticle::after{content:'';position:absolute;background:#ff7a1a;}
.targeticon .reticle::before{left:50%;top:3px;bottom:3px;width:2px;transform:translateX(-50%);}
.targeticon .reticle::after{top:50%;left:3px;right:3px;height:2px;transform:translateY(-50%);}
.shotmk{background:none;border:none;}
.shotmk span{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;
  background:#111;border:2px solid #fff;color:#fff;font-family:var(--mono);font-weight:700;font-size:.82rem;box-shadow:0 1px 4px #0008;}
.shotmk.cur span{background:#ff7a1a;}

/* ---------- Course tab: empty "no round in play" state ---------- */
.emptycourse{text-align:center;padding:1.7rem 1.2rem;}
.emptycourse .ecflag{display:flex;justify-content:center;margin-bottom:.55rem;}
.emptycourse .ecflag svg{width:44px;height:44px;stroke:var(--blaze);fill:none;stroke-width:1.7;
  stroke-linejoin:round;stroke-linecap:round;
  filter:drop-shadow(0 0 8px color-mix(in srgb,var(--blaze) 35%,transparent));}
.emptycourse h2{color:var(--ink);font-size:1.7rem;margin-bottom:.45rem;}
.emptycourse p{color:var(--ink-2);font-size:.95rem;line-height:1.5;max-width:32ch;margin:0 auto 1rem;}
.emptycourse .big{margin-top:0;}
.emptycourse .big+.big{margin-top:.6rem;background:var(--panel-2);color:var(--ink);border:1px solid var(--line);}
.emptycourse .ecnote{color:var(--ink-2);font-size:.72rem;line-height:1.4;margin:.55rem auto 0;
  max-width:30ch;text-transform:none;}

/* ---------- Course library: catalog browse + download-to-phone ---------- */
.storagebar .storagetrack{height:10px;border-radius:5px;background:var(--line);overflow:hidden;margin-top:.5rem;}
.storagebar .storagefill{height:100%;background:var(--turf);border-radius:5px;transition:width .45s ease;}
.crow{display:flex;align-items:center;gap:.55rem;padding:.55rem 0;border-bottom:1px solid var(--line);}
.crow:last-child{border-bottom:0;}
.cmain{flex:1;display:flex;flex-direction:column;gap:.12rem;min-width:0;}
.cmain b{font-family:var(--disp);text-transform:uppercase;font-size:1.05rem;color:var(--ink);line-height:1.05;}
.cmain span{font-size:.72rem;}
.cbadge{flex:0 0 auto;font-family:var(--mono);font-size:.58rem;text-transform:uppercase;letter-spacing:.03em;
  padding:.2rem .4rem;border-radius:var(--r-ctl);white-space:nowrap;}
.cbadge.gps{background:color-mix(in srgb,var(--turf) 18%,transparent);color:var(--turf);}
.cbadge.card{background:var(--panel-2);color:var(--ink-2);}
.cbtn{flex:0 0 auto;padding:.5rem .75rem;border-radius:var(--r-ctl);font-family:var(--mono);font-size:.72rem;
  text-transform:uppercase;letter-spacing:.04em;position:relative;overflow:hidden;min-width:72px;text-align:center;cursor:pointer;}
.cbtn.dl{background:var(--turf);color:var(--turf-ink);font-weight:700;}
.cbtn.rm{background:transparent;color:var(--ink-2);border:1px solid var(--line);}
.cbtn.busy{background:var(--panel-2);color:var(--ink);}
.cbtn .dlbar{position:absolute;left:0;top:0;bottom:0;width:0;background:color-mix(in srgb,var(--turf) 45%,transparent);}
.cbtn .dlpct{position:relative;z-index:1;}

/* ---------- New round: recents + searchable course picker ---------- */
.recents{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.5rem;}
.recent{padding:.5rem .8rem;border-radius:20px;font-family:var(--disp);font-weight:700;text-transform:uppercase;
  font-size:.95rem;letter-spacing:.02em;background:var(--panel-2);border:1px solid var(--line);color:var(--ink);}
.recent.sel{background:color-mix(in srgb,var(--turf) 16%,var(--panel));border-color:var(--turf);color:var(--turf);}
.copt .cmain{display:flex;flex-direction:column;gap:.1rem;min-width:0;}
.copt .cmain span{font-size:.72rem;}
.copt .badge.lib{background:var(--turf);color:var(--turf-ink);}

/* ---------- Home: "In play" resume card with a live scorecard preview ---------- */
.resumecard{background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--birdie);
  border-radius:var(--r-ctl);padding:.8rem .85rem;}
.rc-top{display:flex;justify-content:space-between;align-items:flex-start;gap:.6rem;}
.rc-name{display:flex;flex-direction:column;gap:.15rem;min-width:0;}
.rc-name b{font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.15rem;letter-spacing:.02em;color:var(--ink);line-height:1.05;}
.rc-name .dim{font-size:.66rem;text-transform:uppercase;letter-spacing:.08em;}
.msc-wrap{overflow-x:auto;margin:.6rem 0;border:1px solid var(--line);border-radius:var(--r-ctl);}
.msc{border-collapse:collapse;font-family:var(--mono);font-variant-numeric:tabular-nums;width:100%;}
.msc td{border:1px solid var(--line);padding:.28rem .2rem;text-align:center;min-width:22px;font-size:.74rem;color:var(--ink);}
.msc .msc-hd td{background:var(--ink);color:var(--ground);font-size:.62rem;}
.msc .msc-par td{background:var(--panel-2);color:var(--ink-2);font-size:.66rem;}
.msc td:first-child{text-align:left;padding-left:.45rem;background:var(--panel-2);color:var(--ink);
  font-family:var(--disp);text-transform:uppercase;position:sticky;left:0;min-width:52px;}
.msc .msc-tot{font-weight:700;background:color-mix(in srgb,var(--ink) 6%,var(--panel));}
.msc td.eagle{background:color-mix(in srgb,var(--eagle) 22%,transparent);color:var(--eagle);font-weight:700;}
.msc td.birdie{color:var(--birdie);font-weight:700;}
.msc td.bogey{color:var(--bogey);}
.msc td.dbl{color:var(--dbl);font-weight:700;}
.msc-empty{padding:.7rem;text-align:center;color:var(--ink-2);font-size:.78rem;
  border:1px dashed var(--line);border-radius:var(--r-ctl);margin:.6rem 0;}
.rc-resume{width:100%;display:flex;align-items:center;justify-content:center;gap:.5rem;
  background:var(--turf);color:var(--turf-ink);font-family:var(--disp);font-weight:700;text-transform:uppercase;
  font-size:1.05rem;letter-spacing:.03em;border-radius:var(--r-ctl);padding:.7rem;}
.rc-resume .ic{width:20px;height:20px;stroke:var(--turf-ink);fill:var(--turf-ink);flex:0 0 auto;}

/* ---------- Course: full-screen map with floating overlays ---------- */
.mapscreen{position:fixed;top:0;bottom:calc(var(--tab-h) + env(safe-area-inset-bottom));
  left:50%;transform:translateX(-50%);width:100%;max-width:540px;overflow:hidden;background:#0a0d0b;}
.mapscreen #bigmap{position:absolute;inset:0;width:100%;height:100%;border:0;border-radius:0;}
.holebar.floating{position:absolute;top:calc(env(safe-area-inset-top) + 8px);left:10px;right:10px;z-index:800;
  margin:0;box-shadow:0 3px 14px rgba(0,0,0,.45);}
/* top-right distance bubble */
.mapinfo{position:absolute;top:calc(env(safe-area-inset-top) + 76px);right:10px;z-index:800;
  background:var(--ink);color:var(--ground);border-radius:12px;padding:.45rem .8rem .55rem;text-align:right;
  box-shadow:0 3px 12px rgba(0,0,0,.45);max-width:60%;}
.mapinfo b{font-family:var(--disp);font-weight:700;font-size:2.5rem;line-height:.85;color:var(--ground);display:block;}
.mapinfo .mi-lbl{font-family:var(--mono);font-size:.55rem;letter-spacing:.14em;text-transform:uppercase;
  color:color-mix(in srgb,var(--ground) 58%,var(--ink-2));}
.mapinfo .mi-sub{font-family:var(--mono);font-size:.58rem;margin-top:.28rem;word-spacing:-2px;letter-spacing:-.01em;
  color:color-mix(in srgb,var(--ground) 78%,var(--ink-2));}
.mapinfo .mi-sub span{display:block;line-height:1.45;}
/* floating bottom stack: popovers → track strip → buttons */
.mapbottom{position:absolute;left:0;right:0;bottom:0;z-index:800;display:flex;flex-direction:column;
  gap:.5rem;padding:.7rem;pointer-events:none;}
.mapbottom > *{pointer-events:auto;}
.mapbtns{display:flex;align-items:flex-end;justify-content:space-between;gap:.5rem;}
.mapbtn{font-family:var(--disp);font-weight:700;text-transform:uppercase;letter-spacing:.02em;font-size:1.05rem;
  padding:.75rem 1.1rem;border-radius:11px;box-shadow:0 3px 12px rgba(0,0,0,.45);flex:0 0 auto;}
.mapbtn.drop{background:var(--turf);color:var(--turf-ink);}
.mapbtn.caddie{background:var(--ink);color:var(--ground);}
.mapbtn.caddie.on{background:var(--blaze);color:#fff;}
.windwidget{display:flex;flex-direction:column;align-items:center;gap:2px;flex:0 0 auto;
  pointer-events:none;padding-bottom:.35rem;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.75);}
.windwidget .wind-dial{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(13,17,11,.72);border:1.5px solid rgba(255,255,255,.28);}
.windwidget .wind-dial svg{width:20px;height:20px;fill:var(--blaze);}
.windwidget .wind-val{font-family:var(--mono);font-size:.72rem;font-weight:700;line-height:1;}
.windwidget .wind-val span{font-size:.55rem;font-weight:400;opacity:.85;margin-left:1px;}
.windwidget.calm .wind-val{font-size:.62rem;text-transform:uppercase;letter-spacing:.06em;}
.popover{background:var(--ink);color:var(--ground);border-radius:14px;padding:.85rem .9rem .8rem;position:relative;
  box-shadow:0 4px 20px rgba(0,0,0,.55);max-height:44vh;overflow-y:auto;-webkit-overflow-scrolling:touch;}
.pop-x{position:absolute;top:.35rem;right:.4rem;width:28px;height:28px;border-radius:50%;line-height:1;
  background:color-mix(in srgb,var(--ground) 14%,transparent);color:var(--ground);font-size:1.2rem;}
.pop-eyebrow{font-family:var(--mono);font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--blaze);font-weight:700;margin-bottom:.4rem;}
.caddiebox .cbx-body{font-family:var(--body);font-size:1rem;line-height:1.5;color:var(--ground);padding-right:1.4rem;}
.caddiebox .cbx-body .lead{display:block;font-family:var(--disp);font-weight:700;text-transform:uppercase;
  color:var(--blaze);font-size:.7rem;letter-spacing:.08em;margin-bottom:.15rem;}
.caddiebox .cbx-body b{color:var(--birdie);font-weight:700;}
.caddiebox .linkbtn{margin-top:.55rem;}
.trackstrip{display:flex;align-items:center;gap:.6rem;background:var(--ink);color:var(--ground);
  border-radius:11px;padding:.4rem .55rem;box-shadow:0 3px 12px rgba(0,0,0,.45);}
.ts-count{flex:1;background:none;display:flex;flex-direction:column;align-items:flex-start;text-align:left;}
.ts-count b{font-family:var(--disp);font-weight:700;text-transform:uppercase;font-size:1.05rem;color:var(--ground);}
.ts-count span{font-family:var(--mono);font-size:.54rem;letter-spacing:.08em;text-transform:uppercase;
  color:color-mix(in srgb,var(--ground) 58%,var(--ink-2));}
.ts-score{flex:0 0 auto;background:var(--turf);color:var(--turf-ink);font-family:var(--disp);font-weight:700;
  text-transform:uppercase;padding:.5rem .8rem;border-radius:8px;font-size:.85rem;}

/* the [hidden] attribute must win over component display rules (e.g. .trackstrip flex) */
[hidden]{display:none !important;}

/* ---------- social: profiles, feed, follow (Phase 1) ---------- */
.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;color:#fff;
  font-family:var(--disp);font-weight:700;flex:0 0 auto;line-height:1;}
.prof-hero{display:flex;align-items:center;gap:1rem;margin:.4rem 0 .8rem;}
.prof-id h1{font-size:1.9rem;line-height:1;}
.prof-id .prof-handle{font-family:var(--mono);font-size:.8rem;color:var(--ink-2);}
.prof-bio{font-family:var(--body);font-size:.95rem;color:var(--ink);margin:.2rem 0 .6rem;line-height:1.45;}
.prof-meta{display:flex;flex-wrap:wrap;gap:.9rem;font-family:var(--mono);font-size:.78rem;color:var(--ink-2);margin-bottom:.9rem;}
.prof-stats{display:flex;gap:.4rem;background:var(--panel);border:1px solid var(--line);border-radius:var(--r-ctl);padding:.7rem .3rem;margin-bottom:.9rem;}
.prof-stats>div,.prof-stats>.pcount{flex:1;display:flex;flex-direction:column;align-items:center;gap:.15rem;background:none;}
.prof-stats b{font-family:var(--disp);font-weight:700;font-size:1.5rem;color:var(--ink);line-height:1;}
.prof-stats span{font-family:var(--mono);font-size:.54rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);}
.prof-stats .pcount{cursor:pointer;border-left:1px solid var(--line);}
.prow{display:flex;align-items:center;gap:.7rem;padding:.55rem 0;border-bottom:1px solid var(--line);cursor:pointer;}
.prow:last-child{border-bottom:0;}
.prow .pinfo{flex:1;display:flex;flex-direction:column;gap:1px;min-width:0;}
.prow .pinfo b{font-family:var(--disp);text-transform:uppercase;font-size:1.05rem;color:var(--ink);}
.followbtn{flex:0 0 auto;padding:.4rem .9rem;border-radius:20px;font-family:var(--mono);font-size:.7rem;
  text-transform:uppercase;letter-spacing:.05em;background:var(--turf);color:var(--turf-ink);font-weight:700;}
.followbtn.on{background:var(--panel-2);color:var(--ink-2);border:1px solid var(--line);}
.feedcard{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--turf);
  border-radius:var(--r-ctl);padding:.7rem .85rem;margin:.5rem 0;}
.fc-top{display:flex;justify-content:space-between;align-items:baseline;}
.fc-top b{font-family:var(--disp);text-transform:uppercase;font-size:1.1rem;color:var(--ink);}
.fc-players{display:flex;flex-wrap:wrap;gap:.4rem .9rem;margin-top:.4rem;}
.fc-players .fp{font-family:var(--mono);font-size:.82rem;color:var(--ink-2);cursor:pointer;}
.fc-players .fp b{color:var(--ink);font-size:1rem;}
.fc-players .fp em{font-style:normal;color:var(--blaze);}
.editform label{display:block;font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--ink-2);margin:.7rem 0 .2rem;}
.editform label:first-child{margin-top:0;}

/* ---- social Phase 2: kudos, comments, notifications ---- */
.fc-actions{display:flex;gap:.5rem;margin-top:.55rem}
.kudosbtn,.cmtbtn{display:inline-flex;align-items:center;gap:.3rem;font:600 .82rem/1 var(--body);
  padding:.4rem .7rem;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--ink);cursor:pointer}
.kudosbtn.on{border-color:var(--blaze);color:var(--blaze);background:color-mix(in srgb,var(--blaze) 12%,transparent)}
.kudosbtn:active,.cmtbtn:active{transform:scale(.96)}
.bell{position:relative;background:transparent;border:0;font-size:1.15rem;cursor:pointer;line-height:1;padding:.1rem}
.ndot{position:absolute;top:-.35rem;right:-.4rem;background:var(--blaze);color:#fff;font:700 .6rem/1 var(--mono);
  min-width:1rem;height:1rem;padding:0 .2rem;border-radius:999px;display:flex;align-items:center;justify-content:center}
.postlines{display:flex;flex-direction:column;gap:.4rem}
.pline{display:flex;align-items:baseline;gap:.5rem;font:600 1rem/1 var(--body)}
.pline span{flex:1}.pline b{font-family:var(--disp);font-size:1.3rem}
.pline em{font:600 .8rem/1 var(--mono);color:var(--ink-2);font-style:normal}
.kudoslist{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.5rem}
.cmt{display:flex;gap:.55rem;align-items:flex-start;padding:.45rem 0;border-top:1px solid var(--line);font-size:.9rem;line-height:1.35}
.cmt:first-child{border-top:0}
.cmt .cbody b{cursor:pointer}
.cmt .cbody b:after{content:' '}
.notif{display:flex;gap:.6rem;align-items:center;padding:.6rem 0;border-top:1px solid var(--line);cursor:pointer}
.notif:first-child{border-top:0}
.notif.unread{position:relative}
.notif.unread:before{content:'';position:absolute;left:-.55rem;top:50%;transform:translateY(-50%);width:.4rem;height:.4rem;border-radius:50%;background:var(--blaze)}
.ntext{font-size:.92rem;line-height:1.3}

/* ---- social Phase 2b: badges / achievements ---- */
.badgegrid{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem;margin-top:.6rem}
.badge-tile{display:flex;flex-direction:column;align-items:center;gap:.25rem;text-align:center;overflow:hidden;
  padding:.6rem .3rem;border-radius:12px;border:1px solid var(--line);background:var(--panel)}
.badge-tile .be{display:flex;align-items:center;justify-content:center;height:42px;width:100%;}
.badge-tile .be svg{display:block;width:38px;height:38px;flex:0 0 auto;}
.badge-tile .bn{font:600 .62rem/1.1 var(--body);color:var(--ink-2);text-transform:uppercase;letter-spacing:.02em}
.badge-tile.got{border-color:var(--blaze);background:color-mix(in srgb,var(--blaze) 10%,var(--panel))}
.badge-tile.got .bn{color:var(--ink)}
.badge-tile.locked{opacity:.42}
.badge-tile.locked .be{filter:grayscale(1)}
.badge-emoji{display:flex;align-items:center;justify-content:center;width:36px;height:32px;flex:0 0 auto}
.badge-emoji svg{display:block;}

/* ---- social Phase 2b: groups / leagues ---- */
.lbtable{display:flex;flex-direction:column;margin-top:.5rem}
.lbrow{display:flex;align-items:center;gap:.55rem;padding:.5rem 0;border-top:1px solid var(--line);cursor:pointer}
.lbrow:first-child{border-top:0}
.lbrank{font:700 .95rem/1 var(--disp);color:var(--ink-2);width:1.2rem;text-align:center;flex:0 0 auto}
.lbname{flex:1;font-weight:600;font-size:.95rem}
.ownertag{font:600 .55rem/1 var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--turf);border:1px solid var(--turf);border-radius:4px;padding:.08rem .25rem;vertical-align:middle}
.lbstat{display:flex;flex-direction:column;align-items:center;min-width:2.4rem;flex:0 0 auto}
.lbstat b{font:700 1rem/1 var(--disp);font-variant-numeric:tabular-nums}
.lbstat em{font:600 .55rem/1 var(--mono);color:var(--ink-2);text-transform:uppercase;letter-spacing:.05em;font-style:normal;margin-top:.15rem}
.lbx{flex:0 0 auto;background:transparent;border:1px solid var(--line);border-radius:6px;color:var(--dbl);font-size:.7rem;padding:.2rem .4rem;cursor:pointer}

/* ---- social Phase 3: private profile lock ---- */
.lockcard{display:flex;align-items:center;gap:.7rem;font-size:1.4rem}
.lockcard div{display:flex;flex-direction:column;gap:.15rem}
.lockcard b{font-size:.95rem}
.lockcard .dim{font-size:.85rem}

/* ---- social Phase 4: safety (block / report / requests) ---- */
.safetyrow{display:flex;justify-content:center;gap:1.2rem;margin-top:.7rem}
.linkbtn.danger{color:var(--dbl);background:none}
/* upload button is a <label> inside .editform — override the dim uppercase label styling */
.editform label.filebtn{text-transform:none;color:#fff;font-family:var(--body);font-size:.9rem;
  letter-spacing:0;margin:0;display:inline-block;width:auto}
.reqbtns{display:flex;gap:.4rem;flex:0 0 auto}
.lockcard{align-items:flex-start}
button[disabled]{opacity:.6}

/* ---- invite friends ---- */
.invitelink{margin-top:.5rem;padding:.7rem .8rem;border:1px dashed var(--line);border-radius:10px;
  background:var(--panel);font:600 .85rem/1.4 var(--mono);word-break:break-all;cursor:pointer;color:var(--ink)}

/* ---- username picker (signup + edit) ---- */
.fl{display:block;font:600 .8rem/1.3 var(--body);color:var(--ink);margin:.3rem 0 .25rem;text-align:left}
.fl span{font-weight:400;color:var(--ink-2)}
.ustatus{font:600 .8rem/1.35 var(--body);margin:-.2rem 0 .1rem;min-height:1.1rem;text-align:left}
.ustatus.ok{color:var(--birdie)}
.ustatus.bad{color:var(--dbl)}
.ustatus .suggs{margin-top:.35rem;font-weight:400;color:var(--ink-2);display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}
.sugg{background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:.2rem .55rem;
  font:600 .78rem/1 var(--mono);color:var(--blaze);cursor:pointer}
.sugg:active{transform:scale(.96)}

/* ---- profile photos ---- */
.avatar.avimg{object-fit:cover;padding:0;border:1px solid var(--line)}
.photorow{display:flex;align-items:center;gap:.9rem;margin:.3rem 0 .3rem}
.photobtns{display:flex;flex-direction:column;gap:.4rem;align-items:flex-start}
.filebtn{display:inline-block;background:var(--turf);color:#fff;font:600 .9rem/1 var(--body);
  padding:.6rem .9rem;border-radius:10px;cursor:pointer}
.filebtn:active{transform:scale(.97)}

/* ---- reporting ---- */
.reportcats{display:flex;flex-direction:column;gap:.4rem;margin-top:.5rem}
.reportcat{text-align:left;padding:.7rem .8rem;border:1px solid var(--line);border-radius:10px;
  background:var(--panel);color:var(--ink);font:600 .92rem/1.2 var(--body);cursor:pointer}
.reportcat.on{border-color:var(--blaze);background:color-mix(in srgb,var(--blaze) 12%,var(--panel));color:var(--blaze)}
#reportDetail{width:100%;border:1px solid var(--line);border-radius:10px;padding:.6rem;background:var(--panel);
  color:var(--ink);font:400 .95rem/1.4 var(--body);resize:vertical}
.cmt{position:relative}
.cmtflag{position:absolute;right:0;top:.4rem;background:transparent;border:0;color:var(--ink-2);font-size:.85rem;cursor:pointer;padding:.1rem .3rem}
.repcard{margin-bottom:.6rem}
.repcat{font:700 .7rem/1 var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--blaze);margin-bottom:.35rem}
.repwho{font-size:1rem}
.repactions{display:flex;gap:.5rem;margin-top:.3rem}

/* ============================================================================
   SLEEK POLISH PASS (2026-07-14) — refines the field-dossier identity without
   changing it: a softer scorecard grid, gentle elevation, consistent 8px radii,
   hairline rules, and smooth tactile feedback. Palette/type unchanged.
   Revert: restore app.css.bak-*-presleek.
   ========================================================================== */
:root{
  --r-card:8px; --r-ctl:8px; --r-pill:999px;
  --hair:color-mix(in srgb,var(--line) 62%,transparent);
  --shadow-sm:0 1px 2px rgba(35,28,12,.06);
  --shadow:0 1px 2px rgba(35,28,12,.05), 0 10px 24px -12px rgba(35,28,12,.15);
}
@media (prefers-color-scheme:dark){:root{
  --shadow-sm:0 1px 3px rgba(0,0,0,.45);
  --shadow:0 2px 5px rgba(0,0,0,.4), 0 14px 30px -14px rgba(0,0,0,.7);
}}
:root[data-theme="light"]{
  --shadow-sm:0 1px 2px rgba(35,28,12,.06);
  --shadow:0 1px 2px rgba(35,28,12,.05), 0 10px 24px -12px rgba(35,28,12,.15);
}
:root[data-theme="dark"]{
  --shadow-sm:0 1px 3px rgba(0,0,0,.45);
  --shadow:0 2px 5px rgba(0,0,0,.4), 0 14px 30px -14px rgba(0,0,0,.7);
}

/* the scorecard grid becomes a whisper of texture rather than a loud lattice */
html{
  background-image:
    linear-gradient(color-mix(in srgb,var(--line) 42%,transparent) 1px,transparent 1px),
    linear-gradient(90deg,color-mix(in srgb,var(--line) 42%,transparent) 1px,transparent 1px);
  background-size:46px 46px,46px 46px;
}

/* cards: thinner rule, gentle radius, quiet elevation */
.card{border:1px solid var(--line);border-radius:var(--r-card);box-shadow:var(--shadow);padding:1.15rem;}

/* controls: consistent radius, hairline, a calm turf focus ring (blaze stays reserved) */
input,select{border:1px solid var(--line);border-radius:var(--r-ctl);
  transition:border-color .15s ease, box-shadow .15s ease;}
input:focus,select:focus{outline:none;border-color:var(--turf);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--turf) 20%,transparent);}

/* buttons: smooth, tactile; press = a subtle settle, not a hard jump */
button{transition:transform .12s ease, box-shadow .15s ease, background-color .15s ease,
  border-color .15s ease, filter .15s ease;}
button:active{transform:scale(.975);}
button.big{border-radius:var(--r-ctl);}
.btns button{border-radius:var(--r-ctl);}
button.big.primary,button.primary,.authcard .big{
  box-shadow:0 2px 12px -4px color-mix(in srgb,var(--turf) 55%,transparent);}
button.big.primary:active,button.primary:active{
  box-shadow:0 1px 6px -3px color-mix(in srgb,var(--turf) 55%,transparent);}

/* home op buttons float a touch */
.op{border-radius:var(--r-card);box-shadow:var(--shadow-sm);}
.op.primary{box-shadow:0 3px 14px -5px color-mix(in srgb,var(--turf) 50%,transparent);}

/* pills stay round, just consistent */
.followbtn{border-radius:var(--r-pill);}

/* thin, low-contrast internal rules read more refined than full-weight lines */
.prow{border-bottom-color:var(--hair);}
.cmt,.notif,.lbrow{border-top-color:var(--hair);}

/* the bottom bar floats above the content instead of sitting on a hard seam */
.tabbar{border-top:1px solid var(--hair);box-shadow:0 -8px 22px -14px rgba(35,28,12,.22);}
@media (prefers-color-scheme:dark){.tabbar{box-shadow:0 -8px 24px -14px rgba(0,0,0,.6);}}

@media (prefers-reduced-motion:reduce){*{transition:none !important;}}

/* ============================================================================
   FROSTED GLASS + TACTILE PASS (2026-07-14) — surfaces become translucent
   frosted panels floating over the scorecard grid; interactions get springy,
   physical feedback. Colours + type unchanged (Spencer's keepers). Layers on
   top of the sleek pass. Revert: restore app.css.bak-*-preglass.
   ========================================================================== */
:root{
  --glass:rgba(246,242,230,.68);
  --glass-2:rgba(246,242,230,.84);
  --glass-brd:rgba(255,255,255,.55);
  --glass-hi:inset 0 1px 0 rgba(255,255,255,.5);
  --blur:saturate(150%) blur(16px);
  --spring:cubic-bezier(.34,1.56,.64,1);
  --glow-turf:0 6px 22px -8px color-mix(in srgb,var(--turf) 62%,transparent);
}
@media (prefers-color-scheme:dark){:root{
  --glass:rgba(21,28,18,.52); --glass-2:rgba(21,28,18,.74);
  --glass-brd:rgba(255,255,255,.10); --glass-hi:inset 0 1px 0 rgba(255,255,255,.07);
}}
:root[data-theme="light"]{--glass:rgba(246,242,230,.68);--glass-2:rgba(246,242,230,.84);
  --glass-brd:rgba(255,255,255,.55);--glass-hi:inset 0 1px 0 rgba(255,255,255,.5);}
:root[data-theme="dark"]{--glass:rgba(21,28,18,.52);--glass-2:rgba(21,28,18,.74);
  --glass-brd:rgba(255,255,255,.10);--glass-hi:inset 0 1px 0 rgba(255,255,255,.07);}

/* frosted surfaces — the grid behind blurs through them for depth */
.card{background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--glass-brd);box-shadow:var(--shadow),var(--glass-hi);
  animation:rise .3s ease both;}
.op{background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--glass-brd);box-shadow:var(--shadow-sm),var(--glass-hi);}
.op.primary{background:var(--turf);-webkit-backdrop-filter:none;backdrop-filter:none;
  box-shadow:var(--glow-turf);}
@keyframes rise{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}

/* inputs stay crisp (near-solid, no nested blur) but pick up the glass edge */
input,select,#reportDetail,textarea{background:var(--glass-2);border:1px solid var(--glass-brd);
  box-shadow:var(--glass-hi);}
input:focus,select:focus{border-color:var(--turf);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--turf) 22%,transparent),var(--glass-hi);}

/* the nav becomes a floating frosted bar, lifted off the bottom edge */
.tabbar{left:12px;right:12px;bottom:calc(env(safe-area-inset-bottom) + 10px);
  border-radius:20px;background:var(--glass-2);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--glass-brd);padding-bottom:0;overflow:hidden;
  box-shadow:0 10px 34px -12px rgba(35,28,12,.4),var(--glass-hi);}
@media (prefers-color-scheme:dark){.tabbar{box-shadow:0 12px 36px -12px rgba(0,0,0,.75),var(--glass-hi);}}
#app{padding-bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 34px);}

/* segmented controls become a frosted track with a tactile sliding pill */
.parpick{background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--glass-brd);border-radius:var(--r-ctl);padding:4px;gap:4px;box-shadow:var(--glass-hi);}
.parpick button{background:transparent;border:0;border-radius:6px;
  transition:background-color .2s ease,color .2s ease,transform .2s var(--spring);}
.parpick button.on{background:var(--ink);color:var(--ground);border:0;
  box-shadow:0 3px 10px -3px rgba(0,0,0,.35);}

/* springy, physical presses everywhere */
button{transition:transform .2s var(--spring),box-shadow .18s ease,background-color .15s ease,
  border-color .15s ease,filter .12s ease;}
button:active{transform:scale(.94);filter:brightness(.98);}
button.big.primary:active,button.primary:active,.op.primary:active{
  filter:brightness(1.06);box-shadow:0 2px 8px -3px color-mix(in srgb,var(--turf) 60%,transparent);}
.feedcard:active,.badge-tile:active,.prow:active,.lbrow:active{transform:scale(.988);}

/* tactile output: the toast springs up as a frosted chip */
#toast{background:var(--glass-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  color:var(--ink);border:1px solid var(--glass-brd);border-left:4px solid var(--blaze);
  border-radius:10px;opacity:0;transform:translateX(-50%) translateY(14px) scale(.95);
  transition:opacity .2s ease,transform .34s var(--spring);
  bottom:calc(var(--tab-h) + env(safe-area-inset-bottom) + 30px);
  box-shadow:0 10px 30px -10px rgba(35,28,12,.4),var(--glass-hi);}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0) scale(1);}

@media (prefers-reduced-motion:reduce){*{animation:none !important;transition:none !important;}}

/* floating-nav fix: center icon+label vertically (buttons were top-aligned in the bar) */
.tabbar button{justify-content:center;}

/* the two map action buttons span the wind widget's exact height — top of the buttons
   meets the top of the wind arrow, bottom meets the bottom of the mph text — so the three
   bottom controls read as one aligned row (the wind widget is the tallest, so it sets the
   height and the buttons stretch to it; alignment holds on any device, no magic number) */
.mapbtns{align-items:stretch;}
/* top stays pinned to the wind-arrow top; the small bottom margin lifts just the bottom
   edge off the mph-text baseline a touch (stretch fills row height minus this margin) */
.mapbtn{display:flex;align-items:center;justify-content:center;margin-bottom:6px;}

/* ---- heading-up GPS view ---- */
/* distance bubble + GPS toggle share a right-hand column, so the button sits under the box */
.mapright{position:absolute;top:calc(env(safe-area-inset-top) + 76px);right:10px;z-index:800;
  display:flex;flex-direction:column;align-items:flex-end;gap:8px;}
.mapright .mapinfo{position:static;top:auto;right:auto;}
/* icon-only toggle: just the GPS arrow, turns blaze when heading-up is on */
.maptoggle{width:46px;height:46px;display:flex;align-items:center;justify-content:center;padding:0;border-radius:12px;
  background:var(--glass-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--glass-brd);box-shadow:var(--shadow-sm),var(--glass-hi);}
.maptoggle svg{width:24px;height:24px;fill:var(--ink);stroke:none;transition:fill .15s ease;}
.maptoggle.on{border-color:var(--blaze);background:color-mix(in srgb,var(--blaze) 15%,var(--glass-2));}
.maptoggle.on svg{fill:var(--blaze);}
/* in heading-up mode the map is an oversized square, centered, rotated so "up" = where you face.
   the parent .mapscreen clips it (overflow:hidden), so the corners never show through */
.mapscreen #bigmap.heading-up{inset:auto;left:50%;top:50%;width:110vmax;height:110vmax;
  transform:translate(-50%,-50%) rotate(var(--map-rot,0deg));transform-origin:center center;
  transition:transform .18s linear;}
/* the "you" indicator — a heading arrow with a field-of-vision cone fanning out ahead */
.you-ind{position:absolute;left:50%;top:50%;width:0;height:0;z-index:795;pointer-events:none;}
.you-fov{position:absolute;left:0;bottom:0;transform:translateX(-50%);width:116px;height:92px;
  background:linear-gradient(to top, color-mix(in srgb,var(--blaze) 46%,transparent), transparent 82%);
  clip-path:polygon(50% 100%, 12% 0, 88% 0);}
.you-tip{position:absolute;left:0;top:0;transform:translate(-50%,-50%);width:26px;height:26px;
  fill:var(--blaze);stroke:#fff;stroke-width:1.3;filter:drop-shadow(0 1px 4px rgba(0,0,0,.55));}
@media (prefers-reduced-motion:reduce){.mapscreen #bigmap.heading-up{transition:none;}}

/* ---- Caddie mascot in the "Caddie says" box ---- */
.caddiebox{padding-bottom:1rem;}
.caddie-mascot{position:absolute;bottom:2px;right:4px;width:66px;height:auto;pointer-events:none;
  filter:drop-shadow(0 2px 5px rgba(0,0,0,.45));}
.caddiebox .cbx-body{padding-right:4.4rem;}   /* keep the read clear of Caddie */
.caddiebox .linkbtn{max-width:calc(100% - 4.6rem);text-align:left;}

/* ---- TeedOff wordmark ---- */
/* the brand name wears its own rounded face + title case, so it reads as a logo, not a header */
.brandmark{font-family:var(--brand);font-weight:800;text-transform:none;letter-spacing:0;}
/* flex-center the coin against the word (no fiddly vertical-align), tight gap so it reads as one word */
.opsname h1.brandmark{font-size:2.3rem;line-height:1;margin:.05rem 0 0;display:flex;align-items:center;gap:.03em;}
.authcard h1.brandmark{font-size:2.2rem;line-height:1;display:inline-flex;align-items:center;gap:.03em;}

/* the leading "C" is a green coin badge — Caddie's cap patch + a golf ball. NOTE: no font-size
   shrink here (that would also shrink the em-based diameter); the C is full size inside a larger
   circle. theme-aware C colour (dark-on-green in dark, white-on-green in light). */
.coin-c{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;line-height:1;
  width:1.3em;height:1.3em;background:var(--turf);color:#fff;border-radius:50%;
  box-shadow:0 1px 3px rgba(0,0,0,.28);}

/* ---------- native app shell: kill iOS rubber-band overscroll ---------- */
/* Web keeps normal document scrolling. In the Capacitor app that whole-page bounce
   reveals the white WebView behind the page and drags the fixed nav up. So in native
   we pin the viewport and scroll an inner element (#app) instead — no document bounce,
   nav stays put, and any inner overscroll shows the ground color, never white. */
html.native, html.native body{height:100%;overflow:hidden;overscroll-behavior:none;}
/* #app is a full-viewport fixed scroller (inset:0 = edge-to-edge, so the ground
   paints under it everywhere incl. the home-indicator zone — no white strip). The
   base max-width:540 + margin:auto still centers the column on wide screens. */
html.native #app{
  box-sizing:border-box;
  position:fixed;inset:0;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior-y:contain;}
/* with contentInset:never the safe-area env() now reports real insets; sit the
   floating nav just above the home indicator (lower than the web default gap). */
html.native .tabbar{bottom:calc(env(safe-area-inset-bottom) + 4px);}

/* ---------- offline: connectivity chip, pending state, storage screen ---------- */
/* a small status pill that drops in from the top when offline or syncing */
#connchip{position:fixed;left:50%;top:calc(env(safe-area-inset-top) + 8px);
  transform:translateX(-50%) translateY(-24px);z-index:400;
  font-family:var(--mono);font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  padding:.32rem .8rem;border-radius:999px;color:#fff;opacity:0;pointer-events:none;
  transition:opacity .25s ease,transform .25s cubic-bezier(.34,1.56,.64,1);
  box-shadow:0 6px 18px -8px rgba(0,0,0,.55);}
#connchip.show{opacity:1;transform:translateX(-50%) translateY(0);}
#connchip.off{background:#a23b2e;}
#connchip.sync,#connchip.synced{background:var(--turf);}
/* "not synced" tag on offline-created rounds */
.pendchip{display:inline-block;font-family:var(--mono);font-size:.58rem;font-weight:700;
  letter-spacing:.05em;text-transform:uppercase;color:#a23b2e;
  border:1px solid color-mix(in srgb,#a23b2e 45%,transparent);border-radius:999px;
  padding:.02rem .4rem;margin-left:.35rem;vertical-align:.05em;}
/* offline map: turf shows through behind the vector overlays when imagery isn't cached/reachable */
#bigmap{background:#2f5233;}
/* offline & storage screen rows */
.offrow{display:flex;justify-content:space-between;align-items:center;gap:.5rem;
  padding:.65rem 0;border-top:1px solid var(--hair);flex-wrap:wrap;}
.offrow:first-of-type{border-top:0;}
.offname{display:flex;flex-direction:column;gap:.12rem;min-width:0;}
.offname b{font-size:.98rem;}
.offname .dim{font-size:.68rem;}
.offacts{display:flex;gap:.75rem;align-items:center;flex-shrink:0;}

/* Golf War launch card — a selling-point entry point (Home + game-mode picker) */
.op.gw-launch{border:1.5px solid color-mix(in srgb,var(--blaze) 50%,var(--line));}
.op.gw-launch .gw-ic{display:inline-flex;align-items:center;justify-content:center;font-size:1.35rem;line-height:1;width:1.5em;}

/* ---------- game modes: picker modal, round panel, ghosts, territory, news recap ---------- */
.gmodal-bg{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:400;display:flex;align-items:flex-end;justify-content:center;}
.gmodal{background:var(--ground);border-radius:16px 16px 0 0;padding:1.1rem 1.1rem calc(env(safe-area-inset-bottom) + 1.1rem);
  width:100%;max-width:540px;max-height:82vh;overflow-y:auto;}
.gm-rule{padding:.6rem 0;border-top:1px solid var(--hair);}
.gm-rule:first-of-type{border-top:0;}
.gm-rule.cur{border-left:3px solid var(--blaze);padding-left:.6rem;margin-left:-.6rem;}
.gm-rule p{margin:.25rem 0 0;font-size:.88rem;color:var(--ink-2);line-height:1.35;}
/* game-mode cards on the pick screen — Golf War card format, per-mode accent */
.op.modeop{border:1.5px solid color-mix(in srgb, var(--macc, var(--blaze)) 55%, var(--line));}
.op.modeop .mico-op{display:inline-flex;align-items:center;justify-content:center;color:var(--macc,var(--ink));width:1.5em;}
.op.modeop .mico-op svg{width:23px;height:23px;}
.op.modeop .minfo{flex:0 0 auto;font-size:1.05rem;color:var(--ink-2);padding:.3rem .45rem;margin-right:-.2rem;}

/* mode panel on the round screen — same accent system as the Golf War cards */
.modecard{border:1px solid var(--line);border-top:3.5px solid var(--macc,var(--line));
  border-radius:var(--r-card,8px);padding:.75rem .85rem .85rem;margin:.9rem 0 .2rem;
  background:var(--glass, var(--panel));backdrop-filter:saturate(150%) blur(12px);
  box-shadow:var(--shadow-sm, none);}
.mode-territory{--macc:#5a9a44;}   .mode-hole_draft{--macc:#d96a2b;}
.mode-blind_bets{--macc:#8a63b8;}  .mode-club_roulette{--macc:#c23b2e;}
.mode-share_bag{--macc:#4a80b0;}   .mode-horse{--macc:#b08a3e;}
.mode-missions{--macc:#8a63b8;}    .mode-predictions{--macc:#3aa6a6;}
.mhead{display:flex;align-items:center;gap:.5rem;margin:0 0 .55rem;}
.mhead .mico{color:var(--macc,var(--ink));display:inline-flex;}
.mhead .mico svg{width:21px;height:21px;}
.mhead .mname{font-family:var(--disp);font-weight:700;text-transform:uppercase;letter-spacing:.02em;font-size:1.02rem;}
.mhead .msub{font-family:var(--mono);font-size:.6rem;color:var(--ink-2);margin-left:auto;text-align:right;max-width:46%;line-height:1.25;}
.tchips{display:flex;flex-wrap:wrap;gap:5px;margin:.25rem 0 .45rem;}
.tchip{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border-radius:9px;
  border:1px solid var(--line);font-family:var(--mono);font-size:.78rem;font-weight:700;color:var(--ink-2);
  transition:transform .15s var(--spring, ease);}
.tchip:active{transform:scale(.9);}
.tchip.cur{outline:2px solid var(--blaze);outline-offset:1.5px;}
.terrline{margin:.35rem 0;font-size:.9rem;line-height:1.35;}
.modestand{display:flex;flex-wrap:wrap;gap:6px;margin-top:.55rem;padding-top:.5rem;border-top:1px solid var(--hair,var(--line));}
.mchip{border:1px solid var(--line);border-radius:999px;padding:.22rem .65rem;font-size:.75rem;font-family:var(--mono);
  font-variant-numeric:tabular-nums;background:var(--panel-2, transparent);}
.mbtn{background:var(--panel-2);border:1px solid var(--line);border-radius:9px;padding:.45rem .8rem;
  font-size:.85rem;font-weight:700;font-family:var(--body);color:var(--ink);
  transition:transform .2s var(--spring, ease);}
.mbtn:active{transform:scale(.93);}
.mbtn.used{opacity:.35;text-decoration:line-through;}
.row.wrap{flex-wrap:wrap;}
/* ghost race line */
.ghostline{font-family:var(--mono);font-size:.75rem;color:var(--ink-2);margin:.2rem 0 .5rem;
  border:1.5px dashed var(--line);border-radius:9px;padding:.45rem .6rem;}
.ghostline .up{color:var(--turf);}
.ghostline .down{color:#c0392b;}
/* territory chip on the map hole bar */
.terrown{display:inline-block;font-family:var(--mono);font-size:.6rem;font-weight:700;border:1.5px solid;
  border-radius:999px;padding:.05rem .45rem;margin-left:.4rem;vertical-align:.08em;}
/* nemesis line in the caddie box */
.nemline{font-family:var(--mono);font-size:.7rem;color:#c23b2e;border-left:3px solid #c23b2e;
  padding:.25rem 0 .25rem .5rem;margin-bottom:.5rem;}
/* the news-desk recap */
.newsdesk{background:var(--panel, var(--ground));border:1px solid var(--line);border-radius:4px;padding:1.1rem 1.2rem 1.2rem;}
.news-masthead{font-family:var(--mono);font-size:.62rem;letter-spacing:.35em;text-transform:uppercase;color:var(--ink-2);
  text-align:center;border-bottom:2.5px solid var(--ink);padding-bottom:.45rem;}
.news-headline{font-size:1.7rem;line-height:1.02;margin:.8rem 0 .3rem;text-wrap:balance;}
.news-dateline{font-family:var(--mono);font-size:.65rem;letter-spacing:.12em;text-transform:uppercase;color:var(--blaze);margin-bottom:.6rem;}
.news-p{font-size:.92rem;line-height:1.45;margin:.55rem 0;color:var(--ink);}
.news-p.lede::first-letter{font-family:var(--disp);font-size:2.1em;float:left;line-height:.85;padding-right:.12em;}
.news-box{border-top:2px solid var(--ink);margin-top:.9rem;padding-top:.6rem;}
.news-box .spread{padding:.2rem 0;}
.op.locked{opacity:.62;}
.op.locked .oplock{color:var(--ink-2);margin-right:.2em;}
.xi{width:1em;height:1em;display:inline-block;vertical-align:-.12em;}
.tgtclear{color:var(--blaze);cursor:pointer;font-weight:700;}
/* the distance bubble must survive big numbers + the clear-target row */
.mapinfo{width:172px;box-sizing:border-box;text-align:center;padding:.55rem .8rem;
  display:flex;flex-direction:column;align-items:center;justify-content:center;}
.mapinfo b#infoBig, .mapinfo .mi-lbl, .mapinfo .mi-sub{width:100%;text-align:center;}
.mapinfo .mi-sub:empty{display:none;margin:0;}
.mapinfo b#infoBig{line-height:1.05;}
.mapinfo b#infoBig{font-size:2.2rem;letter-spacing:-.02em;white-space:nowrap;display:block;
  overflow:hidden;text-overflow:clip;}
.mapinfo b#infoBig.sz4{font-size:1.7rem;}
.mapinfo b#infoBig.sz6{font-size:1.3rem;}
.mapinfo .mi-lbl{white-space:nowrap;display:block;font-size:.62rem;margin-top:.15rem;}
.mapinfo .mi-sub .subrow{font-size:.63rem;letter-spacing:0;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.mapinfo .mi-sub{line-height:1.35;}
.mapinfo .subrow{display:block;white-space:nowrap;}
.windcol{position:relative;display:flex;align-items:stretch;}
.tgtclear-btn{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);
  background:var(--ink);color:var(--ground);border:0;border-radius:999px;
  font-family:var(--mono);font-size:.62rem;font-weight:700;padding:.3rem .65rem;white-space:nowrap;
  box-shadow:0 3px 10px rgba(0,0,0,.4);}
.badge-coin{filter:drop-shadow(0 1px 2px rgba(0,0,0,.25));vertical-align:-.2em;}


/* ============================================================================
   2026 PASS (2026-07-17) — the decade jump. The field-dossier *identity* stays
   (turf, blaze, condensed numerals, scorecard soul); the *rendering* modernizes:
   crisp neutral palette (manila olive retired), no more graph-paper wallpaper,
   16px surfaces, hairline rules, real elevation, vivid accents.
   Revert: restore app.css.bak-*-pre2026.
   ========================================================================== */
:root{
  --ground:#f5f4ef; --panel:#ffffff; --panel-2:#edebe4; --line:#e0ddd4;
  --ink:#16190f; --ink-2:#686e60; --sand:#8f9284;
  --turf:#1d9e50; --turf-ink:#fff; --blaze:#f2581c;
  --eagle:#d94a12; --birdie:#1d9e50; --bogey:#bd7d14; --dbl:#d33a2b;
  --r-card:16px; --r-ctl:12px;
  --shadow-sm:0 1px 2px rgba(20,24,16,.05);
  --shadow:0 1px 2px rgba(20,24,16,.04), 0 14px 32px -16px rgba(20,24,16,.18);
  --glass:rgba(255,255,255,.66); --glass-2:rgba(255,255,255,.86);
  --glass-brd:rgba(255,255,255,.6); --glass-hi:inset 0 1px 0 rgba(255,255,255,.65);
}
@media (prefers-color-scheme:dark){
  :root{
    --ground:#0b0d0a; --panel:#151814; --panel-2:#1e221d; --line:#2b2f29;
    --ink:#eef0e9; --ink-2:#9ba193; --sand:#a9ac9d;
    --turf:#3ecf6f; --turf-ink:#06130a; --blaze:#ff7036;
    --eagle:#ff7036; --birdie:#3ecf6f; --bogey:#e2a63a; --dbl:#ef6257;
    --shadow-sm:0 1px 3px rgba(0,0,0,.5);
    --shadow:0 2px 6px rgba(0,0,0,.45), 0 18px 40px -18px rgba(0,0,0,.8);
    --glass:rgba(21,24,20,.55); --glass-2:rgba(21,24,20,.8);
    --glass-brd:rgba(255,255,255,.09); --glass-hi:inset 0 1px 0 rgba(255,255,255,.06);
  }
}
:root[data-theme="light"]{
  --ground:#f5f4ef; --panel:#ffffff; --panel-2:#edebe4; --line:#e0ddd4;
  --ink:#16190f; --ink-2:#686e60; --sand:#8f9284;
  --turf:#1d9e50; --turf-ink:#fff; --blaze:#f2581c;
  --eagle:#d94a12; --birdie:#1d9e50; --bogey:#bd7d14; --dbl:#d33a2b;
  --shadow-sm:0 1px 2px rgba(20,24,16,.05);
  --shadow:0 1px 2px rgba(20,24,16,.04), 0 14px 32px -16px rgba(20,24,16,.18);
  --glass:rgba(255,255,255,.66); --glass-2:rgba(255,255,255,.86);
  --glass-brd:rgba(255,255,255,.6); --glass-hi:inset 0 1px 0 rgba(255,255,255,.65);
}
:root[data-theme="dark"]{
  --ground:#0b0d0a; --panel:#151814; --panel-2:#1e221d; --line:#2b2f29;
  --ink:#eef0e9; --ink-2:#9ba193; --sand:#a9ac9d;
  --turf:#3ecf6f; --turf-ink:#06130a; --blaze:#ff7036;
  --eagle:#ff7036; --birdie:#3ecf6f; --bogey:#e2a63a; --dbl:#ef6257;
  --shadow-sm:0 1px 3px rgba(0,0,0,.5);
  --shadow:0 2px 6px rgba(0,0,0,.45), 0 18px 40px -18px rgba(0,0,0,.8);
  --glass:rgba(21,24,20,.55); --glass-2:rgba(21,24,20,.8);
  --glass-brd:rgba(255,255,255,.09); --glass-hi:inset 0 1px 0 rgba(255,255,255,.06);
}

/* the graph-paper wallpaper retires; a faint turf aura breathes at the top instead */
html{background-image:radial-gradient(120% 60% at 50% -12%,
  color-mix(in srgb,var(--turf) 9%,transparent), transparent 62%);
  background-size:auto;background-position:center top;}

/* headers: keep the sporty condensed caps, lose the shouty tracking + hard underline */
h1,h2,h3{letter-spacing:.005em;}
.screenhead{border-bottom:1px solid var(--hair);}
.shead{border-bottom:1px solid var(--hair);}

/* the tale-of-the-tape: zine offset-shadow → real elevation */
.tape{border:1px solid var(--glass-brd);border-radius:var(--r-card);box-shadow:var(--shadow);
  background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);}
.tape .band{border-radius:0;background:var(--ink);}
.authcard{border:1px solid var(--glass-brd);border-radius:var(--r-card);box-shadow:var(--shadow);}

/* home menu rows: the beige left-stripe retires; only *state* earns a stripe */
.op{border-left:1px solid var(--glass-brd);border-radius:var(--r-card);}
.op.live{border-left:4px solid var(--birdie);}
.op.primary{border-left:0;}
.op .ic{stroke-width:1.7;}

/* dark data panels round out */
.gpspanel,.playhero,.invitebox,pre.out{border-radius:var(--r-card);}
.popover{border-radius:var(--r-card);}
.footerbar{border-radius:var(--r-card) var(--r-card) 0 0;max-width:508px;}

/* primary actions get a hint of dimension */
button.big.primary,button.primary,.rc-resume,.op.primary{
  background-image:linear-gradient(180deg,color-mix(in srgb,var(--turf) 88%,#fff),var(--turf));}
@media (prefers-color-scheme:dark){
  button.big.primary,button.primary,.rc-resume,.op.primary{
    background-image:linear-gradient(180deg,color-mix(in srgb,var(--turf) 90%,#fff),color-mix(in srgb,var(--turf) 88%,#000));}
}

/* scorecard tables: identity kept, weight lost */
.cardgrid{border:1px solid var(--line);}
.cardgrid th,.cardgrid td{border-color:var(--hair);}
table.mini th{border-bottom:1px solid var(--line);}
.msc td{border-color:var(--hair);}
.newsdesk{border:1px solid var(--line);border-radius:var(--r-card);box-shadow:var(--shadow);}
.news-masthead{border-bottom-width:1.5px;}
.news-box{border-top-width:1.5px;}

/* small round things commit to being round */
.pip{border-radius:50%;width:17px;height:17px;}
.recent{border-radius:999px;}
.cbadge,.copt .badge{border-radius:999px;}
.chips button{border-radius:10px;}
.tchip{border-radius:10px;}

/* steppers & pickers: soft keys, not bordered boxes */
.stepper button,.holehead button{border:1px solid var(--glass-brd);background:var(--glass-2);
  border-radius:var(--r-ctl);box-shadow:var(--shadow-sm),var(--glass-hi);}
.clubgrid button,.resultrow button,.cheats button,.admin button{border-radius:var(--r-ctl);}

/* nav: a touch rounder, icons a touch calmer */
.tabbar{border-radius:26px;}
.tabbar button svg{stroke-width:1.8;}
.tabbar button.on svg{filter:drop-shadow(0 0 8px color-mix(in srgb,var(--blaze) 40%,transparent));}

/* map chrome follows the new radius language */
#map{border-radius:var(--r-card);border:1px solid var(--line);}
.holebar.floating{border-radius:var(--r-card);}
.mapinfo{border-radius:var(--r-card);}
.mapbtn{border-radius:14px;}
.trackstrip{border-radius:14px;}

@media (prefers-reduced-motion:reduce){*{transition:none !important;animation:none !important;}}

/* the wordmark leads with the mascot's face instead of the old coin-C */
.brandball{height:1.12em;width:auto;vertical-align:-.14em;margin-right:.08em;
  filter:drop-shadow(0 1px 2px rgba(0,0,0,.2));}
.opsname h1.brandmark .brandball,.authcard h1.brandmark .brandball{flex:0 0 auto;}

/* Ted's walkthrough slide portrait */
.walk .wicon img{width:84px;height:auto;filter:drop-shadow(0 4px 12px rgba(0,0,0,.3));}

/* variant picker: category tabs + classic-mode accents */
.vtabs{display:flex;border:1px solid var(--line);border-radius:var(--r-ctl);overflow:hidden;margin-bottom:.2rem;background:var(--glass);}
.vtab{flex:1;padding:.6rem;font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;
  background:transparent;color:var(--ink-2);border:0;}
.vtab.on{background:var(--ink);color:var(--ground);font-weight:700;}
.mode-match_play{--macc:#2f6d94;} .mode-skins{--macc:#b08a3e;}
.mode-stableford{--macc:#5a9a44;} .mode-nassau{--macc:#3aa6a6;}
.mode-wolf{--macc:#7a4dad;}       .mode-bingo{--macc:#d96a2b;}

/* ============================================================================
   COURSE MAP POLISH (2026-07-18) — the on-map layer joins 2026: pulsing GPS
   puck, marching-ants aim line with a yardage chip, rangefinder arcs, a drawn
   pin flag, live F/C/B green depths, frosted overlays, cinematic flyovers.
   Revert: restore app.*.bak-*-premappolish.
   ========================================================================== */
/* the "you" puck: breathing ring + solid core */
.mepuck{position:relative;width:22px;height:22px;}
.mepuck i{position:absolute;inset:4px;border-radius:50%;background:#3ddc84;border:2.5px solid #fff;
  box-shadow:0 1px 6px rgba(0,0,0,.5);}
.mepuck::before{content:'';position:absolute;inset:0;border-radius:50%;
  background:rgba(61,220,132,.35);animation:mepulse 2.4s ease-out infinite;}
@keyframes mepulse{0%{transform:scale(.7);opacity:.9}70%{transform:scale(2.4);opacity:0}100%{opacity:0}}
/* marching-ants aim line (Leaflet puts the class on the SVG path) */
.aimants{animation:ants 1.5s linear infinite;filter:drop-shadow(0 1px 2px rgba(0,0,0,.6));}
@keyframes ants{to{stroke-dashoffset:-28;}}
/* yardage chip riding the aim line */
.aim-label{pointer-events:none;}
.aim-chip{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;
  font-family:var(--mono);font-weight:700;font-size:.78rem;color:#fff;
  background:rgba(13,17,11,.78);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  border:1px solid rgba(255,255,255,.22);border-radius:999px;padding:.14rem .55rem;
  box-shadow:0 2px 8px rgba(0,0,0,.4);}
.aim-chip.tgt{border-color:#ff7a1a;color:#ffb27d;}
/* rangefinder arc labels */
.arclabel{pointer-events:none;}
.arclabel{font-family:var(--mono);font-size:.6rem;font-weight:700;color:rgba(255,255,255,.75);
  text-shadow:0 1px 3px rgba(0,0,0,.8);transform:translate(-50%,-50%);}
/* live green depths (Back / Center / Front) */
.gdepthtag{pointer-events:none;display:flex;flex-direction:column;gap:1px;transform:translateY(-50%);}
.gdepthtag span{font-family:var(--mono);font-size:.64rem;font-weight:700;color:#fff;
  text-shadow:0 1px 3px rgba(0,0,0,.85);line-height:1.25;white-space:nowrap;}
.gdepthtag span b{color:#8fe3ae;margin-right:2px;}
/* pin flag shadowed into the turf */
.pinflag{pointer-events:none;filter:drop-shadow(0 2px 3px rgba(0,0,0,.5));}
/* map overlays stay SOLID — frosted glass turns to moss over busy imagery.
   (In dark mode these read as cream "paper" chips: max contrast on any turf.) */
.mapinfo,.trackstrip,.popover{background:var(--ink);color:var(--ground);
  -webkit-backdrop-filter:none;backdrop-filter:none;
  border:1px solid color-mix(in srgb,var(--ground) 18%,transparent);
  box-shadow:0 4px 18px rgba(0,0,0,.45);}
.mapbtn.caddie{background:var(--ink);color:var(--ground);
  -webkit-backdrop-filter:none;backdrop-filter:none;
  border:1px solid color-mix(in srgb,var(--ground) 18%,transparent);}
.mapbtn.caddie.on{background:var(--blaze);border-color:var(--blaze);color:#fff;}
@media (prefers-reduced-motion:reduce){.mepuck::before,.aimants{animation:none !important;}}

/* map polygons: soft glow on the green, whispering outlines everywhere else */
.greenglow{filter:drop-shadow(0 0 7px rgba(110,240,168,.55));}
.gdepthtag{pointer-events:none;}
.gdw{display:flex;flex-direction:column;gap:1px;transform:translateY(-50%);width:max-content;}
.gdw span{font-family:var(--mono);font-size:.64rem;font-weight:700;color:#fff;
  text-shadow:0 1px 3px rgba(0,0,0,.85);line-height:1.25;white-space:nowrap;}
.gdw span b{color:#8fe3ae;margin-right:2px;}

/* ============================================================================
   MAP HUD 2026 (2026-07-18) — boxes off, data on the world. Slim hole capsule,
   NAKED yardage with deep shadow, round FABs (Ted's face is the caddie button).
   ========================================================================== */
/* slim centered hole capsule */
.hudbar{position:absolute;top:calc(env(safe-area-inset-top) + 10px);left:50%;transform:translateX(-50%);
  z-index:800;display:flex;align-items:center;gap:.15rem;
  background:var(--ink);color:var(--ground);border-radius:999px;padding:.25rem .35rem;
  box-shadow:0 4px 18px rgba(0,0,0,.45);border:1px solid color-mix(in srgb,var(--ground) 15%,transparent);}
.hudnav{width:40px;height:40px;border-radius:50%;background:transparent;color:var(--ground);
  font-size:1.5rem;line-height:1;padding:0;}
.hudnav:disabled{opacity:.25;}
.hudmid{display:flex;flex-direction:column;align-items:center;padding:0 .55rem;min-width:86px;}
.hudno{font-family:var(--disp);font-weight:700;font-size:1.45rem;line-height:1;}
.hudmeta{font-family:var(--body);font-size:.68rem;color:color-mix(in srgb,var(--ground) 72%,transparent);
  white-space:nowrap;line-height:1.3;}
/* the yardage goes NAKED — big number on the world, no box */
.mapinfo, .mapright .mapinfo{background:transparent !important;border:0 !important;box-shadow:none !important;
  -webkit-backdrop-filter:none !important;backdrop-filter:none !important;
  width:auto !important;max-width:56vw;padding:0 !important;align-items:flex-end !important;text-align:right !important;}
.mapinfo b#infoBig{font-size:3.6rem;letter-spacing:-.03em;color:#fff;
  text-shadow:0 1px 2px rgba(0,0,0,.65), 0 4px 18px rgba(0,0,0,.6);}
.mapinfo b#infoBig.sz4{font-size:2.6rem;} .mapinfo b#infoBig.sz6{font-size:1.9rem;}
.mapinfo .mi-lbl{color:#fff;opacity:.85;font-family:var(--body);text-transform:none;letter-spacing:.02em;
  font-size:.78rem;text-shadow:0 1px 4px rgba(0,0,0,.8);}
.mapinfo .mi-sub, .mapinfo .mi-sub .subrow{color:#fff;opacity:.9;text-shadow:0 1px 4px rgba(0,0,0,.8);
  font-size:.7rem;text-align:right;}
/* round FABs */
.fab{width:60px;height:60px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:0;box-shadow:0 6px 20px rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.18);}
.fab.drop{background:var(--turf);color:var(--turf-ink);}
.fab .fabplus{font-size:1.7rem;line-height:1;font-weight:700;}
.fab .fablbl{font-family:var(--body);font-size:.56rem;letter-spacing:.04em;margin-top:-2px;opacity:.9;}
.fab.ted{background:var(--ink);overflow:hidden;}
.fab.ted img{width:44px;height:auto;filter:drop-shadow(0 1px 2px rgba(0,0,0,.4));}
.fab.ted.on{outline:3px solid var(--blaze);outline-offset:2px;}
.fab.mini{width:46px;height:46px;background:var(--ink);color:var(--ground);}
.fab.mini.on{background:var(--blaze);color:#fff;border-color:var(--blaze);}
.fabcol{display:flex;flex-direction:column;align-items:center;gap:.55rem;}
.fabspace{width:60px;}
.mapbtns{align-items:flex-end;}
.maptoggle{border-radius:50%;}
@media (prefers-color-scheme:dark){.fab.ted img{filter:none;}}

/* FAB row rides a touch higher off the tab bar */
.mapbtns{margin-bottom:16px;}

/* green sparkle: a light comet slowly rounding the fringe + a breathing glow */
.greencomet{animation:comet 7s linear infinite;filter:drop-shadow(0 0 4px rgba(180,255,215,.9));
  stroke-linecap:round;}
@keyframes comet{to{stroke-dashoffset:-266;}}
.greenglow{animation:greenbreathe 4.5s ease-in-out infinite;}
@keyframes greenbreathe{
  0%,100%{filter:drop-shadow(0 0 5px rgba(110,240,168,.4));}
  50%{filter:drop-shadow(0 0 11px rgba(110,240,168,.75));}}
@media (prefers-reduced-motion:reduce){.greencomet,.greenglow{animation:none !important;}}

/* QR join card */
.qrbox{background:#fff;border-radius:14px;padding:14px;max-width:280px;margin:0 auto;box-shadow:var(--shadow);}
.qrbox svg{display:block;width:100%;height:auto;}

/* the wordmark's "Off" wears turf green — same as the website */
.brandmark .brandoff{color:var(--turf);}

/* tee chips + handicap card */
.teechip{font-family:var(--mono);font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;
  border-radius:999px;padding:.14rem .5rem;margin-left:.45rem;vertical-align:.1em;
  background:var(--panel-2);color:var(--ink-2);border:1px solid var(--line);}
.teechip.black{background:#16190f;color:#fff;border-color:#16190f;}
.teechip.blue{background:#2f6d94;color:#fff;border-color:#2f6d94;}
.teechip.white{background:#fff;color:#16190f;border-color:#c9c5ba;}
.teechip.gold{background:#b08a3e;color:#fff;border-color:#b08a3e;}
.teechip.red{background:#c23b2e;color:#fff;border-color:#c23b2e;}
.hcpcard{border-left:4px solid var(--turf);}

/* hole record chip on the map hole bar — the overarching mark you chase */
#holeRec:empty{display:none}
.holerec{display:inline-flex;align-items:center;gap:.25rem;margin-top:2px;
  font-family:var(--mono);font-size:.66rem;font-weight:700;color:color-mix(in srgb,var(--ground) 82%,var(--ink-2));}
.holerec .xi{width:.85em;height:.85em}
.holerec small{font-weight:400;opacity:.7;margin-left:.15rem;text-transform:none;letter-spacing:0}
.holerec.mine{color:var(--turf);filter:brightness(1.25)}

/* practice result buttons: flight-path icon above the label */
.resultrow .flico{display:flex;justify-content:center;align-items:center;height:26px;color:var(--turf)}
.resultrow button:active .flico{color:var(--turf)}

/* swipeable head-to-head deck */
.tapedeck{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:.7rem;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}
.tapedeck::-webkit-scrollbar{display:none}
.tapedeck > .tape{flex:0 0 100%;scroll-snap-align:center;margin:0}
.tapedots{display:flex;justify-content:center;gap:.4rem;margin-top:.55rem}
.tapedots i{width:6px;height:6px;border-radius:50%;background:var(--line);transition:background .2s,transform .2s}
.tapedots i.on{background:var(--blaze);transform:scale(1.25)}

/* pin-drag confirm bar (field geometry fix) */
.pinbar{position:fixed;left:50%;bottom:calc(env(safe-area-inset-bottom) + 90px);transform:translateX(-50%);
  z-index:900;display:flex;align-items:center;gap:.5rem;background:var(--ink);color:var(--ground);
  border-radius:14px;padding:.55rem .7rem;box-shadow:0 6px 20px rgba(0,0,0,.5);max-width:92vw;font-size:.85rem}
.pinbar .mbtn{background:var(--panel-2);color:var(--ink);border:0;padding:.4rem .7rem}
