/* public-pages.css — M.2-F shared mobile-first shell for public pages.
 *
 * Loaded by templates/public/client-form.html (/feedback),
 * templates/public/privacy.html (/privacy), templates/public/terms.html
 * (/terms). NOT loaded by login.html (already meets the touch + zoom
 * floors via its own inline @media block; migration deferred to a
 * future redesign that touches it anyway — see D-LOOP-6 README §3
 * "S-11 / S-12 / S-13").
 *
 * Class contract — every class introduced here is in the .cv-public-*
 * / .cv-form-* namespace. Markup looks like:
 *
 *   <body>
 *     <div class="cv-public-shell">
 *       <div class="cv-public-brand"> ... </div>
 *       <div class="cv-public-card">
 *         <form> .cv-form-field × N + .cv-form-submit </form>
 *       </div>
 *     </div>
 *   </body>
 *
 * Privacy / terms drop the form, swap .cv-public-card for
 * .cv-public-card.cv-public-legal, and use h1 / h2 / p inside the card.
 */

/* ── M.2-A mobile tokens (local declaration until M.2-A lands) ───────
 * These tokens are introduced by D-LOOP-6 and are the canonical home
 * for mobile padding + touch + type-scale floors. M.2-A is the issue
 * that adds them globally to reports-d5.css :root; until that PR
 * merges, declaring them here keeps public-pages.css self-contained.
 * When M.2-A lands these duplicates can be deleted in one pass —
 * values are bit-identical to the design source (D-LOOP-6 §5).
 */
:root {
  --cv-pad-x:       16px;
  --cv-touch:       44px;
  --cv-mfs-input:   16px;
  --cv-mfs-xs:      11.5px;
  --cv-mfs-sm:      13px;
  --cv-mfs-base:    15px;
  --cv-mfs-md:      16px;
  --cv-mfs-lg:      18px;
  --cv-mfs-xl:      22px;
  --cv-mfs-2xl:     26px;
}

/* ── Page-level reset (public pages don't load app-shell.css) ─────── */
.cv-public-shell *,
.cv-public-shell *::before,
.cv-public-shell *::after { box-sizing: border-box; }

