/* ============================================================
   Kaze (風) Design System — Components
   Minimal, composable UI components
   ============================================================ */

/* ── Button ──────────────────────────────────────────────── */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  border-radius: var(--radius-field);
  font-weight: var(--font-weight-medium);
  white-space: nowrap;
  user-select: none;
  transition: background-color var(--duration-normal) var(--ease-default),
              color var(--duration-normal) var(--ease-default),
              border-color var(--duration-normal) var(--ease-default),
              box-shadow var(--duration-normal) var(--ease-default);
  cursor: pointer;
  border: 1px solid transparent;
  outline: none;
}

.btn:focus-visible {
  outline: var(--ring-width) solid var(--ring-color);
  outline-offset: var(--ring-offset);
}

.btn:disabled,
.btn[disabled] {
  opacity: 0.5;
  cursor: not-allowed;
  /* Allow clicks so shake animation can trigger */
  pointer-events: auto;
}

/* Shake feedback on disabled button click */
@keyframes kaze-shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-3px); }
  20%, 40%, 60%, 80% { transform: translateX(3px); }
}

.btn:active:not(:disabled) {
  transform: scale(0.98);
}

.btn:disabled:active,
.btn[disabled]:active {
  animation: kaze-shake 0.4s var(--ease-default);
}

/* Sizes */
.btn--xs {
  height: 1.75rem;
  padding-inline: var(--space-2);
  font-size: var(--font-size-xs);
}

.btn--sm {
  height: 2rem;
  padding-inline: var(--space-3);
  font-size: var(--font-size-sm);
}

.btn--md {
  height: 2.25rem;
  padding-inline: var(--space-4);
  font-size: var(--font-size-sm);
}

.btn--lg {
  height: 2.5rem;
  padding-inline: var(--space-5);
  font-size: var(--font-size-base);
}

/* Variants */
.btn--primary {
  background-color: var(--color-primary);
  color: var(--color-primary-fg);
}
.btn--primary:hover {
  background-color: var(--color-primary-hover);
}

.btn--secondary {
  background-color: var(--color-secondary);
  color: var(--color-secondary-fg);
}
.btn--secondary:hover {
  background-color: var(--color-secondary-hover);
}

.btn--outline {
  background-color: transparent;
  border-color: var(--color-border);
  color: var(--color-fg);
}
.btn--outline:hover {
  background-color: var(--color-surface-hover);
}

.btn--ghost {
  background-color: transparent;
  color: var(--color-fg);
}
.btn--ghost:hover {
  background-color: var(--color-surface-hover);
}

.btn--destructive {
  background-color: var(--color-negative);
  color: var(--color-fg-inverse);
}
.btn--destructive:hover {
  background-color: var(--color-negative-strong);
}

.btn--inverted {
  background-color: var(--color-bg);
  color: var(--color-fg);
}
.btn--inverted:hover {
  background-color: var(--color-bg-tertiary);
}

.btn--full {
  width: 100%;
}

/* Icon button */
.btn--icon {
  padding: 0;
  aspect-ratio: 1;
  position: relative;
}
.btn--icon.btn--sm { width: 2rem; }
.btn--icon.btn--md { width: 2.25rem; }
.btn--icon.btn--lg { width: 2.5rem; }

/* Expanded hit area for icon buttons (Fitts's Law) */
.btn--icon::before {
  content: '';
  position: absolute;
  inset: -6px;
}

/* ── FAB (Floating Action Button) ────────────────────────── */
.fab {
  position: fixed;
  z-index: var(--z-sticky);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  cursor: pointer;
  font-family: inherit;
  font-weight: var(--font-weight-semibold);
  transition: background-color var(--duration-normal) var(--ease-default),
              box-shadow var(--duration-normal) var(--ease-default),
              transform var(--duration-normal) var(--ease-default);
  box-shadow: var(--shadow-lg);
}
.fab:hover {
  transform: translateY(-1px);
  box-shadow: var(--shadow-xl);
}
.fab:active {
  transform: translateY(0);
  box-shadow: var(--shadow-md);
}

/* Position */
.fab--bottom-right { bottom: var(--space-6); right: var(--space-6); }
.fab--bottom-left  { bottom: var(--space-6); left: var(--space-6); }
.fab--top-right    { top: var(--space-6);    right: var(--space-6); }
.fab--top-left     { top: var(--space-6);    left: var(--space-6); }

/* Size */
.fab--sm { width: 40px; height: 40px; border-radius: var(--radius-lg); font-size: var(--font-size-sm); }
.fab--md { width: 48px; height: 48px; border-radius: var(--radius-xl); font-size: var(--font-size-base); }
.fab--lg { width: 56px; height: 56px; border-radius: var(--radius-2xl); font-size: var(--font-size-lg); }

/* Extended (icon + label) */
.fab--extended {
  width: auto;
  gap: var(--space-2);
  padding-inline: var(--space-5);
}
.fab--extended.fab--sm { height: 40px; border-radius: var(--radius-lg); }
.fab--extended.fab--md { height: 48px; border-radius: var(--radius-xl); }
.fab--extended.fab--lg { height: 56px; border-radius: var(--radius-2xl); }

/* Variant: primary (default) */
.fab--primary {
  background-color: var(--color-primary);
  color: var(--color-primary-fg);
}
.fab--primary:hover { background-color: var(--color-primary-hover); }

/* Variant: secondary */
.fab--secondary {
  background-color: var(--color-surface);
  color: var(--color-fg);
  border: 1px solid var(--color-border);
}
.fab--secondary:hover { background-color: var(--color-surface-hover); }

/* ── Card ────────────────────────────────────────────────── */
.card {
  background-color: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-box);
  /* Inner radius = outer - padding for nested rounded elements */
  --card-inner-radius: calc(var(--radius-box) - var(--space-5));
}

.card__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-5) var(--space-5) var(--space-0);
}

.card__title {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg);
}

.card__description {
  font-size: var(--font-size-xs);
  color: var(--color-fg-secondary);
  margin-top: var(--space-0-5);
}

.card__body {
  padding: var(--space-5);
}

.card__header + .card__body {
  padding-top: var(--space-4);
}

