:root {
  --bg: #f4f1ea; --fg: #1d2622; --muted: #5d6a63; --accent: #2f6b57; --accent-2: #c58b3a;
  --card: #ffffff; --ring-inhale: #7cc4a8; --ring-exhale: #8fb3d9; --ring-hold: #d9c38f;
  --safe-top: env(safe-area-inset-top, 0px); --safe-bottom: env(safe-area-inset-bottom, 0px);
}
@media (prefers-color-scheme: dark) {
  :root { --bg: #121815; --fg: #e8eee9; --muted: #9aaaa1; --card: #1b2420; --accent: #6fbf9f; }
}
* { box-sizing: border-box; }
html, body { margin: 0; background: var(--bg); color: var(--fg); }
body {
  font: 17px/1.4 -apple-system, BlinkMacSystemFont, "Helvetica Neue", system-ui, sans-serif;
  padding: calc(var(--safe-top) + 12px) 16px calc(var(--safe-bottom) + 16px);
  -webkit-tap-highlight-color: transparent; -webkit-text-size-adjust: 100%;
  min-height: 100vh; min-height: 100dvh;
}
main { max-width: 760px; margin: 0 auto; }
[hidden] { display: none !important; }
h1 { margin: 0; font-size: 1.9rem; }
h2 { font-size: 1.1rem; margin: 1.4rem 0 .5rem; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; }
.tag, .hint, .disclaimer { color: var(--muted); font-size: .9rem; }
.stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 1rem; }
.stats div { background: var(--card); border-radius: 14px; padding: 12px; text-align: center; }
.num { display: block; font-size: 1.8rem; font-weight: 700; color: var(--accent); }
.lbl { font-size: .8rem; color: var(--muted); }
.session-list, .history { list-style: none; padding: 0; margin: 0; }
.session-btn {
  width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 12px;
  background: var(--card); color: var(--fg); border: 0; border-radius: 14px; padding: 16px; margin-bottom: 10px;
  font: inherit; text-align: left; cursor: pointer; min-height: 56px;
}
.session-dur { color: var(--muted); white-space: nowrap; }
.history li { padding: 6px 0; border-bottom: 1px solid color-mix(in srgb, var(--muted) 25%, transparent); }
.row { display: flex; align-items: center; gap: 10px; min-height: 44px; }
.row input { width: 22px; height: 22px; }
button { font: inherit; }
.primary, .secondary {
  min-height: 52px; min-width: 120px; border-radius: 26px; border: 0; padding: 0 24px; cursor: pointer; font-weight: 600;
}
.primary { background: var(--accent); color: #fff; }
.secondary { background: transparent; color: var(--accent); border: 2px solid var(--accent); margin-top: 8px; }
.link { background: none; border: 0; color: var(--accent); padding: 8px 0; cursor: pointer; }
.update-bar { position: fixed; left: 12px; right: 12px; bottom: calc(var(--safe-bottom) + 12px); background: var(--fg); color: var(--bg); padding: 12px 16px; border-radius: 12px; z-index: 10; }
.fatal { background: #b3261e; color: #fff; padding: 12px; border-radius: 8px; }

/* Player */
.player { display: flex; flex-direction: column; align-items: center; text-align: center; }
.player-top { width: 100%; display: flex; justify-content: space-between; align-items: center; }
.time { font-variant-numeric: tabular-nums; font-size: 1.2rem; color: var(--muted); }
.session-title-big { text-transform: none; letter-spacing: 0; color: var(--fg); font-size: 1.25rem; margin: .3rem 0 0; }
.move { margin: .3rem 0; color: var(--muted); min-height: 1.4em; }
.phase { color: var(--accent); }
.stage { position: relative; width: min(82vw, 52vh, 460px); aspect-ratio: 1; margin: 6px 0; }
.ring {
  position: absolute; inset: 0; border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--ring-hold) 35%, transparent) 55%, color-mix(in srgb, var(--ring-hold) 70%, transparent) 70%, transparent 71%);
  transform: scale(.55); transition: background-color .4s;
}
.player[data-breath="inhale"] .ring { background: radial-gradient(circle, color-mix(in srgb, var(--ring-inhale) 30%, transparent) 55%, color-mix(in srgb, var(--ring-inhale) 80%, transparent) 70%, transparent 71%); }
.player[data-breath="exhale"] .ring { background: radial-gradient(circle, color-mix(in srgb, var(--ring-exhale) 30%, transparent) 55%, color-mix(in srgb, var(--ring-exhale) 80%, transparent) 70%, transparent 71%); }
.figure-mount { position: absolute; inset: 6% 12%; }
.figure { width: 100%; height: 100%; display: block; }
.fig-limb, .fig-torso { stroke: var(--fg); stroke-width: 7; }
.fig-head { fill: var(--accent-2); stroke: var(--fg); stroke-width: 4; }
.fig-ground { stroke: var(--muted); stroke-width: 2; opacity: .5; }
.placeholder-badge { position: absolute; right: 0; bottom: 0; font-size: .7rem; color: var(--muted); border: 1px dashed var(--muted); border-radius: 8px; padding: 2px 6px; }
.player[data-breath="natural"] .ring, .player[data-breath="hold"] .ring { background: radial-gradient(circle, color-mix(in srgb, var(--ring-inhale) 18%, transparent) 55%, color-mix(in srgb, var(--ring-exhale) 45%, transparent) 70%, transparent 71%); }
.breath-label { font-size: 1.8rem; font-weight: 700; margin: .2rem 0; }
.cue { min-height: 2.8em; margin: 0 0 .6rem; max-width: 34ch; }
progress { width: 100%; max-width: 460px; height: 6px; accent-color: var(--accent); }
.controls { display: flex; gap: 12px; margin-top: 14px; flex-wrap: wrap; justify-content: center; }