body:has(> .cv-public-shell) {
  margin: 0;
  padding: 0;
  background: var(--cv-bg-app);
  color: var(--cv-text-primary);
  font-family: "Inter", system-ui, -apple-system, "Helvetica Neue", Helvetica, sans-serif;
  font-size: var(--cv-fs-base);
  line-height: var(--cv-lh-normal);
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* ── Shell — page-level container ────────────────────────────────── */
.cv-public-shell {
  min-height: 100vh;
  padding: 24px var(--cv-pad-x) 40px;
  display: flex;
  flex-direction: column;
  gap: 18px;
  background: var(--cv-bg-app);
}

/* ── Brand row — logo + name + optional lang toggle ──────────────── */
.cv-public-brand {
  display: flex;
  align-items: center;
  gap: 10px;
  font-weight: var(--cv-fw-semibold);
  font-size: var(--cv-mfs-md);
  color: var(--cv-text-primary);
  max-width: 640px;
  width: 100%;
  margin: 0 auto;
}
.cv-public-brand .cv-public-brand-mark {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  background: linear-gradient(135deg, #6366F1, #4F46E5);
  display: inline-grid;
  place-items: center;
  flex-shrink: 0;
}
.cv-public-brand .cv-public-brand-mark svg {
  width: 18px;
  height: 18px;
  stroke: #fff;
  fill: none;
}
.cv-public-brand .cv-public-brand-name { line-height: 1.2; }
.cv-public-brand .cv-public-lang {
  margin-left: auto;
  min-height: 32px;
  padding: 6px 14px;
  border: 1px solid var(--cv-border-strong);
  border-radius: var(--cv-r-sm);
  background: var(--cv-bg-surface);
  color: var(--cv-text-secondary);
  font-family: inherit;
  font-size: var(--cv-mfs-xs);
  font-weight: var(--cv-fw-semibold);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  cursor: pointer;
  transition: border-color 0.15s ease, color 0.15s ease;
}
.cv-public-brand .cv-public-lang:hover {
  border-color: var(--cv-border-focus);
  color: var(--cv-border-focus);
}
.cv-public-brand .cv-public-lang:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(91, 95, 199, 0.20);
}

/* ── Card — the surface every public page leans on ──────────────── */
.cv-public-card {
  background: var(--cv-bg-surface);
  border: 1px solid var(--cv-border);
  border-radius: var(--cv-r-lg);
  padding: 22px 18px 24px;
  box-shadow: var(--cv-shadow-1);
  max-width: 640px;
  width: 100%;
  margin: 0 auto;
}
.cv-public-card h1 {
  font-size: var(--cv-mfs-xl);
  font-weight: var(--cv-fw-semibold);
  margin: 0 0 6px;
  letter-spacing: -0.01em;
  line-height: 1.2;
}
.cv-public-card .cv-public-sub {
  font-size: var(--cv-mfs-sm);
  color: var(--cv-text-muted);
  margin-bottom: 16px;
  line-height: var(--cv-lh-normal);
}

/* ── Section labels inside the form card ────────────────────────── */
.cv-public-card .cv-form-section-label {
  font-size: var(--cv-mfs-xs);
  font-weight: var(--cv-fw-bold);
  color: var(--cv-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
  margin: 4px 0 14px;
}
.cv-public-card .cv-form-divider {
  height: 1px;
  background: var(--cv-border);
  margin: 22px 0;
  border: 0;
}

/* ── Form fields ────────────────────────────────────────────────── */
.cv-form-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: 14px;
}
.cv-form-field label {
  font-size: var(--cv-mfs-sm);
  font-weight: var(--cv-fw-medium);
  color: var(--cv-text-primary);
  display: block;
}
.cv-form-field label .cv-form-label-optional {
  font-weight: var(--cv-fw-normal);
  color: var(--cv-text-muted);
  margin-left: 4px;
}
.cv-form-field input,
.cv-form-field textarea,
.cv-form-field select {
  width: 100%;
  height: var(--cv-touch);
  border: 1px solid var(--cv-border-strong);
  border-radius: var(--cv-r-md);
  padding: 0 12px;
  font-size: var(--cv-mfs-input);   /* 16px — suppresses iOS Safari zoom-on-focus */
  color: var(--cv-text-primary);
  background: var(--cv-bg-surface);
  font-family: inherit;
}
.cv-form-field textarea {
  height: auto;
  min-height: 120px;
  padding: 10px 12px;
  line-height: var(--cv-lh-normal);
  resize: vertical;
}
.cv-form-field input:focus,
.cv-form-field textarea:focus,
.cv-form-field select:focus {
  outline: none;
  border-color: var(--cv-border-focus);
  box-shadow: 0 0 0 3px rgba(91, 95, 199, 0.16);
}
.cv-form-field input.error,
.cv-form-field textarea.error,
.cv-form-field select.error {
  border-color: var(--cv-danger);
}
.cv-form-field input::placeholder,
.cv-form-field textarea::placeholder {
  color: var(--cv-text-muted);
}

/* Two-up field row (e.g. name + company) that collapses to single
 * column on narrow phones. Kept opt-in via .cv-form-row so the
 * default field layout stays single-column. */
.cv-form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-bottom: 14px;
}
.cv-form-row > .cv-form-field { margin-bottom: 0; }
@media (max-width: 520px) {
  .cv-form-row { grid-template-columns: 1fr; gap: 0; }
  .cv-form-row > .cv-form-field { margin-bottom: 14px; }
  .cv-form-row > .cv-form-field:last-child { margin-bottom: 0; }
}

/* ── Submit — full-width primary button, 44 px touch floor ──────── */
.cv-form-submit {
  width: 100%;
  height: var(--cv-touch);
  margin-top: 6px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  background: var(--cv-accent);
  color: var(--cv-text-on-accent);
  border: 1px solid var(--cv-accent);
  border-radius: var(--cv-r-md);
  font-family: inherit;
  font-size: var(--cv-mfs-base);
  font-weight: var(--cv-fw-semibold);
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.cv-form-submit:hover {
  background: var(--cv-accent-hover);
  border-color: var(--cv-accent-hover);
}
.cv-form-submit:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}
.cv-form-submit:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(91, 95, 199, 0.30);
}
.cv-form-submit .cv-form-spinner {
  width: 16px;
  height: 16px;
  border: 2px solid rgba(255, 255, 255, 0.30);
  border-top-color: #fff;
  border-radius: 50%;
  animation: cv-form-spin 0.7s linear infinite;
}
@keyframes cv-form-spin { to { transform: rotate(360deg); } }

/* ── Error banner ───────────────────────────────────────────────── */
.cv-public-error {
  background: var(--cv-danger-soft);
  border: 1px solid var(--cv-danger-border);
  color: var(--cv-danger);
  border-radius: var(--cv-r-md);
  padding: 10px 14px;
  font-size: var(--cv-mfs-sm);
  margin-bottom: 16px;
}