.card__footer {
  padding: var(--space-0) var(--space-5) var(--space-5);
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

/* Full-bleed media inside card — uses harmonised inner radius */
.card__media {
  overflow: hidden;
  margin: calc(-1 * var(--space-5)) calc(-1 * var(--space-5)) var(--space-4);
  border-radius: var(--card-inner-radius) var(--card-inner-radius) 0 0;
}

.card__media img,
.card__media video {
  display: block;
  width: 100%;
  height: auto;
}

/* Card hover variant */
.card--interactive {
  cursor: pointer;
  transition: border-color var(--duration-normal) var(--ease-default),
              box-shadow var(--duration-normal) var(--ease-default);
}
.card--interactive:hover {
  border-color: var(--color-border-strong);
}

/* Fill card — border-less, background only */
.card--fill {
  border: none;
  background-color: var(--color-bg-secondary);
}

/* Compact card */
.card--compact .card__header { padding: var(--space-4) var(--space-4) var(--space-0); }
.card--compact .card__body   { padding: var(--space-4); }
.card--compact .card__footer { padding: var(--space-0) var(--space-4) var(--space-4); }

/* ── Input ───────────────────────────────────────────────── */
.input {
  display: flex;
  width: 100%;
  height: 2.25rem;
  padding-inline: var(--space-3);
  font-size: var(--font-size-sm);
  background-color: var(--color-bg-tertiary);
  border: 1px solid transparent;
  border-radius: var(--radius-field);
  color: var(--color-fg);
  outline: none;
  transition: border-color var(--duration-normal) var(--ease-default),
              box-shadow var(--duration-normal) var(--ease-default);
}

.input::placeholder {
  color: var(--color-fg-tertiary);
}

.input:focus {
  border-color: var(--color-border-strong);
  box-shadow: 0 0 0 var(--ring-width) var(--ring-color);
}

.input--error {
  border-color: var(--color-negative);
}
.input--error:focus {
  box-shadow: 0 0 0 var(--ring-width) var(--color-error-ring);
}

/* ── Select ──────────────────────────────────────────────── */
.select {
  display: flex;
  width: 100%;
  height: 2.25rem;
  padding-inline: var(--space-3);
  padding-right: var(--space-8);
  font-size: var(--font-size-sm);
  background-color: var(--color-bg-tertiary);
  border: 1px solid transparent;
  border-radius: var(--radius-field);
  color: var(--color-fg);
  outline: none;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2371717a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right var(--space-3) center;
  cursor: pointer;
  transition: border-color var(--duration-normal) var(--ease-default),
              box-shadow var(--duration-normal) var(--ease-default);
}

.select:focus {
  border-color: var(--color-border-strong);
  box-shadow: 0 0 0 var(--ring-width) var(--ring-color);
}

[data-theme="dark"] .select {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23a8a29e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
}

/* ── Textarea ────────────────────────────────────────────── */
.textarea {
  display: flex;
  width: 100%;
  min-height: 5rem;
  padding: var(--space-2) var(--space-3);
  font-size: var(--font-size-sm);
  line-height: var(--line-height-relaxed);
  background-color: var(--color-bg-tertiary);
  border: 1px solid transparent;
  border-radius: var(--radius-field);
  color: var(--color-fg);
  outline: none;
  resize: vertical;
  transition: border-color var(--duration-normal) var(--ease-default),
              box-shadow var(--duration-normal) var(--ease-default);
}

.textarea:focus {
  border-color: var(--color-border-strong);
  box-shadow: 0 0 0 var(--ring-width) var(--ring-color);
}

/* ── Label ───────────────────────────────────────────────── */
.label {
  display: block;
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
  margin-bottom: var(--space-1-5);
}

.label--required::after {
  content: " *";
  color: var(--color-negative);
}

/* ── Form Group ──────────────────────────────────────────── */
.form-group {
  display: flex;
  flex-direction: column;
  margin-bottom: var(--space-4);
}

.helper-text {
  font-size: var(--font-size-xs);
  color: var(--color-fg-tertiary);
  margin-top: var(--space-1);
}

.error-text {
  font-size: var(--font-size-xs);
  color: var(--color-negative-fg);
  margin-top: var(--space-1);
}

/* ── Checkbox ────────────────────────────────────────────── */
.checkbox {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  cursor: pointer;
  font-size: var(--font-size-sm);
}

.checkbox__input {
  width: 1rem;
  height: 1rem;
  border: 1.5px solid var(--color-border-strong);
  border-radius: var(--radius-sm);
  appearance: none;
  cursor: pointer;
  flex-shrink: 0;
  position: relative;
  transition: background-color var(--duration-fast) var(--ease-default),
              border-color var(--duration-fast) var(--ease-default);
}

/* Expanded hit area for checkbox (Fitts's Law: 44px touch target) */
.checkbox__input::before {
  content: '';
  position: absolute;
  inset: -10px;
}

.checkbox__input:checked {
  background-color: var(--color-primary);
  border-color: var(--color-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
}

.checkbox__input:indeterminate {
  background-color: var(--color-primary);
  border-color: var(--color-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
}

[data-theme="dark"] .checkbox__input:checked {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23000000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
}

[data-theme="dark"] .checkbox__input:indeterminate {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23000000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'/%3E%3C/svg%3E");
}

/* ── Radio ───────────────────────────────────────────────── */
.radio {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  cursor: pointer;
}

.radio__input {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.radio__circle {
  width: 1.25rem;
  height: 1.25rem;
  border-radius: 50%;
  border: 2px solid var(--color-border);
  flex-shrink: 0;
  transition: border-color var(--duration-normal) var(--ease-default);
}

.radio__input:checked + .radio__circle {
  border-color: var(--color-primary);
  background: radial-gradient(circle, var(--color-primary) 40%, transparent 40%);
}

.radio__input:focus-visible + .radio__circle {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

.radio__input:disabled + .radio__circle {
  opacity: 0.5;
  cursor: not-allowed;
}

.radio__label {
  font-size: var(--font-size-sm);
  color: var(--color-fg);
}

.radio-group {
  display: flex;
  gap: var(--space-3);
  border: none;
  padding: 0;
  margin: 0;
}

.radio-group--vertical {
  flex-direction: column;
}

.radio-group--horizontal {
  flex-direction: row;
}

.radio-group__legend {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  margin-bottom: var(--space-2);
}

.radio-group__error {
  font-size: var(--font-size-xs);
  color: var(--color-negative-fg);
  margin-top: var(--space-1);
}

/* ── Badge ───────────────────────────────────────────────── */
.badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-0-5) var(--space-2);
  font-size: var(--font-size-2xs);
  font-weight: var(--font-weight-medium);
  border-radius: var(--radius-full);
  white-space: nowrap;
  line-height: 1.5;
}

.badge--default {
  background-color: var(--color-bg-tertiary);
  color: var(--color-fg-secondary);
}

.badge--positive {
  background-color: var(--color-positive-light);
  color: var(--color-positive-fg);
}

.badge--negative {
  background-color: var(--color-negative-light);
  color: var(--color-negative-fg);
}

.badge--warning {
  background-color: var(--color-warning-light);
  color: var(--color-warning-fg);
}

.badge--info {
  background-color: var(--color-info-light);
  color: var(--color-info-fg);
}

/* Solid (inverted) badges */
.badge--solid.badge--default {
  background-color: var(--color-fg-secondary);
  color: var(--color-bg);
}
.badge--solid.badge--positive {
  background-color: var(--color-positive);
  color: var(--color-fg-inverse);
}
.badge--solid.badge--negative {
  background-color: var(--color-negative);
  color: var(--color-fg-inverse);
}
.badge--solid.badge--warning {
  background-color: var(--color-warning);
  color: var(--color-fg-inverse);
}
.badge--solid.badge--info {
  background-color: var(--color-info);
  color: var(--color-fg-inverse);
}

/* Badge with dot indicator */
.badge__dot {
  width: 6px;
  height: 6px;
  border-radius: var(--radius-full);
  background-color: currentColor;
}

/* ── Table ───────────────────────────────────────────────── */
.table-wrapper {
  overflow-x: auto;
}

.table {
  width: 100%;
  font-size: var(--font-size-sm);
}

.table th {
  text-align: left;
  font-size: var(--font-size-2xs);
  font-weight: var(--font-weight-medium);
  text-transform: uppercase;
  letter-spacing: var(--letter-spacing-wider);
  color: var(--color-fg-tertiary);
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--color-border);
}

.table td {
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--color-border-subtle);
  color: var(--color-fg);
  vertical-align: middle;
}

.table tbody tr {
  transition: background-color var(--duration-fast) var(--ease-default);
}

.table tbody tr:hover {
  background-color: var(--color-surface-hover);
}

.table tbody tr:last-child td {
  border-bottom: none;
}

/* Numeric column — right-aligned with tabular figures */
.table__cell--numeric {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

/* Compact table */
.table--compact th,
.table--compact td {
  padding: var(--space-2) var(--space-3);
}

/* ── Avatar ──────────────────────────────────────────────── */
.avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-full);
  overflow: hidden;
  flex-shrink: 0;
  background-color: var(--color-bg-tertiary);
  color: var(--color-fg-secondary);
  font-weight: var(--font-weight-medium);
}

.avatar--xs { width: 1.5rem; height: 1.5rem; font-size: var(--font-size-2xs); }
.avatar--sm { width: 2rem; height: 2rem; font-size: var(--font-size-xs); }
.avatar--md { width: 2.5rem; height: 2.5rem; font-size: var(--font-size-sm); }
.avatar--lg { width: 3rem; height: 3rem; font-size: var(--font-size-base); }

.avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: filter var(--duration-slow) var(--ease-default);
}

/* Dark mode: soften photos to reduce glare on dark backgrounds */
[data-theme="dark"] .avatar img {
  filter: brightness(0.85) contrast(1.1);
}

/* ── Tabs ────────────────────────────────────────────────── */
.tabs {
  display: flex;
  gap: var(--space-1);
  border-bottom: 1px solid var(--color-border);
}

.tab {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-2) var(--space-3);
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-normal);
  color: var(--color-fg-tertiary);
  cursor: pointer;
  border: none;
  background: none;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  transition: color var(--duration-normal) var(--ease-default),
              border-color var(--duration-normal) var(--ease-default);
}

.tab:hover {
  color: var(--color-fg);
}

.tab--active {
  color: var(--color-fg);
  font-weight: var(--font-weight-semibold);
  border-bottom-color: var(--color-fg);
}

/* Pill tabs (no underline) */
.tabs--pills {
  border-bottom: none;
  background-color: var(--color-bg-tertiary);
  border-radius: var(--radius-lg);
  padding: var(--space-0-5);
}

.tabs--pills .tab {
  border-bottom: none;
  /* Inner radius = outer radius - padding gap */
  border-radius: max(0px, calc(var(--radius-lg) - var(--space-0-5)));
  margin-bottom: 0;
  font-size: var(--font-size-xs);
  padding: var(--space-1) var(--space-3);
}

.tabs--pills .tab--active {
  background-color: var(--color-surface);
  box-shadow: var(--shadow-xs);
}

.tab-panel {
  padding: var(--space-4) 0;
}

/* ── Sidebar Nav ─────────────────────────────────────────── */
.nav-item {
  display: flex;
  align-items: center;
  gap: var(--space-2-5);
  padding: var(--space-2) var(--space-3);
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-tertiary);
  border-radius: var(--radius-md);
  cursor: pointer;
  transition: color var(--duration-normal) var(--ease-default),
              background-color var(--duration-normal) var(--ease-default);
}

.nav-item:hover {
  color: var(--color-fg-secondary);
  background-color: var(--color-surface-hover);
}

.nav-item--active {
  color: var(--color-fg);
  background-color: var(--color-surface-active);
}

.nav-item__icon {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}

/* ── Divider ─────────────────────────────────────────────── */
.divider {
  height: 1px;
  background-color: var(--color-border);
  border: none;
  margin: var(--space-4) 0;
}

.divider--subtle {
  background-color: var(--color-border-subtle);
}

/* Divider with text */
.divider-text {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  font-size: var(--font-size-xs);
  color: var(--color-fg-tertiary);
}

.divider-text::before,
.divider-text::after {
  content: "";
  flex: 1;
  height: 1px;
  background-color: var(--color-border);
}

/* ── Metric / Stat ───────────────────────────────────────── */
.metric {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.metric__label {
  font-size: var(--font-size-2xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-tertiary);
  text-transform: uppercase;
  letter-spacing: var(--letter-spacing-wider);
}

.metric__value {
  font-size: var(--font-size-2xl);
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg);
  font-variant-numeric: tabular-nums;
  letter-spacing: var(--letter-spacing-tight);
}

.metric__value--lg {
  font-size: var(--font-size-4xl);
  font-weight: var(--font-weight-bold);
}

.metric__change {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
}

.metric__change--positive { color: var(--color-positive-fg); }
.metric__change--negative { color: var(--color-negative-fg); }

/* ── Tooltip ─────────────────────────────────────────────── */
.tooltip {
  position: fixed;
  z-index: var(--z-tooltip);
  padding: var(--space-1) var(--space-2);
  background: var(--color-bg-inverse);
  color: var(--color-fg-inverse);
  font-size: var(--font-size-xs);
  border-radius: var(--radius-md);
  pointer-events: none;
  animation: kaze-fade-in var(--duration-fast) var(--ease-out);
  white-space: nowrap;
}

/* ── Search Bar ──────────────────────────────────────────── */
.search {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  height: 2rem;
  padding-inline: var(--space-3);
  background-color: var(--color-bg-tertiary);
  border: 1px solid transparent;
  border-radius: var(--radius-md);
  font-size: var(--font-size-xs);
  color: var(--color-fg-tertiary);
  cursor: text;
  transition: border-color var(--duration-normal) var(--ease-default);
}

.search:focus-within {
  border-color: var(--color-border-strong);
}

.search__icon {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
  opacity: 0.5;
}

.search__input {
  flex: 1;
  border: none;
  background: none;
  outline: none;
  font-size: inherit;
  color: var(--color-fg);
}

.search__input::placeholder {
  color: var(--color-fg-tertiary);
}

.search__kbd {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 1.25rem;
  padding-inline: var(--space-1-5);
  font-size: var(--font-size-2xs);
  font-family: var(--font-sans);
  color: var(--color-fg-tertiary);
  background-color: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
}

/* ── Notification Dot ────────────────────────────────────── */
.dot {
  width: 8px;
  height: 8px;
  border-radius: var(--radius-full);
  flex-shrink: 0;
}

.dot--positive { background-color: var(--color-positive); }
.dot--negative { background-color: var(--color-negative); }
.dot--warning  { background-color: var(--color-warning); }
.dot--info     { background-color: var(--color-info); }