/* iPad / landscape: figure left, text right */
@media (min-width: 700px) and (orientation: landscape) {
  .player { display: grid; grid-template-columns: 1fr 1fr; grid-template-areas: "top top" "title title" "move move" "stage label" "stage cue" "stage prog" "stage ctl"; column-gap: 24px; }
  .player-top { grid-area: top; } .session-title-big { grid-area: title; } .move { grid-area: move; }
  .stage { grid-area: stage; width: min(44vw, 70vh); }
  .breath-label { grid-area: label; align-self: end; } .cue { grid-area: cue; } progress { grid-area: prog; } .controls { grid-area: ctl; align-self: start; }
}

@media (prefers-reduced-motion: reduce) {
  .ring { transition: none; }
}

/* Sync */
.sync-status { background: var(--card); border-radius: 12px; padding: 10px 14px; margin: 0 0 6px; }
.sync-status[data-state="synced"]::before, .sync-status[data-state="idle"]::before { content: "● "; color: var(--accent); }
.sync-status[data-state="offline"]::before, .sync-status[data-state="syncing"]::before { content: "● "; color: var(--accent-2); }
.sync-status[data-state="error"]::before, .sync-status[data-state="signin"]::before, .sync-status[data-state="locked"]::before { content: "● "; color: #b3261e; }
.sync-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.advanced { margin-top: 8px; }
.advanced summary { cursor: pointer; color: var(--accent); min-height: 44px; display: flex; align-items: center; }
.field { display: flex; flex-direction: column; gap: 4px; margin: 10px 0; font-size: .95rem; }
.field input, .field select { font: inherit; font-size: 17px; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--muted); background: var(--card); color: var(--fg); min-height: 44px; }
.sync-form { max-width: 560px; }
.warning { background: color-mix(in srgb, var(--accent-2) 18%, var(--card)); border-radius: 12px; padding: 4px 14px; font-size: .95rem; }
.error { color: #b3261e; min-height: 1.2em; }
@media (prefers-color-scheme: dark) { .error { color: #ff8a80; } }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
code { font-family: ui-monospace, Menlo, monospace; word-break: break-all; user-select: all; -webkit-user-select: all; }

/* Safety card: full screen, scrolls; the 'I understand' button is pinned. Sizes are in em so iOS Dynamic Type
   (-apple-system-body) scales everything. */
main[data-view="safety"] { max-width: none; }
.safety-card {
  position: fixed; inset: 0; z-index: 20; display: flex; flex-direction: column; background: var(--bg);
  font: -apple-system-body; font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", system-ui, sans-serif;
  padding-top: var(--safe-top); height: 100vh; height: 100dvh;
}
.safety-scroll { flex: 1 1 auto; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain;
  padding: 1em 1em 1.5em; width: 100%; max-width: 40em; margin: 0 auto; overflow-wrap: anywhere; }
.safety-emergency { background: #fdecea; color: #5c1410; border: 3px solid #b3261e; border-radius: 14px; padding: .9em 1em; }
@media (prefers-color-scheme: dark) { .safety-emergency { background: #3a1412; color: #ffdad6; border-color: #ff8a80; } }
.safety-headline { font-size: 1.35em; line-height: 1.25; font-weight: 800; margin: 0 0 .5em; }
.safety-emergency-text { margin: 0; line-height: 1.4; }
.safety-emergency-text.as-headline { font-size: 1.2em; font-weight: 700; }
.safety-title { font-size: 1.1em; text-transform: none; letter-spacing: 0; color: var(--fg); margin: 1.2em 0 .3em; }
.safety-intro { color: var(--muted); margin: 0 0 .8em; }
.safety-block { background: var(--card); border-radius: 12px; padding: .2em 1em; margin: .8em 0; }
.safety-block h3 { font-size: 1em; margin: .7em 0 .3em; }
.safety-list { margin: .3em 0 .8em; padding-left: 1.2em; line-height: 1.4; }
.safety-list li { margin: .35em 0; }
.safety-footer { flex: 0 0 auto; padding: .75em 1em calc(var(--safe-bottom) + .75em); background: var(--bg);
  border-top: 1px solid color-mix(in srgb, var(--muted) 30%, transparent); display: flex; flex-direction: column; align-items: center; gap: .4em; }
.safety-footer .primary { width: 100%; max-width: 28em; min-height: 2.9em; font-size: 1em; }
.safety-btn { font-weight: 600; }
.safety-hint { margin: 0; color: var(--muted); font-size: min(.9em, 1.25rem); line-height: 1.25; text-align: center; }
.safety-hint[hidden] { display: none; }
.safety-footer .primary:disabled { opacity: .55; cursor: not-allowed; }
.safety-end { display: block; height: 1px; margin: 0; padding: 0; }
.safety-headline:focus, .safety-emergency-text:focus { outline: 2px solid currentColor; outline-offset: 3px; border-radius: 4px; }
.safety-headline:focus:not(:focus-visible), .safety-emergency-text:focus:not(:focus-visible) { outline: none; }