/* ── Thank-you panel — shown after a successful submit ──────────── */
.cv-public-thanks {
  text-align: center;
  padding: 12px 0 4px;
}
.cv-public-thanks .cv-public-thanks-icon {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: var(--cv-success-soft);
  color: var(--cv-success);
  margin: 0 auto 18px;
  display: grid;
  place-items: center;
}
.cv-public-thanks .cv-public-thanks-icon svg {
  width: 28px;
  height: 28px;
  stroke: currentColor;
  fill: none;
}
.cv-public-thanks h2 {
  font-size: var(--cv-mfs-xl);
  font-weight: var(--cv-fw-semibold);
  margin: 0 0 8px;
}
.cv-public-thanks p {
  font-size: var(--cv-mfs-sm);
  color: var(--cv-text-secondary);
  margin: 0 0 24px;
}
.cv-public-thanks .cv-form-secondary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--cv-touch);
  padding: 0 20px;
  border: 1px solid var(--cv-border-strong);
  border-radius: var(--cv-r-md);
  background: var(--cv-bg-surface);
  color: var(--cv-text-primary);
  font-family: inherit;
  font-size: var(--cv-mfs-sm);
  font-weight: var(--cv-fw-medium);
  cursor: pointer;
  transition: border-color 0.15s ease, color 0.15s ease;
}
.cv-public-thanks .cv-form-secondary:hover {
  border-color: var(--cv-border-focus);
  color: var(--cv-border-focus);
}

/* ── Confidentiality footnote under a form ─────────────────────── */
.cv-public-footnote {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin-top: 14px;
  font-size: var(--cv-mfs-xs);
  color: var(--cv-text-muted);
  text-align: center;
  text-wrap: pretty;
}
.cv-public-footnote svg {
  width: 12px;
  height: 12px;
  stroke: currentColor;
  fill: none;
  flex-shrink: 0;
}

/* ── Back link (privacy / terms) ───────────────────────────────── */
.cv-public-back {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  max-width: 640px;
  width: 100%;
  margin: 0 auto;
  font-size: var(--cv-mfs-sm);
  color: var(--cv-accent);
  text-decoration: none;
  min-height: var(--cv-touch);
}
.cv-public-back:hover { text-decoration: underline; }

/* ── Legal long-form (privacy + terms) ─────────────────────────── */
.cv-public-legal {
  font-size: var(--cv-mfs-sm);
  line-height: var(--cv-lh-prose);
  color: var(--cv-text-secondary);
}
.cv-public-legal h1 {
  font-size: var(--cv-mfs-2xl);
  font-weight: var(--cv-fw-semibold);
  margin: 0 0 8px;
  letter-spacing: -0.01em;
  color: var(--cv-text-primary);
  line-height: 1.2;
}
.cv-public-legal h2 {
  font-size: var(--cv-mfs-md);
  font-weight: var(--cv-fw-semibold);
  margin: 22px 0 6px;
  color: var(--cv-text-primary);
  line-height: 1.3;
}
.cv-public-legal p {
  margin: 0 0 12px;
  text-wrap: pretty;
  color: var(--cv-text-secondary);
}
.cv-public-legal ul {
  margin: 0 0 12px 20px;
  color: var(--cv-text-secondary);
}
.cv-public-legal li {
  margin: 0 0 4px;
}
.cv-public-legal a {
  color: var(--cv-accent);
  text-decoration: underline;
}
.cv-public-legal a:hover { color: var(--cv-accent-hover); }
.cv-public-legal .cv-public-meta {
  font-family: var(--cv-font-mono);
  font-size: var(--cv-mfs-xs);
  color: var(--cv-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 14px;
}

/* ── Tablet / desktop widening — keep the same shell, just wider
     gutters and a touch more vertical breathing room. ───────────── */
@media (min-width: 720px) {
  .cv-public-shell { padding: 40px var(--cv-pad-x) 56px; gap: 24px; }
  .cv-public-card  { padding: 28px 32px 32px; }
  .cv-public-card h1 { font-size: 24px; }
}

/* ── Reduced motion ────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .cv-form-submit,
  .cv-public-brand .cv-public-lang,
  .cv-public-back,
  .cv-public-thanks .cv-form-secondary { transition: none; }
  .cv-form-submit .cv-form-spinner { animation: none; }
}