/* ── Skeleton ────────────────────────────────────────────── */
.skeleton {
  background: linear-gradient(
    90deg,
    var(--color-bg-tertiary) 25%,
    var(--color-bg-secondary) 50%,
    var(--color-bg-tertiary) 75%
  );
  background-size: 200% 100%;
  animation: kaze-skeleton-pulse 1.5s ease-in-out infinite;
  border-radius: var(--radius-md);
}

@keyframes kaze-skeleton-pulse {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ── Modal / Dialog ──────────────────────────────────────── */
.overlay {
  position: fixed;
  inset: 0;
  background-color: var(--color-overlay);
  z-index: var(--z-overlay);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-4);
  animation: kaze-fade-in var(--duration-slow) var(--ease-out);
}

/* Closing state: reverse animations with physics easing */
.overlay--closing {
  animation: kaze-fade-out var(--duration-slow) var(--ease-in) forwards;
}

.overlay--closing .dialog {
  animation: kaze-dialog-close var(--duration-slower) var(--ease-in) forwards;
}

@keyframes kaze-dialog-close {
  from {
    opacity: 1;
    transform: scale(1) translateY(0);
  }
  to {
    opacity: 0;
    transform: scale(0.95) translateY(8px);
  }
}

.dialog {
  background-color: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-box);
  box-shadow: var(--shadow-xl);
  width: 100%;
  max-width: 28rem;
  max-height: 85dvh;
  overflow-y: auto;
  z-index: var(--z-modal);
  animation: kaze-scale-in var(--duration-slower) var(--ease-spring);
  /* Inner radius harmony: inner = outer - padding */
  --dialog-inner-radius: max(0px, calc(var(--radius-box) - var(--space-5)));
}

.dialog__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-5);
  border-bottom: 1px solid var(--color-border-subtle);
}

.dialog__title {
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-semibold);
}

.dialog__body {
  padding: var(--space-5);
}

.dialog__footer {
  display: flex;
  justify-content: flex-end;
  gap: var(--space-2);
  padding: var(--space-4) var(--space-5);
  border-top: 1px solid var(--color-border-subtle);
}

/* ── Command Palette ─────────────────────────────────────── */
.command-palette {
  position: fixed;
  top: 20%;
  left: 50%;
  transform: translateX(-50%);
  width: 100%;
  max-width: 32rem;
  background-color: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-box);
  box-shadow: var(--shadow-xl);
  z-index: var(--z-modal);
  overflow: hidden;
  animation: kaze-slide-down var(--duration-slower) var(--ease-spring);
}

.command-palette__input {
  width: 100%;
  padding: var(--space-4);
  font-size: var(--font-size-base);
  border: none;
  border-bottom: 1px solid var(--color-border);
  background: transparent;
  color: var(--color-fg);
  outline: none;
}

.command-palette__list {
  max-height: 20rem;
  overflow-y: auto;
  padding: var(--space-2);
}

.command-palette__item {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-3);
  font-size: var(--font-size-sm);
  border-radius: var(--radius-md);
  cursor: pointer;
  transition: background-color var(--duration-fast) var(--ease-default);
}

.command-palette__item:hover,
.command-palette__item--active {
  background-color: var(--color-surface-hover);
}

/* ── FormField ─────────────────────────────────────────────── */

.form-field {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.form-field__label {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
  line-height: var(--line-height-normal);
}

.form-field__label--required::after {
  content: " *";
  color: var(--color-negative-fg);
}

.form-field__description {
  font-size: var(--font-size-xs);
  color: var(--color-fg-muted);
  line-height: var(--line-height-normal);
}

.form-field__error {
  font-size: var(--font-size-xs);
  color: var(--color-negative-fg);
  line-height: var(--line-height-normal);
  display: flex;
  align-items: center;
  gap: var(--space-1);
}

.form-field__error::before {
  content: "";
  display: inline-block;
  width: 14px;
  height: 14px;
  flex-shrink: 0;
  background: currentColor;
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='8' x2='12' y2='12'/%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'/%3E%3C/svg%3E");
  mask-size: contain;
  mask-repeat: no-repeat;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='8' x2='12' y2='12'/%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'/%3E%3C/svg%3E");
  -webkit-mask-size: contain;
  -webkit-mask-repeat: no-repeat;
}

.form-field__counter {
  font-size: var(--font-size-xs);
  color: var(--color-fg-muted);
  text-align: right;
  font-variant-numeric: tabular-nums;
}

/* ── Icon ──────────────────────────────────────────────────── */

.icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  color: currentColor;
}

.icon--xs { width: 12px; height: 12px; }
.icon--sm { width: 14px; height: 14px; }
.icon--md { width: 16px; height: 16px; }
.icon--lg { width: 20px; height: 20px; }
.icon--xl { width: 24px; height: 24px; }

/* ================================================================
   Landing Page Components
   ================================================================ */

/* ── Navbar ──────────────────────────────────────────────── */
.navbar {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky);
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 4rem;
  padding: 0 var(--space-4);
  background: color-mix(in srgb, var(--color-bg) 85%, transparent);
  border-bottom: 1px solid var(--color-border);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}

.navbar--transparent {
  background: transparent;
  border-bottom-color: transparent;
}

.navbar__left {
  display: flex;
  align-items: center;
  gap: var(--space-8);
}

.navbar__links {
  display: none;
  align-items: center;
  gap: var(--space-1);
  list-style: none;
  margin: 0;
  padding: 0;
}

.navbar__link {
  display: inline-flex;
  align-items: center;
  padding: var(--space-1-5) var(--space-3);
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-secondary);
  text-decoration: none;
  border-radius: var(--radius-md);
  transition: color var(--duration-fast) var(--ease-default),
              background var(--duration-fast) var(--ease-default);
}

.navbar__link:hover {
  color: var(--color-fg);
  background: var(--color-surface-hover);
}

.navbar__link--active {
  color: var(--color-fg);
}

.navbar__actions {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

/* ── Section ─────────────────────────────────────────────── */
.lp-section {
  padding: var(--space-12) var(--space-4);
}

.lp-section--sm {
  padding-top: var(--space-12);
  padding-bottom: var(--space-12);
}

.lp-section--lg {
  padding-top: var(--space-24);
  padding-bottom: var(--space-24);
}

.lp-section--muted {
  background: var(--color-bg-secondary);
}

.lp-section--dark {
  background: var(--color-bg-inverse);
  color: var(--color-fg-inverse);
}

.lp-section__inner {
  max-width: var(--content-max-width);
  margin: 0 auto;
}

/* ── Section Header ──────────────────────────────────────── */
.section-header {
  text-align: center;
  margin-bottom: var(--space-12);
}
.section-header__title {
  font-size: var(--font-size-3xl);
  font-weight: var(--font-weight-bold);
  color: var(--color-fg);
  letter-spacing: var(--letter-spacing-tight);
  margin: 0 0 var(--space-3);
}
.section-header__description {
  font-size: var(--font-size-md);
  color: var(--color-fg-secondary);
  line-height: var(--line-height-relaxed);
  margin: 0;
}

/* ── SplitSection ────────────────────────────────────────── */

.split-section {
  display: grid;
  grid-template-columns: 1fr;
  align-items: stretch;
}

.split-section--reverse .split-section__media {
  order: 2;
}

.split-section--reverse .split-section__body {
  order: 1;
}

.split-section__media {
  min-height: 320px;
  background-size: cover;
  background-position: center;
}

.split-section__body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: var(--space-8) var(--space-6);
  gap: var(--space-4);
}

@media (min-width: 1024px) {
  .split-section {
    grid-template-columns: 1fr 1fr;
    min-height: 480px;
  }

  .split-section__media {
    min-height: 480px;
  }

  .split-section__body {
    padding: var(--space-12) var(--space-10);
  }
}

/* ── Hero ────────────────────────────────────────────────── */
.hero {
  padding: var(--space-16) var(--space-4);
  text-align: center;
  position: relative;
}

.hero--colored {
  color: var(--color-fg-inverse);
}

.hero__overlay {
  position: absolute;
  inset: 0;
  background: var(--color-overlay);
  pointer-events: none;
}

.hero__inner {
  max-width: 48rem;
  margin: 0 auto;
  position: relative;
  z-index: 1;
}

.hero--colored .hero__badge {
  color: color-mix(in srgb, var(--color-fg-inverse) 90%, transparent);
  background: color-mix(in srgb, var(--color-fg-inverse) 15%, transparent);
  border-color: color-mix(in srgb, var(--color-fg-inverse) 25%, transparent);
}

.hero--colored .hero__subtitle {
  color: color-mix(in srgb, var(--color-fg-inverse) 80%, transparent);
}

.hero__badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1-5);
  padding: var(--space-1) var(--space-3);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-secondary);
  background: var(--color-bg-tertiary);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-full);
  margin-bottom: var(--space-6);
}

.hero__title {
  font-size: var(--font-size-3xl);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--letter-spacing-tight);
  line-height: var(--line-height-tight);
  margin: 0 0 var(--space-4);
}

.hero__subtitle {
  font-size: var(--font-size-lg);
  color: var(--color-fg-secondary);
  line-height: var(--line-height-relaxed);
  margin: 0 0 var(--space-8);
  max-width: 36rem;
  margin-left: auto;
  margin-right: auto;
}

.hero__actions {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  flex-wrap: wrap;
}

/* ── Feature Grid ────────────────────────────────────────── */
.feature-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: var(--space-6);
}

.feature-grid--cols-2 {
  grid-template-columns: repeat(2, 1fr);
}

.feature-grid--cols-4 {
  grid-template-columns: 1fr;
}

.feature-card {
  padding: var(--space-6);
}

.feature-card__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.5rem;
  height: 2.5rem;
  border-radius: var(--radius-lg);
  background: var(--color-bg-tertiary);
  color: var(--color-fg);
  margin-bottom: var(--space-4);
}

.feature-card__title {
  font-size: var(--font-size-md);
  font-weight: var(--font-weight-semibold);
  margin: 0 0 var(--space-2);
}

.feature-card__description {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  line-height: var(--line-height-relaxed);
  margin: 0;
}

/* ── Stats ───────────────────────────────────────────────── */
.stats {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  text-align: center;
}

.stat {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.stat__value {
  font-size: var(--font-size-4xl);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--letter-spacing-tight);
  line-height: 1;
}

.stat__label {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
}

