[hidden]{display:none!important}
:root{
  --bg:#f2f7fb; --surface:#ffffff; --ink:#16222d; --muted:#5c6b7a; --line:#d5e2ee;
  --brand:#2b74b3; --brand-ink:#ffffff; --today:#f2c230;
  --t-easy:#3f9b6e; --t-workout:#e0a21a; --t-long:#6b5bd2; --t-race:#c8413a; --t-rest:#a4adb5; --t-cross:#2a9d8f;
  --shadow:0 10px 30px rgba(22,34,45,.18);
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --bg:#0f161d; --surface:#182330; --ink:#e8eff5; --muted:#9aa9b8; --line:#2b3a4a;
    --brand:#5aa3e6; --brand-ink:#0b1420; --t-long:#9a8cf0; --shadow:0 10px 30px rgba(0,0,0,.5);
  }
}
:root[data-theme="dark"]{
  --bg:#0f161d; --surface:#182330; --ink:#e8eff5; --muted:#9aa9b8; --line:#2b3a4a;
  --brand:#5aa3e6; --brand-ink:#0b1420; --t-long:#9a8cf0; --shadow:0 10px 30px rgba(0,0,0,.5);
}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--ink);font:16px/1.5 "Public Sans",system-ui,sans-serif;
  padding:0 0 calc(24px + env(safe-area-inset-bottom));-webkit-text-size-adjust:100%}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:3px solid var(--today);outline-offset:2px}
.wrap{max-width:760px;margin:0 auto;padding:0 16px}

header.top{background:var(--brand);color:var(--brand-ink);padding:calc(18px + env(safe-area-inset-top)) 0 20px}
header.top .wrap{display:flex;align-items:flex-end;justify-content:space-between;gap:12px}
.hello{font-size:15px;opacity:.85;margin:0}
h1{font-family:"Barlow Condensed",sans-serif;font-weight:700;font-size:34px;line-height:1;margin:2px 0 0}
.mode{font-size:13px;border:1px solid currentColor;border-radius:999px;padding:4px 10px;opacity:.9;white-space:nowrap}

