/* theme-night.css — patient-facing "dreamy night" skin.
   OVERRIDE LAYER: link this AFTER the core sheets, and only on patient pages.
   Clinician/admin pages must never link it — they keep the neutral clinical look.

   Clinical rules from DESIGN.md still hold: no emoji, red reserved for crisis /
   "請與診所討論" copy, teal stays the primary action colour, touch targets >=44px.
   This sheet changes surface only, never meaning. */

:root {
  /* Night palette (additive — core tokens in variables.css are untouched). */
  --night-lavender:    #E9E4F8;
  --night-blush:       #F5E9F2;
  --night-mist:        #FBFAFD;
  --night-ink:         #1E1B33;
  --night-ink-soft:    #6F6B8A;
  --night-violet:      #7C6BD1;
  --night-violet-soft: #EDE9FA;

  --night-line:        rgba(120, 110, 170, 0.14);
  --night-line-strong: rgba(120, 110, 170, 0.24);

  --night-card-bg:     rgba(255, 255, 255, 0.78);
  --night-card-line:   rgba(255, 255, 255, 0.92);
  --night-card-shadow: 0 6px 22px rgba(78, 66, 130, 0.10);
  --night-radius:      18px;
  --night-radius-sm:   14px;
}

/* ===========================================================================
   PAGE CANVAS — gradient dusk + the moon/cloud art. The gradient underneath is
   the fallback when the art is cropped away.
   =========================================================================== */
body {
  color: var(--night-ink);
  background-color: var(--night-mist);
  background-image:
    url("/assets/img/bk.png"),
    linear-gradient(165deg, var(--night-lavender) 0%, var(--night-blush) 45%, var(--night-mist) 100%);
  background-repeat: no-repeat, no-repeat;
  background-position: top center, top center;
  background-size: cover, cover;
  background-attachment: fixed, fixed;
  min-height: 100vh;
}

.secondary { color: var(--night-ink-soft); }
.muted, .loading { color: var(--night-ink-soft); }

/* Room for the fixed bottom nav — only on pages that actually render one. The
   coach page is a 100dvh flex column with its own pinned composer. */
.home:has(.bottom-nav),
.page:has(.bottom-nav) { padding-bottom: 96px; }

/* Greeting block (§54.1). Settings moved out of the bottom-nav row into a
   top-right icon button here, so the nav only carries the 4 primary
   destinations (週摘要/量表/課程/歷史). */
.home-head { position: relative; }
.home-head h1 { font-size: 30px; letter-spacing: -0.01em; color: var(--night-ink); padding-right: 52px; }
.home-head .secondary { font-size: var(--font-size-3); }

.home-head__settings {
  position: absolute;
  top: 0;
  right: 0;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, 0.6);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236F6B8A'%3E%3Cpath d='M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 20px 20px;
}

/* Back link left, title optically centred. */
.page-head {
  position: relative;
  justify-content: center;
  min-height: 44px;
}
.page-head h1 { font-size: var(--font-size-5); color: var(--night-ink); }
.page-head .back {
  position: absolute;
  left: 0;
  color: var(--color-accent);
  font-weight: var(--font-weight-medium);
}

/* ===========================================================================
   SURFACES — one frosted card recipe reused by every module.
   =========================================================================== */
.card,
.chart-container,
.instrument-card,
.question-card,
.progress-card,
.review-section,
.today-task-preview,
.course-row,
.cal-detail .card,
.task-card {
  background: var(--night-card-bg);
  -webkit-backdrop-filter: blur(14px) saturate(1.1);
  backdrop-filter: blur(14px) saturate(1.1);
  border: 1px solid var(--night-card-line);
  border-radius: var(--night-radius);
  box-shadow: var(--night-card-shadow);
}

.card { padding: var(--space-4); margin-bottom: var(--space-4); }

.card__title {
  font-size: var(--font-size-4);
  font-weight: var(--font-weight-bold);
  color: var(--night-ink);
  margin-bottom: var(--space-3);
}

.state-pill {
  background: rgba(255, 255, 255, 0.75);
  color: var(--night-ink-soft);
  border: 1px solid var(--night-line);
}
.state-pill--done {
  background: var(--color-accent-soft);
  color: var(--color-accent);
  border-color: transparent;
  font-weight: var(--font-weight-medium);
}

.task-line { color: var(--night-ink); }
.metric-row { border-bottom-color: var(--night-line); }
.metric-row strong { color: var(--night-ink); }