.stat__description {
  font-size: var(--font-size-xs);
  color: var(--color-fg-muted);
}

/* ── Pricing ─────────────────────────────────────────────── */
.pricing-grid {
  display: grid;
  grid-template-columns: 1fr;
  max-width: 400px;
  margin: 0 auto;
  gap: var(--space-6);
  align-items: start;
}

.pricing-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-box);
  padding: var(--space-8);
  display: flex;
  flex-direction: column;
}

.pricing-card--featured {
  border-color: var(--color-primary);
  border-width: 2px;
  position: relative;
}

.pricing-card__badge {
  position: absolute;
  top: 0;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: var(--space-0-5) var(--space-3);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  background: var(--color-primary);
  color: var(--color-primary-fg);
  border-radius: var(--radius-full);
  white-space: nowrap;
}

.pricing-card__name {
  font-size: var(--font-size-md);
  font-weight: var(--font-weight-semibold);
  margin: 0 0 var(--space-2);
}

.pricing-card__description {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  margin: 0 0 var(--space-6);
}

.pricing-card__price {
  display: flex;
  align-items: baseline;
  gap: var(--space-1);
  margin-bottom: var(--space-6);
}

.pricing-card__amount {
  font-size: var(--font-size-4xl);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--letter-spacing-tight);
  line-height: 1;
}

.pricing-card__period {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
}

.pricing-card__features {
  list-style: none;
  margin: 0 0 var(--space-8);
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  flex: 1;
}

.pricing-card__feature {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
}

.pricing-card__check {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  color: var(--color-positive-fg);
}

/* ── Testimonial ─────────────────────────────────────────── */
.testimonial-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
}

.testimonial {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-box);
  padding: var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.testimonial__quote {
  font-size: var(--font-size-sm);
  line-height: var(--line-height-relaxed);
  color: var(--color-fg-secondary);
  margin: 0;
  flex: 1;
}

.testimonial__author {
  display: flex;
  align-items: center;
  gap: var(--space-3);
}

.testimonial__name {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg);
  margin-right: var(--space-2);
}

.testimonial__role {
  font-size: var(--font-size-xs);
  color: var(--color-fg-tertiary);
}

.testimonial__icon {
  width: 36px;
  height: 36px;
  border-radius: var(--radius-full);
  background-color: var(--color-bg-tertiary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-bold);
  color: var(--color-fg-secondary);
  flex-shrink: 0;
}

/* ── FAQ / Accordion ─────────────────────────────────────── */
.faq {
  display: flex;
  flex-direction: column;
  max-width: 48rem;
  margin: 0 auto;
}

.faq__item {
  border-bottom: 1px solid var(--color-border);
}

.faq__trigger {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-5) 0;
  background: none;
  border: none;
  font: inherit;
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
  cursor: pointer;
  text-align: left;
  transition: color var(--duration-fast) var(--ease-default);
}

.faq__trigger:hover {
  color: var(--color-fg-secondary);
}

.faq__chevron {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  color: var(--color-fg-tertiary);
  transition: transform var(--duration-normal) var(--ease-default);
}

.faq__item--open .faq__chevron {
  transform: rotate(180deg);
}

.faq__answer {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows var(--duration-slower) var(--ease-default);
}

.faq__item--open .faq__answer {
  grid-template-rows: 1fr;
}

.faq__answer-inner {
  min-height: 0;
  overflow: hidden;
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  line-height: var(--line-height-relaxed);
}

.faq__item--open .faq__answer-inner {
  padding-bottom: var(--space-5);
}

/* ── CTA Banner ──────────────────────────────────────────── */
.cta-banner {
  background: var(--color-primary);
  color: var(--color-primary-fg);
  border-radius: var(--radius-2xl);
  padding: var(--space-12) var(--space-8);
  text-align: center;
}

.cta-banner__title {
  font-size: var(--font-size-xl);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--letter-spacing-tight);
  margin: 0 0 var(--space-3);
}

.cta-banner__description {
  font-size: var(--font-size-base);
  opacity: 0.8;
  margin: 0 0 var(--space-6);
  max-width: 32rem;
  margin-left: auto;
  margin-right: auto;
}

.cta-banner__actions {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  flex-wrap: wrap;
}

/* Invert button colors inside CTA banner */
.cta-banner .btn--primary {
  background-color: var(--color-primary-fg);
  color: var(--color-primary);
}

.cta-banner .btn--primary:hover {
  background-color: var(--color-primary-fg);
  opacity: 0.9;
}

.cta-banner .btn--outline {
  border-color: var(--color-primary-fg);
  color: var(--color-primary-fg);
}

.cta-banner .btn--outline:hover {
  background-color: color-mix(in srgb, var(--color-fg-inverse) 10%, transparent);
}

/* ── Footer ──────────────────────────────────────────────── */
.lp-footer {
  border-top: 1px solid var(--color-border);
  padding: var(--space-16) var(--space-6) var(--space-8);
}

.lp-footer__inner {
  max-width: var(--content-max-width);
  margin: 0 auto;
}

.lp-footer__grid {
  display: flex;
  flex-direction: column;
  gap: var(--space-10);
  margin-bottom: var(--space-10);
}

.lp-footer__brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-4);
}

.lp-footer__brand-description {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  line-height: var(--line-height-relaxed);
  margin: 0;
}

.lp-footer__nav {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-10);
}

.lp-footer__column-title {
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg);
  letter-spacing: var(--letter-spacing-normal);
  margin: 0 0 var(--space-3);
}

.lp-footer__links {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2-5);
}

.lp-footer__link {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  text-decoration: none;
  transition: color var(--duration-fast) var(--ease-default);
}

.lp-footer__link:hover {
  color: var(--color-fg);
}

.lp-footer__bottom {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding-top: var(--space-8);
  border-top: 1px solid var(--color-border);
  font-size: var(--font-size-xs);
  color: var(--color-fg-tertiary);
}

/* ── LP Responsive ───────────────────────────────────────── */
@media (min-width: 768px) {
  .navbar__links { display: flex; }
  .navbar { padding: 0 var(--space-6); }

  .hero { padding: var(--space-24) var(--space-6); }
  .hero__title { font-size: var(--font-size-5xl); }

  .lp-section { padding: var(--space-20) var(--space-6); }

  .pricing-grid { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); max-width: none; }

  .lp-footer__brand { flex-direction: row; align-items: center; }
  .lp-footer__bottom { flex-direction: row; align-items: center; justify-content: space-between; gap: 0; }

  .article__cover { border-radius: var(--radius-xl); margin-left: 0; margin-right: 0; }

  .article__title { font-size: var(--font-size-4xl); }

  .heading--1 { font-size: var(--font-size-4xl); }
  .heading--2 { font-size: var(--font-size-3xl); }
  .heading--3 { font-size: var(--font-size-2xl); }

  .stepper { flex-direction: row; align-items: center; }
  .stepper__connector {
    flex: 1;
    width: auto;
    height: 2px;
    min-width: 24px;
    margin: 0 var(--space-3);
  }

  .stats { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); }

  .cta-banner__title { font-size: var(--font-size-2xl); }

  .donut-chart { flex-direction: row; }
  .donut-chart__svg { margin: 0; }
}

/* ── Sample Pages Responsive ─────────────────────────────── */

.blog-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-10);
}

.showcase-hero {
  padding: var(--space-12) var(--space-4) var(--space-8);
}

@media (min-width: 768px) {
  .showcase-hero { padding: var(--space-24) var(--space-6) var(--space-16); }
}

@media (min-width: 1024px) {
  .blog-layout { grid-template-columns: 1fr 20rem; }
}

.settings-profile {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-6);
}

.settings-plan-row {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  padding: var(--space-4);
  border-radius: var(--radius-lg);
  background: var(--color-bg-secondary);
  margin-bottom: var(--space-6);
  gap: var(--space-4);
  flex-wrap: wrap;
}

.settings-danger-row {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  padding: var(--space-4);
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border);
  gap: var(--space-4);
  flex-wrap: wrap;
}

.settings-danger-row .btn {
  align-self: flex-start;
  margin-left: 0;
}

@media (min-width: 640px) {
  .settings-profile { flex-direction: row; align-items: flex-start; }

  .settings-plan-row {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-3);
  }

  .settings-danger-row {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
  }

  .settings-danger-row .btn {
    align-self: auto;
    margin-left: auto;
  }
}

@media (min-width: 640px) {
  .feature-grid--cols-4 { grid-template-columns: repeat(2, 1fr); }
  .stats { grid-template-columns: repeat(2, 1fr); }
  .lp-footer__nav { grid-template-columns: repeat(2, 1fr); }
  .testimonial-grid { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
}

@media (min-width: 1024px) {
  .stats { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); }
}

@media (min-width: 768px) {
  .lp-footer__nav { grid-template-columns: repeat(3, 1fr); }
}

@media (min-width: 1024px) {
  .feature-grid--cols-4 { grid-template-columns: repeat(4, 1fr); }
}

/* ================================================================
   Article / Prose
   ================================================================ */

/* ── Article Layout ──────────────────────────────────────── */
.article {
  max-width: 720px;
  margin: 0 auto;
  padding: 0 var(--space-6);
}

.article__cover {
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border-radius: 0;
  margin-bottom: var(--space-8);
  margin-left: -1rem;
  margin-right: -1rem;
}

.article__header {
  margin-bottom: var(--space-8);
}

.article__category {
  display: inline-block;
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg-secondary);
  text-transform: uppercase;
  letter-spacing: var(--letter-spacing-wider);
  margin-bottom: var(--space-3);
}

.article__title {
  font-size: var(--font-size-2xl);
  font-weight: var(--font-weight-bold);
  letter-spacing: -0.03em;
  line-height: var(--line-height-tight);
  margin: 0 0 var(--space-5);
}

.article__meta {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
}

.article__meta-author {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.article__meta-author-name {
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
}

.article__meta-dot::before {
  content: "·";
}

/* ── Prose Typography ────────────────────────────────────── */
.prose {
  font-size: var(--font-size-base);
  line-height: var(--line-height-loose);
  color: var(--color-fg);
}

.prose > * + * {
  margin-top: var(--space-5);
}

.prose h2 {
  font-size: var(--font-size-2xl);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--letter-spacing-tight);
  line-height: var(--line-height-snug);
  margin-top: var(--space-12);
  margin-bottom: var(--space-4);
}

.prose h3 {
  font-size: var(--font-size-xl);
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-snug);
  margin-top: var(--space-8);
  margin-bottom: var(--space-3);
}