.athletes{display:flex;gap:8px;align-items:center;padding:14px 0 4px}
.athletes select{flex:1;min-width:0;max-width:360px;border:1px solid var(--line);border-radius:999px;padding:8px 36px 8px 14px;font-weight:600;font-size:15px;background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%235c6b7a' stroke-width='2'/%3E%3C/svg%3E") no-repeat right 14px center;appearance:none;-webkit-appearance:none;color:var(--ink)}
.athletes .pill.add{flex:none}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.pill{border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:7px 14px;white-space:nowrap;font-weight:600;font-size:14px}
.pill[aria-pressed="true"]{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.pill.add{border-style:dashed;color:var(--muted);font-weight:500}
.tools{display:flex;gap:8px;flex-wrap:wrap;padding:8px 0 0}
.tool{background:none;border:1px solid var(--line);border-radius:8px;padding:6px 12px;font-size:14px}

.monthbar{display:flex;align-items:center;justify-content:space-between;padding:18px 0 8px}
.monthbar h2{font-family:"Barlow Condensed",sans-serif;font-weight:600;font-size:26px;margin:0}
.nav{display:flex;gap:4px}
.nav button{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:var(--surface);font-size:18px;line-height:1}
.nav .todaybtn{width:auto;border-radius:999px;padding:0 14px;font-size:14px}

.grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.dow{font-size:12px;color:var(--muted);text-align:center;padding:4px 0;font-weight:600}
.day{position:relative;min-height:74px;background:var(--surface);border:1px solid var(--line);border-radius:8px;
  padding:4px 4px 6px;text-align:left;display:flex;flex-direction:column;gap:3px;overflow:hidden}
.day.out{opacity:.4}
.day .n{font-family:"Barlow Condensed",sans-serif;font-weight:600;font-size:20px;line-height:1}
.day.today{border:2px solid var(--today);padding:3px 3px 5px}
.day.today .n{background:var(--today);color:#15211b;border-radius:4px;padding:1px 4px;align-self:flex-start}
.day .w{font-size:11px;line-height:1.2;border-left:4px solid var(--c);padding-left:4px;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;word-break:normal;overflow-wrap:normal;hyphens:auto}
.day .sent{position:absolute;right:4px;top:4px;width:8px;height:8px;border-radius:50%;background:var(--brand)}
@media (min-width:620px){.day{min-height:96px;padding:6px}.day .w{font-size:12.5px}}

.legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12.5px;color:var(--muted);padding:12px 0 0}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:10px;height:10px;border-radius:2px;background:var(--c)}
.legend .dot{border-radius:50%;background:var(--brand)}

h3{font-family:"Barlow Condensed",sans-serif;font-weight:600;font-size:22px;margin:26px 0 8px}
.list{display:flex;flex-direction:column;gap:8px}
.row{display:flex;gap:12px;align-items:stretch;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;text-align:left;width:100%}
.row .date{min-width:46px;text-align:center}
.row .date b{display:block;font-family:"Barlow Condensed",sans-serif;font-size:24px;line-height:1}
.row .date small{font-size:12px;color:var(--muted);font-weight:600}
.row .bar{width:4px;border-radius:2px;background:var(--c);flex:none}
.row .t{font-weight:600;display:block}
.row .d{font-size:14px;color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.empty{color:var(--muted);font-size:15px;padding:12px;border:1px dashed var(--line);border-radius:10px}

dialog{border:none;padding:0;background:var(--surface);color:var(--ink);width:100%;max-width:560px;
  border-radius:16px 16px 0 0;margin:auto auto 0;box-shadow:var(--shadow);max-height:88vh}
dialog::backdrop{background:rgba(10,20,30,.45)}
@media (min-width:620px){dialog{border-radius:16px;margin:auto}}
.sheet{padding:20px 20px calc(20px + env(safe-area-inset-bottom))}
.sheet .grab{width:40px;height:4px;border-radius:2px;background:var(--line);margin:-8px auto 14px}
.sheet .when{color:var(--muted);font-size:14px;font-weight:600;margin:0}
.sheet h4{font-family:"Barlow Condensed",sans-serif;font-weight:700;font-size:30px;line-height:1.05;margin:4px 0 10px}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;border-radius:999px;padding:3px 10px;border:1px solid var(--line)}
.chip i{width:8px;height:8px;border-radius:50%;background:var(--c)}
.details{white-space:pre-wrap;margin:14px 0 18px;font-size:16px}
.actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.btn{border:none;border-radius:10px;padding:12px 18px;font-weight:700;background:var(--brand);color:var(--brand-ink)}
.btn.ghost{background:none;border:1px solid var(--line);color:var(--ink);font-weight:600}
.btn.danger{background:none;border:1px solid var(--t-race);color:var(--t-race);font-weight:600}
.btn:disabled{opacity:.45;cursor:not-allowed}
.note{font-size:13px;color:var(--muted);margin:10px 0 0}
label{display:block;font-size:14px;font-weight:600;margin:12px 0 4px}
input[type=text],select,textarea{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--bg)}
textarea{min-height:120px;resize:vertical}
.check{display:flex;gap:8px;align-items:center;font-weight:500;margin:14px 0 4px}
.check input{width:18px;height:18px}

.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));transform:translate(-50%,20px);opacity:0;
  background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:10px;font-size:14px;max-width:calc(100% - 32px);
  transition:opacity .2s,transform .2s;pointer-events:none;z-index:50;overflow-wrap:anywhere}
