@layer components {
  :is(.unit-page, .sheet-page, .upgrade-strip) {
    .sr-only {
      position: absolute;
      inline-size: 1px;
      block-size: 1px;
      overflow: hidden;
      clip-path: inset(50%);
      white-space: nowrap;
    }

    .glyph {
      flex: none;
      inline-size: 14px;
      block-size: 14px;
    }

    .with-glyph {
      gap: var(--space-2);

      .glyph { color: var(--color-text-muted); }
    }

    .unit-hero-glyph {
      inline-size: 3.5rem;
      block-size: 3.5rem;
      margin-block-start: 0.25rem;
      color: var(--color-text-muted);
    }

    .button-wipe, .cta {
      position: relative;
      isolation: isolate;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-block-size: 3rem;
      padding: 0 var(--space-5);
      border-radius: var(--radius-sharp);
      font-family: var(--font-mono);
      font-size: var(--text-xs);
      font-weight: 500;
      line-height: var(--line-height-normal);
      letter-spacing: var(--tracking-caps);
      text-transform: uppercase;
      text-decoration: none;
      white-space: nowrap;
      cursor: pointer;
      scale: none;
    }

    form:has(> .button-wipe, > .cta) { display: contents; }

    .button-wipe {
      overflow: hidden;
      border: 1px solid var(--color-border-strong);
      background: transparent;
      color: var(--color-text);
      transition: border-color var(--duration-wipe) var(--ease-in-out);

      &::before {
        content: "";
        position: absolute;
        inset-block: 0;
        inset-inline-start: 0;
        z-index: -1;
        inline-size: calc(100% + var(--wipe-feather));
        background: linear-gradient(90deg, var(--color-wipe-fill) calc(100% - var(--wipe-feather)), transparent);
        transform: translateX(-100%);
        transition: transform var(--duration-wipe) var(--ease-in-out);
      }

      &:hover, &:focus-visible { border-color: var(--color-wipe-border); background: transparent; }

      &:hover::before, &:focus-visible::before { transform: translateX(0); }
    }

    .cta {
      gap: var(--space-3);
      border: 0;
      background: var(--color-gradient-bottom);
      color: var(--color-on-gradient);
      filter:
        drop-shadow(0 2px 3px color-mix(in oklch, var(--color-accent) 0%, transparent))
        drop-shadow(0 6px 14px color-mix(in oklch, var(--color-accent) 0%, transparent));
      transition: filter var(--duration-wipe) var(--ease-in-out);

      &::before {
        content: "";
        position: absolute;
        inset: 0;
        z-index: -1;
        border-radius: var(--radius-sharp);
        background: var(--logo-gradient);
      }

      &::after {
        content: "";
        position: absolute;
        inset: -0.375rem;
        border: 1.5px solid var(--color-accent);
        pointer-events: none;
        mask:
          linear-gradient(#000 0 0) top left / var(--bracket) var(--bracket) no-repeat,
          linear-gradient(#000 0 0) top right / var(--bracket) var(--bracket) no-repeat,
          linear-gradient(#000 0 0) bottom left / var(--bracket) var(--bracket) no-repeat,
          linear-gradient(#000 0 0) bottom right / var(--bracket) var(--bracket) no-repeat;
        transition: scale var(--duration-wipe) var(--ease-in-out);
      }

      &:hover, &:focus-visible {
        background: var(--color-gradient-bottom);
        filter:
          drop-shadow(0 2px 3px color-mix(in oklch, var(--color-accent) 10%, transparent))
          drop-shadow(0 6px 14px color-mix(in oklch, var(--color-accent) 16%, transparent));
      }

      @media (prefers-reduced-motion: no-preference) {
        &:hover::after, &:focus-visible::after { scale: 1.04 1.13; }
      }
    }

    .panel {
      position: relative;
      border: 1px solid var(--color-border);
      border-radius: var(--radius-sharp);
      background: var(--color-panel);
      color: var(--color-text);
      box-shadow:
        0 1px 2px var(--color-panel-shadow-near),
        0 6px 18px var(--color-panel-shadow-far);
    }

    .section-index {
      display: flex;
      flex-wrap: wrap;
      align-items: baseline;
      gap: var(--space-2) var(--space-4);
      font-family: var(--font-section);
      font-size: var(--text-section);
      font-weight: 400;
      letter-spacing: 0.04em;
      text-transform: uppercase;
      color: var(--color-text-muted);

      h2 { margin: 0; font: inherit; }

      .index-number { color: var(--color-accent); }

      .index-rule {
        flex: 1;
        align-self: center;
        min-inline-size: var(--space-6);
        block-size: 1px;
        background: var(--color-border);
      }

      .index-end {
        font-family: var(--font-body);
        letter-spacing: 0;
        text-transform: none;
      }
    }

    @media (max-width: 32rem) {
      .unit-hero-glyph { inline-size: 2.5rem; block-size: 2.5rem; margin: 0; }
    }
  }

  .upgrade-strip {
    position: relative;
    display: grid;
    gap: var(--space-4);
    padding: var(--space-5) var(--space-6);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sharp);
    background: color-mix(in oklch, var(--color-accent) 7%, var(--color-panel));
    color: var(--color-text);
    box-shadow:
      0 1px 2px var(--color-panel-shadow-near),
      0 6px 18px var(--color-panel-shadow-far);

    &::before {
      content: "";
      position: absolute;
      inset: -1px -1px auto;
      block-size: 2px;
      border-radius: var(--radius-sharp) var(--radius-sharp) 0 0;
      background: var(--logo-gradient-rule);
    }

    .upgrade-copy { display: grid; gap: var(--space-2); }

    .card-title {
      margin: 0;
      font-size: var(--text-xl);
      font-weight: 300;
      letter-spacing: -0.01em;
      line-height: var(--line-height-tight);
    }

    .upgrade-meta {
      display: flex;
      flex-wrap: wrap;
      gap: var(--space-1) var(--space-4);
      font-size: var(--text-sm);
      color: var(--color-text-muted);
    }

    .plan-form { display: grid; gap: var(--space-4); }

    .cta { max-inline-size: 100%; white-space: normal; text-align: center; }

    @media (min-width: 75rem) {
      grid-template-columns: 1fr auto auto;
      align-items: center;
      gap: var(--space-6);

      .card-title { white-space: nowrap; }

      .plan-form { display: contents; }
    }

    @media (max-width: 32rem) {
      padding: var(--space-5);

      .cta { inline-size: 100%; }
    }
  }

  .curriculum {
    display: grid;
    grid-template-columns: clamp(12rem, 25%, 16rem) minmax(0, 1fr);
    gap: var(--space-6);
    align-items: start;
  }

  .unit-rail {
    display: grid;
    gap: var(--space-1);
    min-inline-size: 0;

    .rail-title {
      margin: 0;
      font-family: var(--font-section);
      font-size: var(--text-section);
      font-weight: 400;
      letter-spacing: 0.04em;
      text-transform: uppercase;
    }

    p { text-wrap: balance; }

    .rail-list {
      margin-block-start: var(--space-4);
      padding: 0;
      list-style: none;
      border-block-start: 1px solid var(--color-border);

      li { border-block-end: 1px solid var(--color-border); }
    }

    .rail-unit {
      display: grid;
      grid-template-columns: 2.25rem minmax(0, 1fr) auto;
      align-items: baseline;
      gap: var(--space-2) var(--space-3);
      padding: var(--space-3);
      color: var(--color-text);
      text-decoration: none;
      transition: background-color var(--duration-fill) var(--ease-out);

      &:hover { background: var(--color-hover-wash); }

      &:focus-visible { outline-offset: -2px; }

      &[aria-current="page"] {
        background: var(--color-panel);
        box-shadow: inset 2px 0 0 var(--color-accent);

        .rail-name { font-weight: 500; }
      }
    }

    .rail-code { white-space: nowrap; }

    .rail-name {
      font-size: var(--text-sm);
      line-height: var(--line-height-tight);
    }

    .rail-mastery {
      font-family: var(--font-mono);
      font-size: var(--text-xs);
      font-variant-numeric: tabular-nums;

      &[data-status="to_do"] { color: var(--color-text-muted); }

      &[data-status="mastered"] { color: var(--color-accent-text); }
    }

    .mastery-bar {
      grid-column: 2 / -1;
      block-size: 2px;
      background: var(--color-border);

      span {
        display: block;
        block-size: 100%;
        inline-size: calc(var(--value) * 1%);
        background: var(--color-accent);
      }
    }
  }

  .unit-page {
    display: grid;
    gap: var(--space-8);
    container: unit-pane / inline-size;
  }

  @media (max-width: 32rem) {
    .unit-page { gap: var(--space-6); }

    .curriculum { grid-template-columns: minmax(0, 1fr); }

    .curriculum[data-phone-shows="rail"] > .unit-page, .curriculum[data-phone-shows="unit"] > .unit-rail { display: none; }

    .unit-rail {
      .rail-name { font-size: var(--text-base); }

      .rail-unit {
        grid-template-columns: 2.25rem minmax(0, 1fr) auto auto;
        align-content: center;
        min-block-size: 4rem;

        &::after {
          content: "→" / "";
          grid-column: 4;
          grid-row: 1 / span 2;
          align-self: center;
          color: var(--color-text-muted);
        }
      }

      .mastery-bar { grid-column: 2 / 4; }
    }
  }

  :where(.unit-page) {
    .crumb {
      display: inline-flex;
      gap: var(--space-2);
      text-decoration: none;

      &:hover { color: var(--color-text); }
    }

    .unit-crumb { display: none; }

    .unit-figures {
      display: flex;
      flex-wrap: wrap;
      gap: var(--space-3) var(--space-5);

      div {
        display: flex;
        flex-direction: column-reverse;
        gap: var(--space-1);
      }

      dd {
        margin: 0;
        font-size: var(--text-xl);
        line-height: var(--line-height-tight);
        font-variant-numeric: tabular-nums;
      }
    }

    .unit-top, .unit-head {
      display: grid;
      gap: var(--space-5);
      align-items: start;
    }

    .unit-identity {
      display: grid;
      grid-template-columns: auto minmax(0, 1fr);
      gap: var(--space-3) var(--space-5);
      align-content: start;
      min-inline-size: 0;
    }

    .unit-heading {
      display: grid;
      gap: var(--space-4);
      min-inline-size: 0;
    }

    .unit-title {
      margin: 0;
      font-size: var(--text-3xl);
      font-weight: 300;
      letter-spacing: -0.02em;
      line-height: var(--line-height-tight);
    }

    .unit-title-code { color: var(--color-text-muted); }

    .unit-description {
      max-inline-size: 34em;
      font-size: var(--text-lg);
      color: var(--color-text-muted);
    }

    .unit-actions {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      gap: var(--space-3);
      padding-block-start: var(--space-2);
    }

    .unit-metric {
      display: grid;
      gap: var(--space-2);
      padding: var(--space-5);

      .meter { margin-block-start: var(--space-6); }
    }

    .unit-metric-head {
      max-inline-size: none;
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      justify-content: space-between;
      gap: var(--space-2) var(--space-3);
    }

    .status {
      display: inline-flex;
      align-items: center;
      gap: var(--space-2);
      white-space: nowrap;

      &::before {
        content: "";
        flex: none;
        inline-size: 0.5rem;
        block-size: 0.5rem;
        border: 1.5px solid var(--color-text-subtle);
      }

      &[data-status="doing"]::before {
        border-color: var(--color-accent);
        background: linear-gradient(90deg, var(--color-accent) 50%, transparent 50%);
      }

      &[data-status="mastered"]::before {
        border-color: var(--color-accent);
        background: var(--color-accent);
      }
    }

    .figure {
      display: inline-flex;
      align-items: baseline;
      margin-block-start: var(--space-2);
      font-family: var(--font-display);
      font-size: var(--text-5xl);
      font-weight: 300;
      line-height: 1;
      letter-spacing: -0.03em;
    }

    .figure-unit { font-size: 0.5em; margin-inline-start: 0.04em; color: var(--color-text-muted); }

    .unit-metric-empty {
      margin-block-start: var(--space-2);
      font-family: var(--font-display);
      font-size: var(--text-3xl);
      font-weight: 300;
      letter-spacing: -0.02em;
      line-height: 1;
      color: var(--color-text-muted);
    }

    .meter {
      position: relative;
      display: block;
      block-size: 6px;
      background: var(--color-accent-soft);
    }

    .meter-fill {
      position: absolute;
      inset: 0;
      background: var(--color-accent);
      transform: scaleX(var(--value));
      transform-origin: left;
    }

    .meter-mark {
      position: absolute;
      inset-block: -6px;
      inset-inline-start: calc(80% - 1px);
      inline-size: 2px;

      &::before {
        content: "";
        position: absolute;
        inset: 0;
        background: var(--color-text);
      }

      span {
        position: absolute;
        inset-block-end: calc(100% + var(--space-2));
        inset-inline-end: 0;
        white-space: nowrap;
        color: var(--color-text);
      }
    }

    .meter-scale {
      display: flex;
      justify-content: space-between;
    }

    .score-support {
      display: flex;
      flex-wrap: wrap;
      gap: var(--space-1) var(--space-5);
      font-size: var(--text-sm);
      color: var(--color-text-muted);

      strong { color: var(--color-text); font-weight: 500; }
    }

    @container unit-pane (width >= 46rem) {
      .unit-head.has-metric { grid-template-columns: minmax(0, 1fr) 18rem; gap: var(--space-6); }
    }

    .chapters {
      display: grid;
      gap: var(--space-4);
    }

    .chapter-body {
      --listen-width: 12rem;
      --quiz-width: 14.5rem;
      container: chapters / inline-size;
    }

    .chapter-number { color: var(--color-text-muted); }

    .chapter-title {
      font-size: var(--text-base);
      font-weight: 400;
      letter-spacing: -0.005em;
      line-height: var(--line-height-tight);
    }

    .chapter-meta {
      display: flex;
      flex-wrap: wrap;
      gap: var(--space-1) var(--space-4);
      margin-block-start: var(--space-1);
      font-size: var(--text-sm);
      color: var(--color-text-muted);
    }

    .chapter-progress {
      display: grid;
      grid-template-columns: auto minmax(0, 1fr);
      align-items: center;
      gap: var(--space-2) var(--space-3);

      .mastery-bar { grid-column: 1 / -1; }
    }

    .mastery-bar {
      display: block;
      block-size: 2px;
      background: var(--color-border);

      span {
        display: block;
        block-size: 100%;
        inline-size: calc(var(--value) * 1%);
        background: var(--color-accent);
      }
    }

    .mastery-value {
      font-size: var(--text-base);
      font-variant-numeric: tabular-nums;

      &.is-empty { color: var(--color-text-muted); }
    }

    .podcast-action { display: grid; }

    .podcast-note {
      display: flex;
      align-items: center;
      min-block-size: 3rem;
      font-size: var(--text-sm);
      color: var(--color-text-muted);
      white-space: nowrap;
    }

    .locked-note {
      display: flex;
      align-items: center;
      gap: var(--space-2);
      min-block-size: 3rem;
      font-size: var(--text-sm);
      color: var(--color-text-muted);

      .glyph { color: var(--color-text-subtle); }
    }

    .lock-key {
      display: inline-flex;
      align-items: center;
      gap: var(--space-2);
      white-space: nowrap;
    }

    .quiz-action {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
      gap: var(--space-3);

      &:has(.restart-button) { grid-template-columns: minmax(0, 1fr) 3rem; }

      :is(.cta, .button-wipe) { min-inline-size: min-content; }
    }

    .quiz-action .restart-button { inline-size: 3rem; padding: 0; }

    .quiz-note {
      display: flex;
      align-items: center;
      min-block-size: 3rem;
      font-size: var(--text-sm);
      color: var(--color-text-muted);
    }

    .chapter-table {
      inline-size: 100%;
      border-collapse: collapse;
      font-size: var(--text-sm);

      .is-num { text-align: end; font-variant-numeric: tabular-nums; white-space: nowrap; }

      .is-empty { color: var(--color-text-muted); }

      .ch-cell { white-space: nowrap; }
    }

    @container chapters (width >= 53rem) {
      .chapter-table {
        th, td {
          padding: var(--space-3);
          border-block-end: 1px solid var(--color-border);
          text-align: start;
          vertical-align: middle;
        }

        :is(th, td):first-child { padding-inline-start: var(--space-5); }

        :is(th, td):last-child { padding-inline-end: var(--space-5); }

        .is-num { text-align: end; }

        tbody tr:last-child td { border-block-end: 0; }

        thead th {
          padding-block: var(--space-4) var(--space-3);
          font-weight: 400;
          white-space: nowrap;
        }

        .chapter-cell { min-inline-size: 10rem; }

        .mastery-cell { min-inline-size: 7rem; }

        .podcast-action { inline-size: var(--listen-width); }

        .quiz-action { inline-size: var(--quiz-width); }
      }
    }

    @container chapters (width >= 68rem) {
      .chapter-table .chapter-meta { display: none; }
    }

    @container chapters (width < 68rem) {
      .chapter-table .is-num { display: none; }
    }

    @container chapters (width < 53rem) {
      .chapter-table, .chapter-table tbody { display: block; }

      .chapter-table thead { display: none; }

      .chapter-table tr {
        display: grid;
        grid-template-columns: minmax(0, 1fr);
        gap: var(--space-2) var(--space-3);
        padding: var(--space-4);
        border-block-end: 1px solid var(--color-border);

        &:last-child { border-block-end: 0; }
      }

      .chapter-table td { padding: 0; }

      .chapter-table .mastery-cell { padding-block: var(--space-2); }

      .chapter-table .podcast-cell { order: 2; }

      .chapter-table .quiz-cell { order: 1; padding-block-start: var(--space-2); }

      .chapter-table .podcast-cell:not(:has(.listen, .podcast-note)) { display: none; }

      .chapter-table .quiz-cell:has(.locked-note) { order: 3; }
    }

    @container chapters (31rem <= width < 53rem) {
      .chapter-table tr { grid-template-columns: repeat(2, minmax(0, 1fr)); }

      .chapter-table td:not(.podcast-cell, .quiz-cell) { grid-column: 1 / -1; }

      .chapter-table .podcast-cell { order: 1; padding-block-start: var(--space-2); }

      .chapter-table .quiz-cell { order: 2; }

      .chapter-table tr:has(.podcast-cell:not(:has(.listen, .podcast-note))) .quiz-cell { grid-column: 1 / -1; }
    }

    @media (max-width: 32rem) {
      .unit-identity { grid-template-columns: minmax(0, 1fr); }

      .unit-crumb { display: block; }

      .unit-title { font-size: var(--text-2xl); }

      .unit-description { font-size: var(--text-base); }

      .unit-actions > :is(.button-wipe, .cta), .unit-actions form > :is(.button-wipe, .cta) { inline-size: 100%; }
    }
  }
}