.prose p {
  margin: 0;
}

.prose a {
  color: var(--color-fg);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--color-border-strong);
  transition: text-decoration-color var(--duration-fast) var(--ease-default);
}

.prose a:hover {
  text-decoration-color: var(--color-fg);
}

.prose strong {
  font-weight: var(--font-weight-semibold);
}

.prose blockquote {
  border-left: 3px solid var(--color-border-strong);
  padding-left: var(--space-5);
  margin-left: 0;
  margin-right: 0;
  color: var(--color-fg-secondary);
  font-style: italic;
}

.prose ul,
.prose ol {
  padding-left: var(--space-6);
  margin-bottom: var(--space-5);
}

.prose ul {
  list-style-type: disc;
}

.prose ol {
  list-style-type: decimal;
}

.prose li {
  margin-top: var(--space-1-5);
}

.prose li::marker {
  color: var(--color-fg-tertiary);
}

.prose code {
  background: var(--color-bg-tertiary);
  padding: var(--space-0-5) var(--space-1-5);
  border-radius: var(--radius-sm);
  font-family: var(--font-mono);
  font-size: 0.875em;
}

.prose pre {
  background: var(--color-bg-tertiary);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-5);
  overflow-x: auto;
  font-family: var(--font-mono);
  font-size: var(--font-size-sm);
  line-height: var(--line-height-relaxed);
}

.prose pre code {
  background: none;
  padding: 0;
  border-radius: 0;
  font-size: inherit;
}

.prose img {
  max-width: 100%;
  height: auto;
  border-radius: var(--radius-lg);
  margin-top: var(--space-6);
  margin-bottom: var(--space-6);
}

.prose figure {
  margin: var(--space-8) 0;
}

.prose figcaption {
  font-size: var(--font-size-sm);
  color: var(--color-fg-tertiary);
  text-align: center;
  margin-top: var(--space-2);
}

.prose hr {
  border: none;
  height: 1px;
  background: var(--color-border);
  margin: var(--space-10) 0;
}

/* ── Prose: table ──────────────────────────────────────────── */
.prose table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--font-size-sm);
  margin-top: var(--space-5);
  margin-bottom: var(--space-5);
}

.prose th,
.prose td {
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--color-border);
  text-align: left;
}

.prose th {
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg);
  border-bottom: 2px solid var(--color-border-strong);
}

.prose td {
  color: var(--color-fg-secondary);
}

/* ── Prose: h4 ─────────────────────────────────────────────── */
.prose h4 {
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-snug);
  margin-top: var(--space-6);
  margin-bottom: var(--space-2);
}

/* ── Prose: dl / dt / dd ───────────────────────────────────── */
.prose dl {
  margin-top: var(--space-5);
  margin-bottom: var(--space-5);
}

.prose dt {
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg);
  margin-top: var(--space-4);
}

.prose dt:first-child {
  margin-top: 0;
}

.prose dd {
  margin-left: var(--space-5);
  margin-top: var(--space-1);
  color: var(--color-fg-secondary);
}

/* ── Prose: details / summary ──────────────────────────────── */
.prose details {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: 0;
  margin-top: var(--space-3);
  margin-bottom: var(--space-3);
}

.prose details + details {
  margin-top: calc(-1 * var(--space-1));
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

.prose details + details:not([open]) {
  border-top: none;
}

.prose summary {
  padding: var(--space-3) var(--space-4);
  font-weight: var(--font-weight-medium);
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  -webkit-user-select: none;
  user-select: none;
  border-radius: var(--radius-lg);
  transition: background var(--duration-fast) var(--ease-default);
}

.prose summary:hover {
  background: var(--color-bg-tertiary);
}

.prose summary::-webkit-details-marker {
  display: none;
}

.prose summary::after {
  content: "";
  width: 6px;
  height: 6px;
  border-right: 2px solid var(--color-fg-tertiary);
  border-bottom: 2px solid var(--color-fg-tertiary);
  transform: rotate(-45deg);
  transition: transform var(--duration-fast) var(--ease-default);
  flex-shrink: 0;
}

.prose details[open] > summary::after {
  transform: rotate(45deg);
}

.prose details[open] > summary {
  border-bottom: 1px solid var(--color-border);
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
}

.prose details > :not(summary) {
  padding: 0 var(--space-4);
}

.prose details > :nth-child(2) {
  padding-top: var(--space-4);
}

.prose details > :last-child {
  padding-bottom: var(--space-4);
}

/* ── Prose: mark ───────────────────────────────────────────── */
.prose mark {
  background: var(--color-amber-100);
  color: inherit;
  padding: var(--space-0-5) var(--space-1);
  border-radius: var(--radius-sm);
}

[data-theme="dark"] .prose mark {
  background: var(--color-amber-900);
}

/* ── Prose: kbd ────────────────────────────────────────────── */
.prose kbd {
  display: inline-block;
  padding: var(--space-0-5) var(--space-1-5);
  font-family: var(--font-mono);
  font-size: 0.85em;
  line-height: 1;
  color: var(--color-fg);
  background: var(--color-bg-secondary);
  border: 1px solid var(--color-border);
  border-bottom-width: 2px;
  border-radius: var(--radius-sm);
  white-space: nowrap;
}

/* ── Article Actions ─────────────────────────────────────── */
.article__actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-6) 0;
  border-top: 1px solid var(--color-border);
  border-bottom: 1px solid var(--color-border);
  margin: var(--space-8) 0;
}

.article__actions-left {
  display: flex;
  align-items: center;
  gap: var(--space-4);
}

.article__actions-right {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.article__action-btn {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1-5);
  background: none;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-full);
  padding: var(--space-1-5) var(--space-3);
  font: inherit;
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  cursor: pointer;
  transition: border-color var(--duration-fast) var(--ease-default), color var(--duration-fast) var(--ease-default), background-color var(--duration-fast) var(--ease-default);
}

.article__action-btn:hover {
  border-color: var(--color-border-strong);
  color: var(--color-fg);
}

.article__action-btn--active {
  border-color: var(--color-negative);
  color: var(--color-negative-fg);
  background: var(--color-negative-light);
}

/* ── Author Card ─────────────────────────────────────────── */
.article__author-card {
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
  padding: var(--space-6);
  background: var(--color-bg-secondary);
  border-radius: var(--radius-box);
  margin-bottom: var(--space-10);
}

.article__author-card-info {
  flex: 1;
}

.article__author-card-name {
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-semibold);
  margin: 0 0 var(--space-1);
}

.article__author-card-bio {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  line-height: var(--line-height-relaxed);
  margin: 0 0 var(--space-3);
}

/* ── Related Articles ────────────────────────────────────── */
.article__related {
  margin-bottom: var(--space-16);
}

.article__related-title {
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-semibold);
  margin: 0 0 var(--space-6);
}

.article__related-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--space-5);
}

.article__related-card {
  text-decoration: none;
  color: inherit;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  transition: opacity var(--duration-fast) var(--ease-default);
}

.article__related-card:hover {
  opacity: 0.8;
}

.article__related-card img {
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  border-radius: var(--radius-lg);
}

.article__related-card-title {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  line-height: var(--line-height-snug);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.article__related-card-meta {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--font-size-xs);
  color: var(--color-fg-tertiary);
}

/* ================================================================
   Heading — 大見出し・小見出し
   ================================================================ */

.heading {
  font-family: var(--font-sans);
  font-weight: var(--font-weight-bold);
  color: var(--color-fg);
  line-height: 1.5;  /* CJK headings need ≥1.5 for proper readability */
  letter-spacing: var(--letter-spacing-tight);
  margin: 0;
}

.heading--1 {
  font-size: var(--font-size-2xl);
  letter-spacing: -0.03em;
  line-height: 1.3;
}

.heading--2 {
  font-size: var(--font-size-xl);
}

.heading--3 {
  font-size: var(--font-size-lg);
}

.heading--4 {
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-semibold);
}

.heading--5 {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
}

.heading--6 {
  font-size: var(--font-size-xs);  /* 13px — smaller than heading--5 (14px) */
  font-weight: var(--font-weight-semibold);
  letter-spacing: var(--letter-spacing-wide);
  text-transform: uppercase;
}

.heading__description {
  margin-top: var(--space-2);
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-normal);
  color: var(--color-fg-secondary);
  line-height: var(--line-height-relaxed);
  letter-spacing: var(--letter-spacing-normal);
}

.heading--1 .heading__description {
  font-size: var(--font-size-lg);
}

.heading--bordered {
  padding-bottom: var(--space-4);
  border-bottom: 1px solid var(--color-border);
}

/* ================================================================
   Text
   ================================================================ */

.text {
  margin: 0;
  color: var(--color-fg);
}

/* -- variant -- */

.text--lead {
  font-size: var(--font-size-lg);
  line-height: var(--line-height-relaxed);
  color: var(--color-fg-muted);
}

.text--caption {
  font-size: var(--font-size-sm);
  line-height: var(--line-height-normal);
  color: var(--color-fg-muted);
}

.text--overline {
  font-size: var(--font-size-xs);
  line-height: var(--line-height-normal);
  letter-spacing: var(--letter-spacing-wide);
  text-transform: uppercase;
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg-muted);
}

/* -- size override -- */

.text--xs   { font-size: var(--font-size-xs); }
.text--sm   { font-size: var(--font-size-sm); }
.text--base { font-size: var(--font-size-base); }
.text--lg   { font-size: var(--font-size-lg); }
.text--xl   { font-size: var(--font-size-xl); }
.text--2xl  { font-size: var(--font-size-2xl); }

/* -- weight -- */

.text--normal   { font-weight: var(--font-weight-normal); }
.text--medium   { font-weight: var(--font-weight-medium); }
.text--semibold { font-weight: var(--font-weight-semibold); }
.text--bold     { font-weight: var(--font-weight-bold); }

/* -- color -- */

.text--muted   { color: var(--color-fg-muted); }
.text--subtle  { color: var(--color-fg-secondary); }
.text--inherit { color: inherit; }
.text--primary { color: var(--color-primary); }
.text--positive { color: var(--color-positive-fg); }
.text--warning  { color: var(--color-warning); }
.text--negative { color: var(--color-negative-fg); }

/* -- align -- */

.text--left   { text-align: left; }
.text--center { text-align: center; }
.text--right  { text-align: right; }

/* ================================================================
   Grid
   ================================================================ */