/* ---------------------------------------------------------------------------
   HOME — icon-tile cards. ONLY cards carrying a card--* hook get the tile grid,
   so plain .card users (settings, wearable, assessment) stay untouched.
   The hooks are added in home.js: CSS cannot select by text, and :nth-child()
   would mis-assign icons because assessment/course cards render conditionally.
--------------------------------------------------------------------------- */
.card--diary,
.card--task,
.card--coach,
.card--week,
.card--course,
.card--assessment {
  display: grid;
  grid-template-columns: 46px 1fr;
  column-gap: 14px;
  row-gap: 6px;
  align-items: start;
}
.card--diary > *,
.card--task > *,
.card--coach > *,
.card--week > *,
.card--course > *,
.card--assessment > * { grid-column: 2; min-width: 0; }

.card--diary::before,
.card--task::before,
.card--coach::before,
.card--week::before,
.card--course::before,
.card--assessment::before {
  content: "";
  grid-column: 1;
  grid-row: 1 / -1;
  width: 46px;
  height: 46px;
  border-radius: var(--night-radius-sm);
  background-color: var(--tile-bg, var(--night-violet-soft));
  background-image: var(--tile-icon, none);
  background-repeat: no-repeat;
  background-position: center;
  background-size: 24px 24px;
}

.card--diary .card__title,
.card--task .card__title,
.card--coach .card__title,
.card--week .card__title,
.card--course .card__title,
.card--assessment .card__title { margin-bottom: 0; align-self: center; }

.card--diary .state-pill,
.card--assessment .state-pill { justify-self: start; margin-bottom: 0; }

/* Cards whose primary action sits beside the title. */
.card--coach,
.card--assessment,
.card--course {
  grid-template-columns: 46px 1fr auto;
  align-items: center;
}
.card--coach > .btn,
.card--assessment > .btn,
.card--course > .btn {
  grid-column: 3;
  grid-row: 1 / -1;
  align-self: center;
  width: auto;
  margin-top: 0;
  white-space: nowrap;
}

.card--week .metric-row strong { font-size: var(--font-size-6); }