.toast.show{opacity:1;transform:translate(-50%,0)}
.foot{margin:28px 0 0;font-size:13px;color:var(--muted)}
.foot button{background:none;border:none;color:var(--brand);padding:0;text-decoration:underline;font-size:13px}
@media (prefers-reduced-motion:reduce){.toast{transition:none}}
.tool.warn{color:var(--t-race)}
.login{max-width:380px;margin:32px auto 0;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:20px}
.login h2{font-family:"Barlow Condensed",sans-serif;font-weight:700;font-size:28px;margin:0 0 4px}
.login p{color:var(--muted);margin:0 0 8px;font-size:15px}
.login input{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--bg)}
.login .btn{width:100%;margin-top:14px}
.err{color:var(--t-race);font-size:14px;margin:10px 0 0;min-height:1em}
.loading{color:var(--muted);padding:24px 0}
.day .done{font-size:10.5px;line-height:1.1;font-weight:700;color:var(--brand);margin-top:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (min-width:620px){.day .done{font-size:12px}}
.legend .chk{color:var(--brand);font-weight:700}
.garmin{display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin:16px 0 0;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.garmin p{margin:0;font-size:14.5px}
.garmin .sub{color:var(--muted);font-size:13px}
.garmin .btn{padding:9px 14px}
.linkbtn{background:none;border:none;color:var(--brand);padding:0;text-decoration:underline;font-size:13px}
.done-card{border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:10px;padding:10px 12px;margin:12px 0 0}
.done-card .h{font-weight:700;margin:0 0 6px;display:flex;justify-content:space-between;gap:8px}
.done-card .h small{font-weight:500;color:var(--muted)}
.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 12px;margin:0}
.stats div{min-width:0}
.stats dt{font-size:12px;color:var(--muted);margin:0}
.stats dd{margin:0;font-family:"Barlow Condensed",sans-serif;font-weight:600;font-size:20px;line-height:1.1}
.missed{font-size:14px;color:var(--muted);margin:12px 0 0}
.row .res{display:block;font-size:13.5px;font-weight:600;color:var(--brand);margin-top:2px}
.row .res.no{color:var(--muted);font-weight:500}
.sheet{overflow-y:auto;max-height:88vh}
.day .done .u{display:none}
@media (min-width:620px){.day .done .u{display:inline}}
.laps{margin:10px 0 0;font-size:13.5px}
.laps summary{cursor:pointer;color:var(--brand);font-weight:600}
.laps table{width:100%;border-collapse:collapse;margin-top:6px;font-variant-numeric:tabular-nums}
.laps th{font-size:12px;color:var(--muted);font-weight:600;text-align:right;padding:3px 4px;border-bottom:1px solid var(--line)}
.laps td{text-align:right;padding:3px 4px;border-bottom:1px solid var(--line)}
.laps th:first-child,.laps td:first-child{text-align:left;color:var(--muted)}
.foot a,.note a{color:var(--brand)}
/* ---- workouts ---- */
.tabs{display:inline-flex;gap:2px;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:3px;margin:14px 0 0}
.tabs button{border:none;background:none;border-radius:999px;padding:7px 18px;font-weight:600;font-size:14px;color:var(--muted)}
.tabs button[aria-pressed="true"]{background:var(--brand);color:var(--brand-ink)}
.lib-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:30px 0 10px}
.lib-head h3{margin:0}
.lib-head .btn{padding:9px 14px}
.row .res.no{font-weight:600}
.stepsv{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:0 0 14px;background:var(--bg)}
.stepsv .h{font-weight:700;margin:0 0 4px;display:flex;justify-content:space-between;gap:8px}
.stepsv .h small{font-weight:500;color:var(--muted)}
.stepsv ol{margin:0;padding-left:20px}
.stepsv li{margin:3px 0;font-size:15px}
.stepsv li.rp>ol{margin-top:2px;padding-left:18px;border-left:2px solid var(--line)}
.actions.tight{margin-top:8px;gap:8px}
.actions.tight .btn{padding:9px 14px}
.bwho{display:flex;gap:10px;align-items:center;margin:14px 0 0}
.bwho label{margin:0;white-space:nowrap}
.bwho select{width:auto;min-width:0;flex:1}
.st,.rep{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin:8px 0;background:var(--bg)}
.st{border-left:4px solid var(--t-workout)}
.st.k-warmup,.st.k-cooldown{border-left-color:var(--t-easy)}
.st.k-recovery,.st.k-rest{border-left-color:var(--t-rest)}
.rep{border-style:dashed;background:transparent}
.rep>.st{background:var(--bg)}
.rep-top{display:flex;align-items:center;gap:8px;font-weight:700}
.rep-top .mv{margin-left:auto}
.st-top{display:flex;align-items:center;gap:8px}
.st-top .mv{margin-left:auto}
.sname{font-size:13px;font-weight:600;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.st-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:6px}
.st select,.st input[type=text],.rep input[type=text]{width:auto;padding:7px 9px;border-radius:8px;font-size:14px;background:var(--surface);border:1px solid var(--line)}
.st input.w-time{width:80px}
.st input.w-num,.rep input[type=text]{width:66px}
.st input.w-note{width:100%;margin-top:6px}
.mv{display:flex;gap:3px;flex:none}
.mv button{width:30px;height:30px;padding:0;border:1px solid var(--line);border-radius:8px;background:var(--surface);font-size:13px;line-height:1;color:var(--ink)}
.wlabel{font-size:13px;font-weight:600;color:var(--brand)}
.linkbtn.addin{margin:2px 0 4px}
.btotal{font-weight:700;margin:10px 0 0}
.warnbox{border:1px solid var(--today);border-left-width:4px;border-radius:10px;padding:8px 12px;margin:10px 0 0;font-size:14px}
.calform{border:1px solid var(--line);border-radius:12px;padding:12px;margin-top:14px}
.calform .h{font-weight:700;margin:0}
.calform input[type=date]{width:100%;border:1px solid var(--line);border-radius:10px;padding:9px 12px;background:var(--bg)}
.ztable{width:100%;border-collapse:collapse;margin-top:14px;font-variant-numeric:tabular-nums}
.ztable th{text-align:left;font-size:13px;color:var(--muted);font-weight:600;padding:4px 6px}
.ztable tbody th{color:var(--ink);font-size:15px;font-weight:600}
.ztable td{padding:3px 6px}
.ztable input{width:100%;max-width:90px;border:1px solid var(--line);border-radius:8px;padding:7px 9px;background:var(--bg)}
.day .w.mine{border-left-style:dashed}
.legend i.mine{background:none;border:2px dashed var(--muted);width:8px;height:8px}
.row .bar.mine{background:repeating-linear-gradient(var(--c) 0 6px,transparent 6px 10px)}
.row .d b{font-weight:600;color:var(--ink)}
.tabs{margin:14px 0 0}
.inline-builder{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px 16px 18px;margin-top:16px}
.inline-builder h4{font-family:"Barlow Condensed",sans-serif;font-weight:700;font-size:26px;line-height:1.05;margin:2px 0 8px}
.inline-builder .when{color:var(--muted);font-size:14px;font-weight:600;margin:0}
.libitem{display:flex;flex-direction:column;gap:6px}
.libitem .row{border-bottom-left-radius:4px;border-bottom-right-radius:4px}
.libacts{display:flex;gap:6px;flex-wrap:wrap;padding:0 2px 6px}
.libacts .tool{padding:5px 10px;font-size:13px}