.grid {
  display: grid;
  grid-template-columns: repeat(var(--grid-cols-sm, var(--grid-cols-md, var(--grid-cols, 3))), 1fr);
  gap: var(--grid-gap-sm, var(--grid-gap-md, var(--grid-gap, var(--space-6))));
}

@media (min-width: 640px) {
  .grid {
    grid-template-columns: repeat(var(--grid-cols-md, var(--grid-cols, 3)), 1fr);
    gap: var(--grid-gap-md, var(--grid-gap, var(--space-6)));
  }
}

@media (min-width: 1024px) {
  .grid {
    grid-template-columns: repeat(var(--grid-cols, 3), 1fr);
    gap: var(--grid-gap, var(--space-6));
  }
}

/* ================================================================
   List / ListItem
   ================================================================ */

.list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
}

.list--divided .list-item + .list-item {
  border-top: 1px solid var(--color-border);
}

.list-item {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) 0;
  font-size: var(--font-size-sm);
  color: var(--color-fg);
}

.list-item__leading {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-fg-secondary);
}

.list-item__content {
  flex: 1;
  min-width: 0;
}

.list-item__title {
  font-weight: var(--font-weight-medium);
  line-height: var(--line-height-snug);
}

.list-item__description {
  font-size: var(--font-size-xs);
  color: var(--color-fg-secondary);
  margin-top: var(--space-0-5);
  line-height: var(--line-height-normal);
}

.list-item__trailing {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  color: var(--color-fg-tertiary);
  font-size: var(--font-size-xs);
}

.list-item--interactive {
  cursor: pointer;
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-3);
  transition: background var(--duration-fast) var(--ease-default);
}

.list-item--interactive:hover {
  background: var(--color-surface-hover);
}

/* Marker variants — tighter spacing for simple lists */
.list--disc .list-item,
.list--decimal .list-item {
  padding: var(--space-1) 0;
}

.list--disc .list-item::before {
  content: "";
  width: 5px;
  height: 5px;
  border-radius: var(--radius-full);
  background: var(--color-fg-tertiary);
  flex-shrink: 0;
}

.list--decimal {
  counter-reset: list-counter;
}
.list--decimal .list-item::before {
  counter-increment: list-counter;
  content: counter(list-counter) ".";
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-tertiary);
  min-width: 1.5em;
  flex-shrink: 0;
  font-variant-numeric: tabular-nums;
}

/* ================================================================
   DescriptionList
   ================================================================ */

.dl {
  margin: 0;
  display: grid;
  gap: var(--space-4);
}

.dl--horizontal {
  grid-template-columns: 1fr;
  gap: var(--space-2) var(--space-6);
  align-items: baseline;
}

.dl__term {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-secondary);
  margin: 0;
}

.dl__detail {
  font-size: var(--font-size-sm);
  color: var(--color-fg);
  margin: 0;
  line-height: var(--line-height-relaxed);
}

.dl--bordered .dl__group {
  padding-bottom: var(--space-4);
  border-bottom: 1px solid var(--color-border);
}

.dl__group {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.dl--horizontal .dl__group {
  display: contents;
}

.dl--horizontal .dl__term {
  font-weight: var(--font-weight-semibold);
}

@media (min-width: 640px) {
  .dl--horizontal {
    grid-template-columns: minmax(120px, auto) 1fr;
  }

  .dl--horizontal .dl__term {
    font-weight: var(--font-weight-medium);
  }
}

/* ================================================================
   Timeline
   ================================================================ */

.timeline {
  position: relative;
  padding: 0;
  margin: 0;
  list-style: none;
  display: flex;
  flex-direction: column;
}

.timeline-item {
  position: relative;
  padding-left: var(--space-8);
  padding-bottom: var(--space-6);
}

.timeline-item:last-child {
  padding-bottom: 0;
}

/* Vertical line */
.timeline-item::before {
  content: "";
  position: absolute;
  left: 5px;
  top: 12px;
  bottom: 0;
  width: 1px;
  background: var(--color-border);
}

.timeline-item:last-child::before {
  display: none;
}

/* Dot */
.timeline-item__dot {
  position: absolute;
  left: 0;
  top: 6px;
  width: 12px;
  height: 12px;
  border-radius: var(--radius-full);
  background: var(--color-border-strong);
  border: 2px solid var(--color-bg);
  box-shadow: 0 0 0 2px var(--color-border);
}

.timeline-item__dot--positive {
  background: var(--color-positive);
  box-shadow: 0 0 0 2px var(--color-positive-light);
}

.timeline-item__dot--negative {
  background: var(--color-negative);
  box-shadow: 0 0 0 2px var(--color-negative-light);
}

.timeline-item__dot--info {
  background: var(--color-info);
  box-shadow: 0 0 0 2px var(--color-info-light);
}

.timeline-item__dot--warning {
  background: var(--color-warning);
  box-shadow: 0 0 0 2px var(--color-warning-light);
}

.timeline-item__time {
  font-size: var(--font-size-xs);
  color: var(--color-fg-tertiary);
  margin-bottom: var(--space-1);
}

.timeline-item__title {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
}

.timeline-item__description {
  font-size: var(--font-size-xs);
  color: var(--color-fg-secondary);
  margin-top: var(--space-1);
  line-height: var(--line-height-relaxed);
}

/* ================================================================
   Chart — BarChart
   ================================================================ */

.bar-chart {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  width: 100%;
}

.bar-chart__item {
  display: grid;
  grid-template-columns: minmax(60px, auto) 1fr auto;
  align-items: center;
  gap: var(--space-3);
}

.bar-chart__label {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  white-space: nowrap;
  text-align: right;
}

.bar-chart__track {
  display: block;
  height: 8px;
  background: var(--color-bg-tertiary);
  border-radius: var(--radius-full);
  overflow: hidden;
}

.bar-chart__fill {
  display: block;
  height: 100%;
  border-radius: var(--radius-full);
  transition: width var(--duration-slower) var(--ease-out);
}

.bar-chart__value {
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
  min-width: 3ch;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

/* ================================================================
   Chart — DonutChart
   ================================================================ */

.donut-chart {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-6);
}

.donut-chart__svg {
  flex-shrink: 0;
  transform: rotate(-90deg);
  margin: 0 auto;
}

.donut-chart__track {
  fill: none;
  stroke: var(--color-bg-tertiary);
}

.donut-chart__segment {
  fill: none;
  transition: stroke-dashoffset var(--duration-slower) var(--ease-out);
}

.donut-chart__center-label {
  transform: rotate(90deg);
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-bold);
  fill: var(--color-fg);
  text-anchor: middle;
  dominant-baseline: central;
  font-variant-numeric: tabular-nums;
}

.donut-chart__legend {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.donut-chart__legend-item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--font-size-sm);
}

.donut-chart__legend-dot {
  width: 8px;
  height: 8px;
  border-radius: var(--radius-full);
  flex-shrink: 0;
}

.donut-chart__legend-label {
  color: var(--color-fg-secondary);
}

.donut-chart__legend-value {
  margin-left: auto;
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
  font-variant-numeric: tabular-nums;
}

/* ================================================================
   Chart — Sparkline
   ================================================================ */

.sparkline {
  display: inline-block;
  vertical-align: middle;
}

.sparkline__line {
  fill: none;
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.sparkline__area {
  opacity: 0.1;
}

/* ================================================================
   Breadcrumb
   ================================================================ */

.breadcrumb {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  list-style: none;
  padding: 0;
  margin: 0;
}

.breadcrumb__item {
  display: flex;
  align-items: center;
  gap: var(--space-1);
}

.breadcrumb__item + .breadcrumb__item::before {
  content: "/";
  color: var(--color-fg-tertiary);
  margin: 0 var(--space-1);
}

.breadcrumb__link {
  color: var(--color-fg-secondary);
  text-decoration: none;
  transition: color var(--duration-fast) var(--ease-default);
}

.breadcrumb__link:hover {
  color: var(--color-fg);
}

.breadcrumb__current {
  color: var(--color-fg);
  font-weight: var(--font-weight-medium);
}

/* ================================================================
   Pagination
   ================================================================ */

.pagination {
  display: flex;
  align-items: center;
  gap: var(--space-1);
}

.pagination__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2rem;
  height: 2rem;
  padding: 0 var(--space-2);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface);
  color: var(--color-fg);
  font-size: var(--font-size-sm);
  font-variant-numeric: tabular-nums;
  cursor: pointer;
  transition: background-color var(--duration-fast) var(--ease-default), border-color var(--duration-fast) var(--ease-default), color var(--duration-fast) var(--ease-default);
}

.pagination__btn:hover:not(:disabled):not(.pagination__btn--active) {
  background: var(--color-surface-hover);
  border-color: var(--color-border-strong);
}

.pagination__btn--active {
  background: var(--color-primary);
  color: var(--color-primary-fg);
  border-color: var(--color-primary);
}

.pagination__btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

.pagination__ellipsis {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2rem;
  height: 2rem;
  color: var(--color-fg-tertiary);
  font-size: var(--font-size-sm);
}

/* ================================================================
   Progress
   ================================================================ */

.progress {
  display: flex;
  flex-direction: column;
  gap: var(--space-1-5);
  width: 100%;
}

.progress__label-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}

.progress__label {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
}

.progress__value-text {
  font-size: var(--font-size-xs);
  color: var(--color-fg-secondary);
  font-variant-numeric: tabular-nums;
}

.progress__track {
  height: 6px;
  background: var(--color-bg-tertiary);
  border-radius: var(--radius-full);
  overflow: hidden;
}

.progress__track--sm { height: 4px; }
.progress__track--lg { height: 10px; }

.progress__fill {
  height: 100%;
  border-radius: var(--radius-full);
  background: var(--color-primary);
  transition: width var(--duration-slower) var(--ease-out);
}

.progress__fill--positive { background: var(--color-positive); }
.progress__fill--negative { background: var(--color-negative); }
.progress__fill--warning  { background: var(--color-warning); }
.progress__fill--info     { background: var(--color-info); }

/* ================================================================
   Switch
   ================================================================ */

.switch {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  cursor: pointer;
}

.switch__track {
  position: relative;
  width: 36px;
  height: 20px;
  border-radius: var(--radius-full);
  background: var(--color-bg-tertiary);
  border: 1px solid var(--color-border);
  transition: background-color var(--duration-normal) var(--ease-default), border-color var(--duration-normal) var(--ease-default);
  flex-shrink: 0;
}