/* Icon tiles — inline SVG data URIs, no extra requests. */
.card--diary {
  --tile-bg: #D9F0E5;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232F7D63' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 19.5A2.5 2.5 0 0 1 6.5 17H20'/%3E%3Cpath d='M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z'/%3E%3C/svg%3E");
}
.card--task {
  --tile-bg: #E6DFF9;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C6BD1' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Ccircle cx='12' cy='12' r='5'/%3E%3Ccircle cx='12' cy='12' r='1.4' fill='%237C6BD1'/%3E%3C/svg%3E");
}
.card--coach {
  --tile-bg: #E2E2FA;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236A5FC4' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 11.5a8.4 8.4 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.4 8.4 0 0 1-3.8-.9L3 21l1.9-5.7a8.4 8.4 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.4 8.4 0 0 1 3.8-.9h.5a8.5 8.5 0 0 1 8 8z'/%3E%3C/svg%3E");
}
.card--week {
  --tile-bg: #DCEAF8;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234A7BA8' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 20V10'/%3E%3Cpath d='M12 20V4'/%3E%3Cpath d='M6 20v-6'/%3E%3C/svg%3E");
}
.card--course {
  --tile-bg: #EFE2F5;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239059B8' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z'/%3E%3Cpath d='M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z'/%3E%3C/svg%3E");
}
.card--assessment { --tile-bg: #E2ECF9; }
.card--inst-isi {
  --tile-bg: #DCF0EA;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232F7D7D' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z'/%3E%3C/svg%3E");
}
.card--inst-phq9 {
  --tile-bg: #DEE6F9;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235B6FC0' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 15.6A4.5 4.5 0 0 0 17.5 7h-1.2A7 7 0 1 0 5 14'/%3E%3Cpath d='M8 18v2'/%3E%3Cpath d='M12 18.5v2.5'/%3E%3Cpath d='M16 18v2'/%3E%3C/svg%3E");
}
.card--inst-gad7 {
  --tile-bg: #EDE0F4;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238A5BB5' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 14c1.5-1.5 3-3.2 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.8 0-3 .5-4.5 2-1.5-1.5-2.7-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4 3 5.5l7 7z'/%3E%3C/svg%3E");
}
.card--inst-ess {
  --tile-bg: #F3E7DA;
  --tile-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23B07F45' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4'/%3E%3C/svg%3E");
}

/* ===========================================================================
   BUTTONS
   =========================================================================== */
.btn,
.diary-nav button,
.completion-btn,
.report-range-btn,
.cal-nav,
.report-nav-btn {
  border-radius: 12px;
  border-color: var(--night-line-strong);
  background: rgba(255, 255, 255, 0.9);
  color: var(--night-ink);
}
.btn { font-weight: var(--font-weight-medium); }
.btn:hover { border-color: var(--color-accent); }

.btn-primary,
.diary-nav .btn-primary,
.goto-task-btn {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #fff;
  box-shadow: 0 4px 12px rgba(45, 106, 111, 0.22);
}
.btn-primary:hover,
.diary-nav .btn-primary:hover,
.goto-task-btn:hover { background: #255a5e; }

/* Course action reads as the softer, secondary path. */
.card--course .btn {
  background: transparent;
  border-color: var(--night-violet);
  color: var(--night-violet);
  box-shadow: none;
}

.skip-btn { color: var(--night-ink-soft); }
.skip-btn:hover { color: var(--color-accent); }

/* ===========================================================================
   BOTTOM NAV — fixed frosted bar, icon over label. Icons keyed off href, so no
   markup change is needed.
   =========================================================================== */
.bottom-nav {
  position: fixed;
  left: 50%;
  transform: translateX(-50%);
  bottom: 0;
  width: 100%;
  max-width: 480px;
  margin-top: 0;
  padding: var(--space-2) var(--space-2) calc(var(--space-2) + env(safe-area-inset-bottom, 0px));
  background: rgba(255, 255, 255, 0.82);
  -webkit-backdrop-filter: blur(16px) saturate(1.1);
  backdrop-filter: blur(16px) saturate(1.1);
  border-top: 1px solid var(--night-line);
  box-shadow: 0 -4px 18px rgba(78, 66, 130, 0.06);
  z-index: 20;
}
.bottom-nav a {
  flex-direction: column;
  gap: 2px;
  font-size: var(--font-size-1);
  color: var(--night-ink-soft);
  padding: var(--space-1) var(--space-2);
}
.bottom-nav a::before {
  content: "";
  width: 22px;
  height: 22px;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 22px 22px;
  background-image: var(--nav-icon, none);
}
.bottom-nav a[href="/pages/weekly-summary.html"] {
  --nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232D6A6F' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9.5 12 3l9 6.5V20a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");
  color: var(--color-accent);
}
.bottom-nav a[href="/pages/assessment-new.html"] {
  --nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236F6B8A' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='4' width='14' height='17' rx='2'/%3E%3Cpath d='M9 3h6v3H9z'/%3E%3Cpath d='M9 11h6M9 15h4'/%3E%3C/svg%3E");
}
.bottom-nav a[href="/pages/courses.html"] {
  --nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236F6B8A' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='16' rx='3'/%3E%3Cpath d='M11 9.5v5l4-2.5z'/%3E%3C/svg%3E");
}
.bottom-nav a[href="/pages/history.html"] {
  --nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236F6B8A' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E");
}
.bottom-nav a[href="/pages/library.html"] {
  --nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236F6B8A' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 5.5A2.5 2.5 0 0 1 6.5 3H20v15H6.5A2.5 2.5 0 0 0 4 20.5z'/%3E%3Cpath d='M4 5.5v15'/%3E%3Cpath d='M8 8h8M8 11.5h8'/%3E%3C/svg%3E");
}
.bottom-nav a[href="/pages/reports.html"] {
  --nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236F6B8A' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6M9 17h4'/%3E%3C/svg%3E");
}
.bottom-nav a[href="/pages/settings.html"] {
  --nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236F6B8A' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M19.4 15a1.7 1.7 0 0 0 .3 1.9l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-2.9 1.2 2 2 0 1 1-4 0 1.7 1.7 0 0 0-2.9-1.2l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1A1.7 1.7 0 0 0 4.6 15a2 2 0 1 1 0-4 1.7 1.7 0 0 0 1.2-2.9l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.7 1.7 0 0 0 2.9-1.2 2 2 0 1 1 4 0 1.7 1.7 0 0 0 2.9 1.2l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0 1.2 2.9 2 2 0 1 1 0 4z'/%3E%3C/svg%3E");
}

/* ===========================================================================
   FORMS (global: diary, onboarding, assessment, course-qa, settings)
   =========================================================================== */
input[type="text"],
input[type="time"],
input[type="number"],
input[type="date"],
textarea,
select {
  border: 1px solid var(--night-line-strong);
  border-radius: var(--night-radius-sm);
  background: #fff;
  color: var(--night-ink);
  padding: var(--space-3) var(--space-4);
}
input[type="text"]:focus,
input[type="time"]:focus,
input[type="number"]:focus,
input[type="date"]:focus,
textarea:focus,
select:focus {
  border-color: var(--color-accent);
  box-shadow: 0 0 0 3px rgba(45, 106, 111, 0.12);
}
input:disabled, textarea:disabled, select:disabled,
input[readonly], textarea[readonly] {
  background: rgba(240, 238, 246, 0.7);
  color: var(--night-ink-soft);
}

.form-label { color: var(--night-ink); font-weight: var(--font-weight-bold); }
.form-label .hint, .form-hint { color: var(--night-ink-soft); }

input[type="range"] { background: #E4E1F0; accent-color: var(--color-accent); }
input[type="range"]::-webkit-slider-thumb { box-shadow: 0 2px 8px rgba(45, 106, 111, 0.35); }
.range-value strong { color: var(--color-accent); }
.range-label, .range-value .range-unit { color: var(--night-ink-soft); }

.step-indicator { color: var(--night-ink-soft); }
.step-indicator strong { color: var(--color-accent); }

.form-error {
  background: rgba(181, 82, 74, 0.09);
  border: 1px solid rgba(181, 82, 74, 0.25);
  border-radius: var(--night-radius-sm);
}

/* Time chips (forms.css + diary.css both define .time-chip). */
.time-chip {
  border-radius: var(--radius-pill);
  border-color: var(--night-line-strong);
  background: rgba(255, 255, 255, 0.9);
  color: var(--night-ink);
}
.time-chip:hover { border-color: var(--color-accent); background: var(--color-accent-soft); }
.time-chip.active {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #fff;
  box-shadow: 0 3px 10px rgba(45, 106, 111, 0.22);
}

.checkbox-item label, .radio-item label { color: var(--night-ink); }

/* ===========================================================================
   TODAY-TASK
   =========================================================================== */
.task-card { padding: var(--space-5); }

.task-section-label {
  color: var(--color-accent);
  text-transform: none;
  letter-spacing: 0;
  font-weight: var(--font-weight-bold);
}
.task-title { font-size: var(--font-size-6); color: var(--night-ink); letter-spacing: -0.01em; }

.task-instruction,
.task-rationale {
  display: grid;
  grid-template-columns: 34px 1fr;
  column-gap: var(--space-3);
  align-items: start;
  border-left: 0;
  border-radius: var(--night-radius-sm);
  padding: var(--space-4);
}
.task-instruction::before,
.task-rationale::before {
  content: "";
  grid-column: 1;
  grid-row: 1 / -1;
  width: 34px;
  height: 34px;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 34px 34px;
}
.task-instruction > *, .task-rationale > * { grid-column: 2; }

.task-instruction { background: #E4F2EC; border: 1px solid rgba(45, 106, 111, 0.10); }
.task-instruction::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 34 34' fill='none'%3E%3Ccircle cx='17' cy='17' r='15' stroke='%232D6A6F' stroke-width='1.6'/%3E%3Cpath d='M11 17.5l4 4 8-8' stroke='%232D6A6F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.task-instruction-header {
  color: var(--color-accent);
  font-weight: var(--font-weight-bold);
  font-size: var(--font-size-3);
  text-transform: none;
  letter-spacing: 0;
}
.task-instruction-text { color: var(--night-ink); }

.task-rationale { background: rgba(240, 238, 246, 0.85); border: 1px solid var(--night-line); }
.task-rationale::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 34 34' fill='none'%3E%3Ccircle cx='17' cy='17' r='15' stroke='%236F6B8A' stroke-width='1.6'/%3E%3Cpath d='M13.6 13.4a3.5 3.5 0 1 1 3.4 4.3v2' stroke='%236F6B8A' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Ccircle cx='17' cy='23.4' r='1.2' fill='%236F6B8A'/%3E%3C/svg%3E");
}
.task-rationale-header {
  color: var(--night-ink);
  font-weight: var(--font-weight-bold);
  font-size: var(--font-size-3);
  text-transform: none;
  letter-spacing: 0;
}
.task-rationale-text { color: var(--night-ink-soft); }

.commitment-label, .confidence-label, .completion-label {
  color: var(--night-ink);
  font-weight: var(--font-weight-bold);
  font-size: var(--font-size-4);
}

.commitment-chip {
  display: grid;
  grid-template-columns: 34px 1fr 34px;
  align-items: center;
  min-height: 56px;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--night-radius-sm);
  border-color: var(--night-line-strong);
  background: rgba(255, 255, 255, 0.9);
  color: var(--night-ink);
}
.commitment-chip::before {
  content: "";
  width: 34px;
  height: 34px;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 34px 34px;
  background-image: var(--chip-icon, none);
}
.commitment-chip[data-commitment="我願意照做"] {
  --chip-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 34 34' fill='none'%3E%3Ccircle cx='17' cy='17' r='15' fill='%23E4F2EC' stroke='%232D6A6F' stroke-width='1.4'/%3E%3Cpath d='M11 17.5l4 4 8-8' stroke='%232D6A6F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.commitment-chip[data-commitment="我想降低難度"] {
  --chip-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 34 34' fill='none'%3E%3Ccircle cx='17' cy='17' r='15' fill='%23EDE9FA' stroke='%237C6BD1' stroke-width='1.4'/%3E%3Cpath d='M10 13h14M10 17h14M10 21h14' stroke='%237C6BD1' stroke-width='1.8' stroke-linecap='round'/%3E%3Ccircle cx='20' cy='13' r='2.4' fill='%23fff' stroke='%237C6BD1' stroke-width='1.6'/%3E%3Ccircle cx='14' cy='17' r='2.4' fill='%23fff' stroke='%237C6BD1' stroke-width='1.6'/%3E%3Ccircle cx='19' cy='21' r='2.4' fill='%23fff' stroke='%237C6BD1' stroke-width='1.6'/%3E%3C/svg%3E");
}
.commitment-chip[data-commitment="今天狀況特殊"] {
  --chip-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 34 34' fill='none'%3E%3Ccircle cx='17' cy='17' r='15' fill='%23E2EAFA' stroke='%235B6FC0' stroke-width='1.4'/%3E%3Cpath d='M17 9.5l2.3 4.7 5.2.8-3.8 3.7.9 5.2-4.6-2.5-4.6 2.5.9-5.2-3.8-3.7 5.2-.8z' fill='%235B6FC0'/%3E%3C/svg%3E");
}
.commitment-chip.active {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #fff;
  box-shadow: 0 4px 12px rgba(45, 106, 111, 0.22);
}
.commitment-chip.active::before { filter: brightness(0) invert(1); opacity: .95; }

.confidence-section {
  background: rgba(255, 255, 255, 0.9);
  border: 1px solid var(--night-line);
  border-radius: 16px;
  padding: var(--space-5) var(--space-4);
}
.confidence-slider { background: #E4E1F0; accent-color: var(--color-accent); }
.confidence-slider::-webkit-slider-thumb { box-shadow: 0 2px 8px rgba(45, 106, 111, 0.35); }
.confidence-value strong { font-size: 40px; color: var(--color-accent); min-width: 52px; }

.completion-group { border-top-color: var(--night-line); }

.downgrade-notification {
  background: rgba(197, 143, 75, 0.10);
  border-left: 0;
  border: 1px solid rgba(197, 143, 75, 0.30);
  border-radius: var(--night-radius-sm);
}
.downgrade-new-instruction {
  border-left: 0;
  border: 1px solid rgba(45, 106, 111, 0.20);
  border-radius: var(--night-radius-sm);
}

/* ===========================================================================
   DIARY (multi-step form + post-submit feedback)
   =========================================================================== */
.diary-step h2 { color: var(--night-ink); }

.same-as-yesterday {
  border-radius: var(--radius-pill);
  border-color: var(--color-accent);
  background: rgba(255, 255, 255, 0.85);
}

.score-section {
  background: rgba(255, 255, 255, 0.86);
  border: 1px solid var(--night-line);
  border-radius: var(--night-radius-sm);
  padding: var(--space-4);
}
.score-section h3 { color: var(--night-ink); }

.review-section { padding: var(--space-4); }
.review-section h3 { color: var(--night-ink); }
.review-item { border-bottom-color: var(--night-line); }
.review-item-label { color: var(--night-ink-soft); }
.review-item-value { color: var(--night-ink); }

.feedback-header { border-bottom-color: rgba(74, 139, 112, 0.4); }

.metric-highlight {
  background: rgba(45, 106, 111, 0.08);
  border: 1px solid rgba(45, 106, 111, 0.16);
  border-radius: var(--night-radius-sm);
}
.metric-highlight-label { color: var(--night-ink-soft); }

.trend-sentence {
  border-left: 3px solid var(--color-accent);
  color: var(--night-ink-soft);
}

.today-task-preview { padding: var(--space-4); }
.today-task-preview h3 { color: var(--night-ink); }
.today-task-preview p { color: var(--night-ink-soft); }

.goto-task-btn { border-radius: 12px; }

/* ===========================================================================
   WEEKLY SUMMARY / CHARTS
   =========================================================================== */
.chart-container { padding: var(--space-4); gap: var(--space-3); }
.chart-caption { color: var(--night-ink-soft); }
.chart-caption strong { color: var(--night-ink); }
.chart-empty {
  border: 1px dashed var(--night-line-strong);
  border-radius: var(--night-radius-sm);
  color: var(--night-ink-soft);
  background: rgba(255, 255, 255, 0.5);
}

.report-range-btn { color: var(--night-ink-soft); }
.report-range-btn.active {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #fff;
}
.report-nav-btn { color: var(--color-accent); }
.report-span { color: var(--night-ink-soft); }

/* ===========================================================================
   COURSES / QUIZ / MINDFULNESS
   =========================================================================== */
.filter-pills { border-bottom-color: var(--night-line); }
.filter-pill {
  border-color: var(--night-line-strong);
  background: rgba(255, 255, 255, 0.82);
  color: var(--night-ink-soft);
}
.filter-pill.active {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #fff;
  box-shadow: 0 3px 10px rgba(45, 106, 111, 0.22);
}

.recommendation-card {
  background: linear-gradient(140deg, rgba(232, 240, 240, 0.9), rgba(237, 233, 250, 0.9));
  border: 1px solid rgba(45, 106, 111, 0.18);
  border-radius: var(--night-radius);
  box-shadow: var(--night-card-shadow);
}
.recommendation-title { color: var(--night-ink); font-weight: var(--font-weight-bold); }
.recommendation-meta, .recommendation-summary { color: var(--night-ink-soft); }
.recommendation-action {
  background: rgba(255, 255, 255, 0.6);
  border-left: 3px solid var(--color-accent);
  border-radius: var(--radius-1);
}

.courses-header { color: var(--night-ink); font-weight: var(--font-weight-bold); }
.series-heading { color: var(--color-accent); border-bottom-color: var(--night-line); }

.course-row { padding: var(--space-4); margin-bottom: var(--space-3); }
.course-row:hover { border-color: var(--night-violet); }
.course-title { color: var(--night-ink); }
.course-duration { color: var(--night-ink-soft); }
.course-arrow { color: var(--night-ink-soft); }

.progress-card { padding: var(--space-4); margin-bottom: var(--space-4); }
.progress-title { color: var(--night-ink); }
.progress-count { color: var(--night-ink-soft); }
.progress-bar { background: #E4E1F0; }

.course-detail-video {
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid var(--night-line);
  border-radius: var(--night-radius);
  color: var(--night-ink-soft);
}
.course-detail-title { color: var(--night-ink); }
.course-detail-meta { color: var(--night-ink-soft); }
.course-section-title { color: var(--night-ink); font-weight: var(--font-weight-bold); }
.course-summary { color: var(--night-ink-soft); }

.action-prompt {
  background: rgba(232, 240, 240, 0.85);
  border-left: 4px solid var(--color-accent);
  border-radius: var(--night-radius-sm);
}
.action-prompt-text { color: var(--night-ink-soft); }

.completion-message, .quiz-passed { border-radius: var(--night-radius-sm); }

.quiz-q { border-bottom-color: var(--night-line); }
.quiz-q-stem { color: var(--night-ink); }
.quiz-option {
  border-color: var(--night-line-strong);
  border-radius: var(--night-radius-sm);
  background: rgba(255, 255, 255, 0.86);
}
.quiz-option-text { color: var(--night-ink); }

.practice-hero {
  background:
    radial-gradient(120% 90% at 50% -25%, rgba(124, 107, 209, 0.16), transparent 70%),
    linear-gradient(140deg, rgba(237, 233, 250, 0.9), rgba(232, 240, 240, 0.9));
  border: 1px solid rgba(124, 107, 209, 0.20);
  border-radius: var(--night-radius);
}
.practice-num {
  background: rgba(255, 255, 255, 0.9);
  border-color: rgba(45, 106, 111, 0.28);
}
.practice-entry-link {
  background: linear-gradient(140deg, rgba(232, 240, 240, 0.9), rgba(237, 233, 250, 0.9));
  border: 1px solid rgba(45, 106, 111, 0.22);
  border-radius: var(--night-radius);
}

.empty-state, .empty-state-text, .not-found { color: var(--night-ink-soft); }

/* ===========================================================================
   HISTORY / CALENDAR
   =========================================================================== */
.cal-title { color: var(--night-ink); font-weight: var(--font-weight-bold); }
.cal-nav { color: var(--color-accent); }
.cal-weekday { color: var(--night-ink-soft); }

.cal-day {
  background: rgba(255, 255, 255, 0.72);
  border-radius: var(--night-radius-sm);
  color: var(--night-ink);
}
.cal-day--blank, .cal-day--future { background: transparent; }
.cal-day--future { color: var(--night-ink-soft); }
.cal-day--filled { background: var(--color-accent-soft); }
.cal-day--today { border-color: var(--color-accent); }
.cal-day--selected {
  background: var(--color-accent);
  color: #fff;
  box-shadow: 0 3px 10px rgba(45, 106, 111, 0.28);
}
.cal-legend, .cal-hint { color: var(--night-ink-soft); }

/* ===========================================================================
   ASSESSMENT (ISI / PHQ-9 / GAD-7 / ESS)
   =========================================================================== */
.instrument-card, .question-card { padding: var(--space-4); }
.instrument-card:hover { border-color: var(--night-violet); }
.instrument-card__name { color: var(--night-ink); font-weight: var(--font-weight-bold); }
.instrument-card__meta { color: var(--night-ink-soft); }

.recall-window {
  background: rgba(232, 240, 240, 0.9);
  border: 1px solid rgba(45, 106, 111, 0.25);
  border-radius: var(--night-radius-sm);
}

.question-card__number { color: var(--night-ink-soft); }
.question-card__text { color: var(--night-ink); }

.option-button {
  background: rgba(255, 255, 255, 0.86);
  border-color: var(--night-line-strong);
  border-radius: var(--night-radius-sm);
  color: var(--night-ink);
  min-height: 48px;
}
.option-button:hover { border-color: var(--color-accent); background: #fff; }
.option-button.selected {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #fff;
  box-shadow: 0 3px 10px rgba(45, 106, 111, 0.22);
}

.assessment-footer {
  background: rgba(255, 255, 255, 0.86);
  -webkit-backdrop-filter: blur(16px) saturate(1.1);
  backdrop-filter: blur(16px) saturate(1.1);
  border-top: 1px solid var(--night-line);
  box-shadow: 0 -4px 18px rgba(78, 66, 130, 0.06);
}
.progress-text { color: var(--night-ink-soft); }
.progress-text strong { color: var(--night-ink); }

.score-card {
  background: rgba(255, 255, 255, 0.86);
  -webkit-backdrop-filter: blur(14px);
  backdrop-filter: blur(14px);
  border: 2px solid var(--color-accent);
  border-radius: var(--night-radius);
  box-shadow: var(--night-card-shadow);
}
.score-card__band { color: var(--night-ink); }
.score-card__note { color: var(--night-ink-soft); }

/* Safety message stays loud and red — DESIGN.md requires it (§54.8). */
.safety-message {
  background: #FDF0F0;
  border: 2px solid var(--color-danger);
  border-radius: var(--night-radius);
}

.history-section__title { color: var(--night-ink); font-weight: var(--font-weight-bold); }
.history-item {
  background: rgba(255, 255, 255, 0.8);
  border: 1px solid var(--night-line);
  border-radius: var(--night-radius-sm);
}
.history-item__meta { color: var(--night-ink-soft); }
.history-item__score { color: var(--night-ink); }
.history-empty { color: var(--night-ink-soft); }

.error-message { border-radius: var(--night-radius-sm); }

/* ===========================================================================
   SLEEP-COACH CHAT — mascot is a ::before on the existing .coach-empty block;
   each starter chip is picked out by its data-q value. No JS change.
   =========================================================================== */
.coach { background: transparent; padding-bottom: 0; }

.coach-head {
  background: rgba(255, 255, 255, 0.72);
  -webkit-backdrop-filter: blur(14px) saturate(1.1);
  backdrop-filter: blur(14px) saturate(1.1);
  border-bottom: 1px solid var(--night-line);
}
.coach-head__title { font-size: var(--font-size-4); color: var(--night-ink); }
.coach-head__back, .coach-head__btn {
  color: var(--color-accent);
  font-size: var(--font-size-3);
  font-weight: var(--font-weight-medium);
}

.coach-empty { color: var(--night-ink-soft); }
.coach-empty::before {
  content: "";
  display: block;
  width: 168px;
  height: 168px;
  margin: 0 auto var(--space-4);
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 168 168'%3E%3Cdefs%3E%3ClinearGradient id='b' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23D6CDF7'/%3E%3Cstop offset='1' stop-color='%23A991E4'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M52 34h64a26 26 0 0 1 26 26v34a26 26 0 0 1-26 26H86l-24 21 3-21h-13a26 26 0 0 1-26-26V60a26 26 0 0 1 26-26z' fill='url(%23b)'/%3E%3Ccircle cx='74' cy='70' r='5.4' fill='%23574A96'/%3E%3Ccircle cx='105' cy='70' r='5.4' fill='%23574A96'/%3E%3Cpath d='M76 86c5.5 5.6 16 5.6 21.5 0' stroke='%23574A96' stroke-width='4.4' fill='none' stroke-linecap='round'/%3E%3Ccircle cx='75' cy='103' r='5.2' fill='%23fff'/%3E%3Ccircle cx='90' cy='103' r='5.2' fill='%23fff'/%3E%3Ccircle cx='105' cy='103' r='5.2' fill='%23fff'/%3E%3Cpath d='M32 40l2.6 6.4L41 49l-6.4 2.6L32 58l-2.6-6.4L23 49l6.4-2.6z' fill='%23C9BDF0'/%3E%3Cpath d='M139 30l1.9 4.6 4.6 1.9-4.6 1.9-1.9 4.6-1.9-4.6-4.6-1.9 4.6-1.9z' fill='%23D8CFF5'/%3E%3Cpath d='M143 112l1.6 3.9 3.9 1.6-3.9 1.6-1.6 3.9-1.6-3.9-3.9-1.6 3.9-1.6z' fill='%23D8CFF5'/%3E%3C/svg%3E");
}
.coach-empty__title {
  font-size: var(--font-size-6);
  font-weight: var(--font-weight-bold);
  color: var(--night-ink);
  letter-spacing: -0.01em;
  margin-bottom: var(--space-3);
}
.coach-empty__hint {
  font-size: var(--font-size-3);
  color: var(--night-ink-soft);
  max-width: 30ch;
  margin: 0 auto;
}

.coach-chips { gap: var(--space-3); }
.coach-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  padding: 0 var(--space-4);
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, 0.72);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  border: 1px solid rgba(255, 255, 255, 0.9);
  box-shadow: 0 3px 12px rgba(78, 66, 130, 0.08);
  color: var(--night-ink);
  font-size: var(--font-size-2);
}
.coach-chip::before {
  content: "";
  width: 20px;
  height: 20px;
  flex: 0 0 auto;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 20px 20px;
  background-image: var(--chip-icon, none);
}
.coach-chip[data-q="我最近睡眠效率如何？"] {
  --chip-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234A7BA8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 20V10'/%3E%3Cpath d='M12 20V4'/%3E%3Cpath d='M6 20v-6'/%3E%3C/svg%3E");
}
.coach-chip[data-q="今天的任務怎麼做？"] {
  --chip-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232F7D63' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='4' width='14' height='17' rx='2'/%3E%3Cpath d='M9 3h6v3H9z'/%3E%3Cpath d='M9 12l2 2 4-4'/%3E%3C/svg%3E");
}
.coach-chip[data-q="為什麼要固定起床？"] {
  --chip-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23B07F45' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4V2M5 9L3.5 7.5M19 9l1.5-1.5M2 17h20'/%3E%3Cpath d='M17 17a5 5 0 0 0-10 0'/%3E%3Cpath d='M8 21h8'/%3E%3C/svg%3E");
}

.coach-msg--user .coach-bubble { box-shadow: 0 3px 12px rgba(45, 106, 111, 0.20); }
.coach-msg--coach .coach-bubble {
  background: rgba(255, 255, 255, 0.88);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  border: 1px solid rgba(255, 255, 255, 0.9);
  color: var(--night-ink);
  box-shadow: 0 3px 14px rgba(78, 66, 130, 0.08);
}
.coach-thinking { color: var(--night-ink-soft); }

.coach-pins {
  background: rgba(255, 255, 255, 0.7);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  border-bottom-color: var(--night-line);
}
.coach-pins__toggle { color: var(--night-ink-soft); }

.coach-compose {
  background: rgba(255, 255, 255, 0.86);
  -webkit-backdrop-filter: blur(16px) saturate(1.1);
  backdrop-filter: blur(16px) saturate(1.1);
  border-top: 1px solid var(--night-line);
  padding: var(--space-4) var(--space-4) var(--space-2);
}
.coach-compose__row { gap: var(--space-3); }
.coach-compose textarea { min-height: 56px; line-height: 1.6; }
.coach-send {
  min-height: 56px;
  min-width: 84px;
  border-radius: var(--night-radius-sm);
  font-weight: var(--font-weight-bold);
}

/* Crisis banner — red is intentional and required here (DESIGN.md §54.8). */
.coach-crisis {
  background: transparent;
  color: var(--color-danger);
  font-size: var(--font-size-2);
  line-height: 1.7;
}

.coach-drawer { background: #FDFCFF; }
.coach-drawer__head { border-bottom-color: var(--night-line); }
.coach-session { border-bottom-color: var(--night-line); }

/* ===========================================================================
   WEARABLE PREFILL / SETTINGS — plain .card users; the frosted recipe above
   already covers them. Only text tone needs nudging.
   =========================================================================== */
.card.prefill .line { color: var(--night-ink); }
.card.prefill .prompt { color: var(--night-ink); }
.card .hint { color: var(--night-ink-soft); }
.card.discrepancy li { border-bottom-color: var(--night-line); }

/* ===========================================================================
   BRAND CREDIT FOOTER — appears at the very bottom of every patient page.
   Sits outside #app (see each page's HTML) so it survives every JS re-render.
   Fixed bottom bars (.bottom-nav, .coach-compose, .assessment-footer) take no
   flow space, so without clearance this footer would render underneath them;
   the :has() rules add just enough bottom margin so it sits above instead.
   =========================================================================== */
.app-credit {
  padding: var(--space-4) var(--space-4) var(--space-6);
  text-align: center;
  font-size: 14px;
  color: var(--night-ink-soft);
}
.app-credit a {
  color: #E8752C;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.app-credit a:hover { color: #C8611F; }
.app-credit-logo { height: 34px; width: auto; vertical-align: middle; }

body:has(.bottom-nav) .app-credit { margin-bottom: 76px; }
body:has(.coach-compose) .app-credit { margin-bottom: 96px; }
body:has(.assessment-footer) .app-credit { margin-bottom: 88px; }

@media (prefers-reduced-motion: reduce) {
  .btn, .time-chip, .filter-pill, .course-row { transition: none; }
}