.zframe{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--surface);height:calc(100vh - 230px);min-height:560px}
.zframe iframe{width:100%;height:100%;border:0;display:block}
.tabs button{padding:7px 14px}
.tabs{display:flex;width:100%}
.tabs button{flex:1;padding:7px 4px;font-size:14px;white-space:nowrap}
@media (max-width:360px){.tabs button{font-size:13px}}

header.top .wrap{align-items:flex-end}
.gear{background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.35);color:var(--brand-ink);border-radius:50%;width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;flex:none;margin-bottom:2px}
.gear:hover{background:rgba(255,255,255,.24)}
.dev{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.dev:last-of-type{border-bottom:none}
.dev .sub{color:var(--muted);font-size:13.5px}
.dev-act .btn{padding:8px 14px;white-space:nowrap;text-decoration:none}
.sheet h3{font-size:18px}

/* No browser pull-to-refresh inside the app; swipe-down closes sheets instead */
body.sheet-open{overscroll-behavior-y:none}
.sheet{overscroll-behavior:contain;touch-action:pan-y}
dialog{will-change:transform}
.sheet .grab{width:48px;height:5px;margin:-8px auto 14px;padding:10px 0;background-clip:content-box;touch-action:none}

.sheet{position:relative}
.sheet-x{position:absolute;top:10px;right:12px;width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:var(--surface);color:var(--muted);font-size:15px;line-height:1;display:inline-flex;align-items:center;justify-content:center;z-index:2}
.sheet h4,.sheet .when{padding-right:44px}