.switch__thumb {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 14px;
  height: 14px;
  border-radius: var(--radius-full);
  background: #ffffff;  /* Always white for clear contrast against both track states */
  box-shadow: var(--shadow-sm);
  transition: transform var(--duration-normal) var(--ease-spring);
}

.switch__input {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
}

.switch__input:checked + .switch__track {
  background: var(--color-primary);
  border-color: var(--color-primary);
}

.switch__input:checked + .switch__track .switch__thumb {
  transform: translateX(16px);
}

.switch__input:focus-visible + .switch__track {
  outline: var(--ring-width) solid var(--ring-color);
  outline-offset: var(--ring-offset);
}

.switch__input:disabled + .switch__track {
  opacity: 0.4;
  cursor: not-allowed;
}

.switch__label {
  font-size: var(--font-size-sm);
  color: var(--color-fg);
  user-select: none;
}

/* ================================================================
   Alert
   ================================================================ */

.alert {
  display: flex;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-field);
  border: 1px solid var(--color-border);
  background: var(--color-surface);
  font-size: var(--font-size-sm);
}

.alert__icon {
  flex-shrink: 0;
  margin-top: 1px;
}

.alert__content {
  flex: 1;
  min-width: 0;
}

.alert__title {
  font-weight: var(--font-weight-semibold);
  margin-bottom: var(--space-0-5);
}

.alert__description {
  color: var(--color-fg-secondary);
  line-height: var(--line-height-relaxed);
}

.alert--info {
  background: var(--color-info-light);
  border-color: var(--color-info);
}

.alert--info .alert__icon { color: var(--color-info-fg); }

.alert--positive {
  background: var(--color-positive-light);
  border-color: var(--color-positive);
}

.alert--positive .alert__icon { color: var(--color-positive-fg); }

.alert--warning {
  background: var(--color-warning-light);
  border-color: var(--color-warning);
}

.alert--warning .alert__icon { color: var(--color-warning-fg); }

.alert--negative {
  background: var(--color-negative-light);
  border-color: var(--color-negative);
}

.alert--negative .alert__icon { color: var(--color-negative-fg); }

/* ================================================================
   EmptyState
   ================================================================ */

.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: var(--space-12) var(--space-6);
  gap: var(--space-3);
}

.empty-state--sm {
  padding: var(--space-3) var(--space-2);
  gap: var(--space-1);
}

.empty-state--md {
  padding: var(--space-8) var(--space-4);
  gap: var(--space-2);
}

.empty-state--lg {
  padding: var(--space-12) var(--space-6);
  gap: var(--space-3);
}

.empty-state__icon {
  color: var(--color-fg-tertiary);
  margin-bottom: var(--space-2);
}

.empty-state--sm .empty-state__icon {
  margin-bottom: 0;
}

.empty-state__title {
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg);
}

.empty-state--sm .empty-state__title {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-secondary);
}

.empty-state--md .empty-state__title {
  font-size: var(--font-size-base);
}

.empty-state__description {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  max-width: 360px;
  line-height: var(--line-height-relaxed);
}

.empty-state--sm .empty-state__description {
  font-size: var(--font-size-xs);
}

.empty-state__actions {
  display: flex;
  gap: var(--space-3);
  margin-top: var(--space-2);
}

/* ================================================================
   Stepper
   ================================================================ */

.stepper {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-0);
}

.stepper__step {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.stepper__circle {
  width: 28px;
  height: 28px;
  border-radius: var(--radius-full);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  border: 2px solid var(--color-border);
  color: var(--color-fg-tertiary);
  background: var(--color-surface);
  flex-shrink: 0;
  transition: border-color var(--duration-normal) var(--ease-default), background-color var(--duration-normal) var(--ease-default), color var(--duration-normal) var(--ease-default);
}

.stepper__circle--active {
  border-color: var(--color-primary);
  background: var(--color-primary);
  color: var(--color-primary-fg);
}

.stepper__circle--completed {
  border-color: var(--color-positive);
  background: var(--color-positive);
  color: var(--color-fg-inverse);
}

.stepper__label {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-secondary);
  white-space: nowrap;
}

.stepper__step--active .stepper__label {
  color: var(--color-fg);
}

.stepper__connector {
  flex: none;
  width: 2px;
  height: 24px;
  background: var(--color-border);
  min-width: 0;
  margin: var(--space-1) 0 var(--space-1) 13px;
}

.stepper__connector--completed {
  background: var(--color-positive);
}

/* ── Watermark ──────────────────────────────────────────── */
.watermark {
  position: relative;
}

.watermark__overlay {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 1;
}

/* ── Meter ───────────────────────────────────────────────── */
.meter {
  width: 100%;
}

.meter__label-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: var(--space-1-5);
}

.meter__label {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
}

.meter__value-text {
  font-size: var(--font-size-xs);
  color: var(--color-fg-secondary);
  font-variant-numeric: tabular-nums;
}

.meter__track {
  position: relative;
  width: 100%;
  height: 8px;
  background: var(--color-bg-tertiary);
  border-radius: var(--radius-full);
  overflow: hidden;
}

.meter__track--sm { height: 4px; }
.meter__track--lg { height: 12px; }

.meter__fill {
  height: 100%;
  border-radius: var(--radius-full);
  background: var(--color-fg-secondary);
  transition: width var(--duration-slower) var(--ease-out),
              background-color var(--duration-normal) var(--ease-default);
}

.meter__fill--positive { background: var(--color-positive); }
.meter__fill--negative { background: var(--color-negative); }
.meter__fill--warning  { background: var(--color-warning); }
.meter__fill--info     { background: var(--color-info); }

.meter__marker {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 2px;
  background: var(--color-border-strong);
  opacity: 0.5;
  transform: translateX(-1px);
}

/* ── Tracker ─────────────────────────────────────────────── */
.tracker {
  display: flex;
  gap: 2px;
  width: 100%;
  height: 24px;
  align-items: stretch;
}

.tracker__segment {
  flex: 1;
  border-radius: 2px;
  background: var(--color-bg-tertiary);
  transition: background-color var(--duration-normal) var(--ease-default);
  min-width: 3px;
}

.tracker__segment:first-child {
  border-radius: var(--radius-sm) 2px 2px var(--radius-sm);
}

.tracker__segment:last-child {
  border-radius: 2px var(--radius-sm) var(--radius-sm) 2px;
}

.tracker__segment--positive { background: var(--color-positive); }
.tracker__segment--negative { background: var(--color-negative); }
.tracker__segment--warning  { background: var(--color-warning); }
.tracker__segment--info     { background: var(--color-info); }
.tracker__segment--default  { background: var(--color-bg-tertiary); }

/* ── BarList ─────────────────────────────────────────────── */
.barlist {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.barlist__row {
  display: flex;
  align-items: center;
  gap: var(--space-4);
}

.barlist__row--link {
  text-decoration: none;
  color: inherit;
  border-radius: var(--radius-md);
  transition: background-color var(--duration-normal) var(--ease-default);
}

.barlist__row--link:hover {
  background: var(--color-surface-hover);
}

.barlist__bar-wrapper {
  flex: 1;
  position: relative;
  display: flex;
  align-items: center;
  min-height: 32px;
}

.barlist__bar {
  position: absolute;
  inset: 0;
  border-radius: var(--radius-sm);
  background: var(--color-info-light);
  transition: width var(--duration-slower) var(--ease-out);
}

.barlist__label {
  position: relative;
  z-index: 1;
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
  padding: var(--space-1) var(--space-2);
  white-space: nowrap;
}

.barlist__value {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-secondary);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  flex-shrink: 0;
}

/* ── NumberField ─────────────────────────────────────────── */
.number-field {
  display: flex;
  flex-direction: column;
  gap: var(--space-1-5);
}

.number-field__label {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
}

.number-field__wrapper {
  display: flex;
  align-items: center;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface);
  transition: border-color var(--duration-normal) var(--ease-default),
              box-shadow var(--duration-normal) var(--ease-default);
  overflow: hidden;
}

.number-field__wrapper:focus-within {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 var(--ring-width) var(--ring-color);
}

.number-field--error .number-field__wrapper {
  border-color: var(--color-negative);
}

.number-field--error .number-field__wrapper:focus-within {
  box-shadow: 0 0 0 var(--ring-width) var(--color-error-ring);
}

.number-field__input {
  flex: 1;
  min-width: 0;
  border: none;
  background: transparent;
  font-family: var(--font-mono);
  font-size: var(--font-size-sm);
  font-variant-numeric: tabular-nums;
  color: var(--color-fg);
  padding: var(--space-2) var(--space-2);
  text-align: right;
  outline: none;
}

.number-field__input::placeholder {
  color: var(--color-fg-tertiary);
}

.number-field__input:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.number-field__affix {
  font-size: var(--font-size-sm);
  color: var(--color-fg-secondary);
  padding: 0 var(--space-2);
  user-select: none;
  flex-shrink: 0;
}

.number-field__stepper {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 36px;
  border: none;
  background: var(--color-bg-secondary);
  color: var(--color-fg-secondary);
  cursor: pointer;
  flex-shrink: 0;
  transition: background-color var(--duration-normal) var(--ease-default),
              color var(--duration-normal) var(--ease-default);
}

.number-field__stepper:hover:not(:disabled) {
  background: var(--color-surface-active);
  color: var(--color-fg);
}

.number-field__stepper:disabled {
  opacity: 0.3;
  cursor: not-allowed;
}

.number-field__error {
  font-size: var(--font-size-xs);
  color: var(--color-negative-fg);
  margin: 0;
}

/* ================================================================
   AppLayout
   ================================================================ */

.app-layout {
  display: flex;
  min-height: 100dvh;
  background-color: var(--color-bg-secondary);
}

.app-layout__main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.app-layout__content {
  flex: 1;
  padding: var(--space-6);
  max-width: var(--content-max-width);
  width: 100%;
}

/* ── TopBar ──────────────────────────────────────────────── */

.top-bar {
  position: sticky;
  top: 0;
  height: var(--topbar-height);
  background-color: var(--color-bg);
  border-bottom: 1px solid var(--color-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 var(--space-6);
  z-index: var(--z-sticky);
}

.top-bar__actions {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

/* ── Sidebar ─────────────────────────────────────────────── */

.sidebar {
  width: var(--sidebar-width);
  position: sticky;
  top: 0;
  height: 100dvh;
  flex-shrink: 0;
  overflow-y: auto;
  background-color: var(--color-bg);
  border-right: 1px solid var(--color-border);
  display: flex;
  flex-direction: column;
  padding: var(--space-5) var(--space-3);
}

.sidebar__logo {
  display: flex;
  align-items: center;
  gap: var(--space-2-5);
  padding: 0 var(--space-3);
  margin-bottom: var(--space-6);
  font-weight: var(--font-weight-bold);
  font-size: var(--font-size-base);
  letter-spacing: var(--letter-spacing-tight);
}

.sidebar__nav {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.sidebar__footer {
  margin-top: auto;
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border-subtle);
}

.sidebar__group-label {
  font-size: var(--font-size-2xs);
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg-muted);
  padding: var(--space-4) var(--space-4) var(--space-1);
  letter-spacing: 0.03em;
}

.sidebar__divider {
  height: 1px;
  background: var(--color-border);
  margin: var(--space-2) var(--space-4);
}

/* Sidebar is always visible (sticky in flex layout).
   Consumers can add their own @media rules to hide on mobile. */

/* ── Logo ────────────────────────────────────────────────── */

.logo {
  display: flex;
  align-items: center;
  gap: var(--space-2-5);
}

.logo__mark {
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: var(--color-primary);
  color: var(--color-primary-fg);
  border-radius: var(--radius-md);
  flex-shrink: 0;
}

.logo__mark--sm {
  width: 24px;
  height: 24px;
}

.logo__mark--md {
  width: 28px;
  height: 28px;
}

.logo__mark--lg {
  width: 40px;
  height: 40px;
  border-radius: var(--radius-lg);
}

.logo__text {
  font-weight: var(--font-weight-bold);
  font-size: var(--font-size-base);
  letter-spacing: var(--letter-spacing-tight);
}

.logo__text--lg {
  font-size: var(--font-size-xl);
}

.logo__kanji {
  margin-left: var(--space-1);
  font-weight: var(--font-weight-normal);
  opacity: 0.4;
  font-size: 0.85em;
}

/* ── Toast ───────────────────────────────────────────────── */

.toast-container {
  position: fixed;
  bottom: var(--space-4);
  right: var(--space-4);
  z-index: var(--z-toast);
  display: flex;
  flex-direction: column-reverse;
  gap: var(--space-2);
  max-width: 24rem;
}

.toast {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-box);
  box-shadow: var(--shadow-lg);
  animation: kaze-slide-in-right var(--duration-slower) var(--ease-out);
  font-size: var(--font-size-sm);
}

.toast[data-removing="true"] {
  animation: kaze-slide-out-right var(--duration-normal) var(--ease-in) forwards;
}

.toast__content {
  flex: 1;
  min-width: 0;
}

.toast__title {
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
}

.toast__description {
  color: var(--color-fg-secondary);
  margin-top: var(--space-0-5);
}

.toast__close {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.5rem;
  height: 1.5rem;
  border: none;
  background: transparent;
  color: var(--color-fg-tertiary);
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: background-color var(--duration-fast), color var(--duration-fast);
}

.toast__close:hover {
  background: var(--color-surface-hover);
  color: var(--color-fg);
}

.toast__icon {
  flex-shrink: 0;
  margin-top: 1px;
}

.toast--positive {
  border-left: 3px solid var(--color-positive);
}

.toast--positive .toast__icon {
  color: var(--color-positive);
}

.toast--negative {
  border-left: 3px solid var(--color-negative);
}

.toast--negative .toast__icon {
  color: var(--color-negative);
}

.toast--warning {
  border-left: 3px solid var(--color-warning);
}

.toast--warning .toast__icon {
  color: var(--color-warning);
}

/* ── Dropdown ───────────────────────────────────────────── */

.dropdown__menu {
  position: fixed;
  z-index: var(--z-dropdown);
  min-width: 12rem;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-box);
  box-shadow: var(--shadow-md);
  padding: var(--space-1);
  animation: kaze-slide-down var(--duration-normal) var(--ease-out);
}

.dropdown__menu:focus {
  outline: none;
}

.dropdown__item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-1-5) var(--space-3);
  font-size: var(--font-size-sm);
  border-radius: var(--radius-md);
  cursor: pointer;
  color: var(--color-fg);
  transition: background-color var(--duration-fast);
}

.dropdown__item:hover,
.dropdown__item[data-highlighted="true"] {
  background: var(--color-surface-hover);
}

.dropdown__item[data-disabled="true"] {
  opacity: 0.5;
  pointer-events: none;
}

.dropdown__separator {
  height: 1px;
  background: var(--color-border-subtle);
  margin: var(--space-1) 0;
}

/* ── FilterPill ──────────────────────────────────────────── */
.filter-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1-5);
  padding: var(--space-1) var(--space-3);
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  line-height: 1.5;
  border-radius: var(--radius-full);
  border: 1px solid var(--color-border);
  background-color: var(--color-bg);
  color: var(--color-fg-secondary);
  cursor: pointer;
  -webkit-user-select: none;
  user-select: none;
  white-space: nowrap;
  transition: background-color var(--duration-normal) var(--ease-default),
              border-color var(--duration-normal) var(--ease-default),
              color var(--duration-normal) var(--ease-default);
}

.filter-pill:hover {
  background-color: var(--color-surface-hover);
}

.filter-pill:focus-visible {
  outline: var(--ring-width) solid var(--ring-color);
  outline-offset: var(--ring-offset);
}

.filter-pill--active {
  border-color: var(--filter-pill-color, var(--color-primary));
  background-color: color-mix(in srgb, var(--filter-pill-color, var(--color-primary)) 8%, transparent);
  color: var(--filter-pill-color, var(--color-fg));
}

.filter-pill__dot {
  width: 8px;
  height: 8px;
  border-radius: var(--radius-full);
  background-color: var(--filter-pill-color, currentColor);
  flex-shrink: 0;
}

/* ── Command Palette (additions) ────────────────────────── */

.command-palette__group {
  padding: var(--space-1) var(--space-3);
  font-size: var(--font-size-2xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg-tertiary);
  text-transform: uppercase;
  letter-spacing: var(--letter-spacing-wider);
}

.command-palette__empty {
  padding: var(--space-8) var(--space-4);
  text-align: center;
  font-size: var(--font-size-sm);
  color: var(--color-fg-tertiary);
}

/* ================================================================
   HelpButton
   ================================================================ */

.help-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  padding: 0;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-full);
  background: var(--color-bg);
  color: var(--color-fg-tertiary);
  font-size: 11px;
  font-weight: var(--font-weight-medium);
  line-height: 1;
  cursor: pointer;
  transition: color var(--duration-fast) var(--ease-out),
    border-color var(--duration-fast) var(--ease-out),
    background-color var(--duration-fast) var(--ease-out);
}

.help-button:hover,
.help-button[aria-expanded="true"] {
  color: var(--color-fg);
  border-color: var(--color-border-strong, var(--color-fg-tertiary));
  background: var(--color-bg-subtle, var(--color-bg));
}

.help-button:focus-visible {
  outline: 2px solid var(--color-focus, var(--color-primary));
  outline-offset: 2px;
}

.help-popover {
  position: absolute;
  z-index: 1000;
  background: var(--color-surface, var(--color-bg));
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  padding: var(--space-3) var(--space-4);
  font-size: var(--font-size-sm);
  color: var(--color-fg);
  line-height: var(--line-height-relaxed);
}

.help-popover--sm {
  max-width: 220px;
}

.help-popover--md {
  max-width: 300px;
}

.help-popover--lg {
  max-width: 420px;
}

.help-popover__title {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  color: var(--color-fg);
  margin: 0 0 var(--space-2) 0;
}

.help-popover__body {
  color: var(--color-fg-secondary);
}

.help-popover__body p {
  margin: 0 0 var(--space-2) 0;
}

.help-popover__body p:last-child {
  margin-bottom: 0;
}

/* ================================================================
   Disclosure
   ================================================================ */

.disclosure {
  display: block;
  width: 100%;
}

.disclosure--bordered {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface, var(--color-bg));
}

.disclosure__trigger {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  width: 100%;
  padding: var(--space-2) var(--space-3);
  background: transparent;
  border: 0;
  border-radius: var(--radius-sm);
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-medium);
  color: var(--color-fg);
  transition: background-color var(--duration-fast) var(--ease-out),
    color var(--duration-fast) var(--ease-out);
}

.disclosure--sm .disclosure__trigger {
  padding: var(--space-1) var(--space-2);
  font-size: var(--font-size-sm);
}

.disclosure--lg .disclosure__trigger {
  padding: var(--space-3) var(--space-4);
  font-size: var(--font-size-lg);
}

.disclosure--bordered .disclosure__trigger {
  border-radius: 0;
}

.disclosure__trigger:hover:not(:disabled) {
  background: var(--color-bg-subtle, rgba(0, 0, 0, 0.04));
}

.disclosure__trigger:focus-visible {
  outline: 2px solid var(--color-focus, var(--color-primary));
  outline-offset: -2px;
}

.disclosure__trigger:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

.disclosure--ghost .disclosure__trigger {
  padding-left: 0;
  padding-right: 0;
}

.disclosure--ghost .disclosure__trigger:hover:not(:disabled) {
  background: transparent;
  color: var(--color-fg-secondary);
}

.disclosure__title {
  flex: 1 1 auto;
  min-width: 0;
}

.disclosure__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  color: var(--color-fg-tertiary);
}

.disclosure__icon--end {
  margin-left: auto;
}

.disclosure__icon--rotate .disclosure__icon-svg {
  transition: transform var(--duration-fast) var(--ease-out);
}

.disclosure--open .disclosure__icon--rotate .disclosure__icon-svg {
  transform: rotate(90deg);
}

.disclosure__content {
  padding: 0 var(--space-3) var(--space-3) var(--space-3);
  color: var(--color-fg-secondary);
  font-size: var(--font-size-sm);
  line-height: var(--line-height-relaxed);
}

.disclosure--sm .disclosure__content {
  padding: 0 var(--space-2) var(--space-2) var(--space-2);
}

.disclosure--lg .disclosure__content {
  padding: 0 var(--space-4) var(--space-4) var(--space-4);
}

.disclosure--ghost .disclosure__content {
  padding-left: 0;
  padding-right: 0;
}

.disclosure--bordered .disclosure__content {
  border-top: 1px solid var(--color-border);
  padding-top: var(--space-3);
}

.disclosure__content-inner {
  color: inherit;
}
