/* ==========================================================================
   Brightline Learning — family app concept
   Used only by /concepts/tutoring/app/. Same palette, type and voice as
   /assets/css/tutoring-demo.css, shaped for a phone.

   The accent colour swings from teal (parent) to plum (student) via
   --bla-accent, which every accented rule reads. Both were contrast-audited.
   ========================================================================== */

@font-face {
  font-family: "Inter";
  src: url("/assets/fonts/inter-var.woff2") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}

@font-face {
  font-family: "Fraunces";
  src: url("/assets/fonts/fraunces-var.woff2") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}

:root {
  --bla-ink: #17233f;
  --bla-ink-soft: #333f66;
  --bla-muted: #565f7b;
  --bla-paper: #f0ece2;
  --bla-card: #fffdf8;
  --bla-teal: #0e6054;
  --bla-teal-deep: #0a4941;
  --bla-teal-soft: #dceae5;
  --bla-plum: #6b3a75;
  --bla-plum-deep: #542c5c;
  --bla-plum-soft: #efe0f1;
  --bla-marigold: #d9962a;
  --bla-marigold-ink: #7a5310;
  --bla-marigold-soft: #faeacd;
  --bla-rose: #a5382c;
  --bla-rose-soft: #fbe2dd;
  --bla-on-dark: #e7e3d8;
  --bla-muted-dark: #a9b0c4;
  --bla-teal-dark: #8fd8c5;
  --bla-gold-dark: #f0bf6a;
  --bla-line: rgba(23, 35, 63, 0.14);
  --bla-line-strong: rgba(23, 35, 63, 0.3);
  --bla-shadow: 0 30px 90px rgba(9, 14, 28, 0.32);

  --bla-accent: var(--bla-teal);
  --bla-accent-deep: var(--bla-teal-deep);
  --bla-accent-soft: var(--bla-teal-soft);

  --bla-body: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
  --bla-level: "Fraunces", Georgia, "Times New Roman", serif;
}

body[data-view="student"] {
  --bla-accent: var(--bla-plum);
  --bla-accent-deep: var(--bla-plum-deep);
  --bla-accent-soft: var(--bla-plum-soft);
}

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
}

body {
  min-width: 20rem;
  min-height: 100svh;
  background: #0f1526;
  color: var(--bla-ink);
  font-family: var(--bla-body);
  font-size: 16px;
  line-height: 1.45;
  -webkit-font-smoothing: antialiased;
}

body:has(dialog[open]) {
  overflow: hidden;
}

button,
input,
select,
textarea {
  color: inherit;
  font: inherit;
}

button {
  border: 0;
  background: none;
  cursor: pointer;
}

a {
  color: inherit;
  text-decoration: none;
}

img {
  display: block;
  max-width: 100%;
}

[hidden] {
  display: none !important;
}

h1,
h2,
h3,
h4 {
  font-weight: 680;
  letter-spacing: -0.035em;
  line-height: 1.1;
}

:focus-visible {
  outline: 3px solid var(--bla-accent);
  outline-offset: 2px;
  border-radius: 0.3rem;
}

.bla-sprite {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
}

.bla-icon {
  width: 1.05rem;
  height: 1.05rem;
  flex: 0 0 auto;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

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

.bla-skip {
  position: fixed;
  top: 0.6rem;
  left: 0.6rem;
  z-index: 300;
  padding: 0.75rem 1.1rem;
  border-radius: 999px;
  background: var(--bla-gold-dark);
  color: var(--bla-ink);
  font-size: 0.85rem;
  font-weight: 700;
  transform: translateY(-240%);
  transition: transform 160ms ease;
}

.bla-skip:focus {
  transform: translateY(0);
}

/* --------------------------------------------------------------- layout -- */

.bla-stage {
  min-height: 100svh;
  display: grid;
  grid-template-columns: minmax(22rem, 0.85fr) minmax(28rem, 1.15fr);
}

.bla-pitch {
  min-height: 100svh;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: clamp(1.8rem, 4.5vw, 4.4rem);
  background: var(--bla-ink);
  color: #fff;
}

.bla-back {
  width: fit-content;
  min-height: 2.75rem;
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  color: var(--bla-muted-dark);
  font-size: 0.8rem;
  font-weight: 640;
}

.bla-back:hover {
  color: #fff;
}

.bla-kicker {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  color: var(--bla-accent);
  font-size: 0.68rem;
  font-weight: 780;
  letter-spacing: 0.11em;
  text-transform: uppercase;
}

.bla-kicker::before {
  width: 1.1rem;
  height: 2px;
  flex: 0 0 auto;
  border-radius: 2px;
  background: currentColor;
  content: "";
}

.bla-pitch .bla-kicker {
  color: var(--bla-gold-dark);
}

.bla-pitch__copy {
  max-width: 34rem;
  margin-block: clamp(1.6rem, 4vw, 3.4rem);
}

.bla-pitch h1 {
  margin-top: 1rem;
  font-size: clamp(2.1rem, 3vw, 3.1rem);
  letter-spacing: -0.045em;
  line-height: 1.03;
}

.bla-pitch__copy > p {
  margin-top: 1.1rem;
  color: var(--bla-on-dark);
  font-size: 0.95rem;
  line-height: 1.6;
}

.bla-pitch ul {
  display: grid;
  gap: 0.65rem;
  margin-top: 1.6rem;
  padding: 0;
  list-style: none;
  color: var(--bla-on-dark);
  font-size: 0.88rem;
}

.bla-pitch li {
  display: flex;
  align-items: start;
  gap: 0.6rem;
}

.bla-pitch li .bla-icon {
  margin-top: 0.22rem;
  color: var(--bla-teal-dark);
}

.bla-pitch__actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 0.85rem;
}

.bla-pitch__actions a {
  min-height: 2.75rem;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.6rem 1rem;
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: 999px;
  color: var(--bla-teal-dark);
  font-size: 0.85rem;
  font-weight: 640;
}

.bla-pitch__actions a:hover {
  border-color: var(--bla-teal-dark);
  background: rgba(255, 255, 255, 0.07);
}

.bla-pitch__actions p {
  color: var(--bla-muted-dark);
  font-size: 0.75rem;
}

.bla-pitch :focus-visible {
  outline-color: var(--bla-gold-dark);
}

/* --------------------------------------------------------------- device -- */

.bla-device-wrap {
  min-width: 0;
  min-height: 100svh;
  display: grid;
  place-items: center;
  padding: clamp(1.5rem, 4vw, 4rem);
  background: radial-gradient(circle at 50% 25%, #fbf8f0, #ddd8ca 78%);
}

.bla-device {
  position: relative;
  width: min(100%, 26.5rem);
  height: min(54rem, calc(100svh - 3rem));
  min-height: 42rem;
  overflow: hidden;
  border: 0.5rem solid #0d1424;
  border-radius: 3rem;
  background: var(--bla-paper);
  box-shadow: var(--bla-shadow);
}

.bla-device__sensor {
  position: absolute;
  top: 0.5rem;
  left: 50%;
  z-index: 20;
  width: 5.6rem;
  height: 1.3rem;
  border-radius: 999px;
  background: #0d1424;
  transform: translateX(-50%);
}

.bla-statusbar {
  height: 2.5rem;
  display: flex;
  align-items: end;
  justify-content: space-between;
  padding: 0.7rem 1.3rem 0.2rem;
  font-size: 0.68rem;
  font-weight: 760;
}

.bla-statusbar__right {
  display: flex;
  gap: 0.22rem;
  align-items: center;
}

.bla-statusbar__right i {
  width: 0.42rem;
  height: 0.42rem;
  border-radius: 1px;
  background: var(--bla-ink);
}

.bla-statusbar__right i:nth-child(2) {
  height: 0.62rem;
}

.bla-statusbar__right i:nth-child(3) {
  width: 0.85rem;
  height: 0.45rem;
  border-radius: 2px;
}

.bla-header {
  height: 3.4rem;
  display: grid;
  grid-template-columns: 2.6rem 1fr 2.6rem;
  gap: 0.5rem;
  align-items: center;
  padding: 0 0.85rem;
}

.bla-avatar,
.bla-header-action {
  position: relative;
  width: 2.6rem;
  height: 2.6rem;
  display: grid;
  place-items: center;
  border: 1px solid var(--bla-line);
  border-radius: 50%;
  background: var(--bla-card);
  font-size: 0.74rem;
  font-weight: 800;
}

.bla-header-action b {
  position: absolute;
  top: -0.15rem;
  right: -0.15rem;
  min-width: 1.05rem;
  height: 1.05rem;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--bla-rose);
  color: #fff;
  font-size: 0.6rem;
  font-weight: 760;
}

.bla-brandline {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  font-size: 0.82rem;
  letter-spacing: -0.02em;
}

.bla-brandmark {
  width: 1.5rem;
  height: 1.5rem;
  display: grid;
  place-items: center;
  border-radius: 0.42rem 0.42rem 0.42rem 0.14rem;
  background: var(--bla-accent);
  color: #fff;
}

.bla-brandmark svg {
  width: 0.95rem;
  height: 0.95rem;
  fill: none;
  stroke: currentColor;
  stroke-width: 2.4;
  stroke-linecap: round;
}

.bla-demo-banner {
  min-height: 1.6rem;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  padding: 0.25rem 0.5rem;
  background: var(--bla-ink);
  color: var(--bla-on-dark);
  font-size: 0.62rem;
  font-weight: 620;
  text-align: center;
}

.bla-demo-banner span {
  width: 0.36rem;
  height: 0.36rem;
  flex: 0 0 auto;
  border-radius: 50%;
  background: var(--bla-gold-dark);
}

.bla-roleswitch {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.35rem;
  padding: 0.4rem 0.85rem 0.5rem;
  border-bottom: 1px solid var(--bla-line);
  background: var(--bla-paper);
}

.bla-roleswitch button {
  min-height: 2.9rem;
  display: grid;
  align-content: center;
  gap: 0.05rem;
  padding: 0.4rem 0.6rem;
  border: 1px solid var(--bla-line-strong);
  border-radius: 0.7rem;
  background: var(--bla-card);
  text-align: left;
  transition: background 140ms ease, border-color 140ms ease;
}

.bla-roleswitch small {
  color: var(--bla-muted);
  font-size: 0.62rem;
  font-weight: 680;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.bla-roleswitch strong {
  font-size: 0.86rem;
  font-weight: 700;
}

.bla-roleswitch button.is-active {
  border-color: var(--bla-accent);
  background: var(--bla-accent);
}

.bla-roleswitch button.is-active small {
  color: rgba(255, 255, 255, 0.78);
}

.bla-roleswitch button.is-active strong {
  color: #fff;
}

.bla-screen {
  position: absolute;
  top: 11rem;
  right: 0;
  bottom: 4.6rem;
  left: 0;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding-bottom: 1rem;
  scrollbar-width: none;
}

.bla-screen::-webkit-scrollbar {
  display: none;
}

.bla-tabbar {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 10;
  height: 4.6rem;
  display: grid;
  gap: 0.2rem;
  padding: 0.4rem 0.4rem 0.55rem;
  border-top: 1px solid var(--bla-line);
  background: color-mix(in srgb, var(--bla-card) 93%, transparent);
  backdrop-filter: blur(16px);
}

.bla-tabbar button {
  position: relative;
  min-height: 3.3rem;
  display: grid;
  place-items: center;
  align-content: center;
  gap: 0.18rem;
  border-radius: 0.7rem;
  color: var(--bla-muted);
}

.bla-tabbar button span {
  font-size: 0.62rem;
  font-weight: 680;
}

.bla-tabbar button .bla-icon {
  width: 1.25rem;
  height: 1.25rem;
}

.bla-tabbar button.is-active {
  background: var(--bla-accent-soft);
  color: var(--bla-accent-deep);
}

.bla-tabbar b {
  position: absolute;
  top: 0.25rem;
  right: 0.75rem;
  min-width: 1rem;
  height: 1rem;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--bla-rose);
  color: #fff;
  font-size: 0.58rem;
  font-weight: 760;
}

/* -------------------------------------------------------------- screens -- */

.bla-greeting {
  padding: 1rem 1rem 0.4rem;
}

.bla-greeting p {
  color: var(--bla-muted);
  font-size: 0.76rem;
}

.bla-greeting h2 {
  margin-top: 0.2rem;
  font-size: 1.65rem;
  letter-spacing: -0.045em;
}

body[data-view="student"] .bla-greeting h2 {
  font-size: 1.95rem;
}

.bla-section-title {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 0.8rem;
  margin: 1.2rem 1rem 0.55rem;
}

.bla-section-title small {
  display: block;
  color: var(--bla-accent);
  font-size: 0.62rem;
  font-weight: 780;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.bla-section-title h3 {
  margin-top: 0.15rem;
  font-size: 1.02rem;
}

.bla-section-title button {
  min-height: 2.75rem;
  padding-inline: 0.4rem;
  color: var(--bla-accent);
  font-size: 0.74rem;
  font-weight: 700;
}

.bla-card {
  margin: 0 1rem 0.6rem;
  padding: 0.95rem 1rem;
  border: 1px solid var(--bla-line);
  border-radius: 1rem;
  background: var(--bla-card);
}

.bla-card__kicker {
  color: var(--bla-accent);
  font-size: 0.64rem;
  font-weight: 780;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.bla-card h3 {
  margin-top: 0.3rem;
  font-size: 1.05rem;
}

.bla-card__body {
  margin-top: 0.35rem;
  color: var(--bla-muted);
  font-size: 0.8rem;
}

.bla-card--dark {
  border-color: transparent;
  background: var(--bla-ink);
  color: var(--bla-on-dark);
}

.bla-card--dark h3 {
  color: #fff;
}

.bla-card--dark .bla-card__kicker {
  color: var(--bla-gold-dark);
}

.bla-card--dark .bla-card__body {
  color: var(--bla-muted-dark);
}

.bla-card--accent {
  border-color: var(--bla-accent);
  background: var(--bla-accent-soft);
}

.bla-card--accent .bla-card__body {
  color: var(--bla-ink-soft);
}

.bla-noscript {
  margin: 0.6rem 1rem;
  padding: 0.8rem 0.9rem;
  border: 1px dashed var(--bla-line-strong);
  border-radius: 0.8rem;
  color: var(--bla-muted);
  font-size: 0.76rem;
}

.bla-chips {
  display: flex;
  gap: 0.4rem;
  overflow-x: auto;
  padding: 0.2rem 1rem 0.6rem;
  scrollbar-width: none;
}

.bla-chips::-webkit-scrollbar {
  display: none;
}

.bla-chip {
  min-height: 2.75rem;
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  flex: 0 0 auto;
  padding: 0.5rem 0.85rem;
  border: 1px solid var(--bla-line-strong);
  border-radius: 999px;
  background: var(--bla-card);
  font-size: 0.8rem;
  font-weight: 620;
}

.bla-chip small {
  color: var(--bla-muted);
  font-size: 0.7rem;
}

.bla-chip.is-active {
  border-color: var(--bla-accent);
  background: var(--bla-accent);
  color: #fff;
}

.bla-chip.is-active small {
  color: rgba(255, 255, 255, 0.8);
}

.bla-primary,
.bla-secondary {
  width: 100%;
  min-height: 2.9rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding: 0.7rem 1rem;
  border-radius: 999px;
  font-size: 0.9rem;
  font-weight: 660;
  text-align: center;
}

.bla-primary {
  background: var(--bla-accent);
  color: #fff;
}

.bla-primary:hover {
  background: var(--bla-accent-deep);
}

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

.bla-secondary {
  margin-top: 0.6rem;
  border: 1px solid var(--bla-line-strong);
  background: var(--bla-card);
  color: var(--bla-ink);
}

.bla-secondary:hover {
  border-color: var(--bla-accent);
  color: var(--bla-accent-deep);
}

.bla-actions {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.5rem;
  padding: 0 1rem;
}

.bla-actions button {
  min-height: 4.4rem;
  display: grid;
  place-items: center;
  align-content: center;
  gap: 0.35rem;
  padding: 0.6rem 0.4rem;
  border: 1px solid var(--bla-line);
  border-radius: 0.9rem;
  background: var(--bla-card);
  font-size: 0.74rem;
  font-weight: 660;
  text-align: center;
}

.bla-actions .bla-icon {
  width: 1.25rem;
  height: 1.25rem;
  color: var(--bla-accent);
}

.bla-list {
  display: grid;
  gap: 0.45rem;
  padding: 0 1rem;
  list-style: none;
  margin: 0;
}

.bla-row {
  width: 100%;
  display: grid;
  grid-template-columns: 2.4rem minmax(0, 1fr) auto;
  gap: 0.7rem;
  align-items: center;
  min-height: 3.4rem;
  padding: 0.7rem 0.85rem;
  border: 1px solid var(--bla-line);
  border-radius: 0.9rem;
  background: var(--bla-card);
  text-align: left;
}

.bla-row > * {
  min-width: 0;
}

/* Specificity note: `.bla-row span > span` only ever matches the muted
   second line, so the mark and the end column keep their own colours. */
.bla-row strong {
  display: block;
  color: var(--bla-ink);
  font-size: 0.84rem;
  font-weight: 660;
}

.bla-row span > span {
  display: block;
  color: var(--bla-muted);
  font-size: 0.74rem;
}

.bla-row .bla-row__mark {
  width: 2.4rem;
  height: 2.4rem;
  display: grid;
  place-items: center;
  border-radius: 0.65rem;
  background: var(--bla-accent-soft);
  color: var(--bla-accent-deep);
  font-family: var(--bla-level);
  font-size: 0.95rem;
  font-weight: 620;
}

.bla-row .bla-row__mark--gold {
  background: var(--bla-marigold-soft);
  color: var(--bla-marigold-ink);
}

.bla-row .bla-row__mark--rose {
  background: var(--bla-rose-soft);
  color: var(--bla-rose);
}

.bla-row .bla-row__end {
  color: var(--bla-accent-deep);
  font-size: 0.78rem;
  font-weight: 700;
  text-align: right;
  white-space: nowrap;
}

.bla-row .bla-row__end--pos {
  color: var(--bla-teal);
}

.bla-row .bla-row__end--neg {
  color: var(--bla-rose);
}

.bla-row:disabled .bla-row__end,
.bla-row[disabled] .bla-row__end {
  color: var(--bla-muted);
}

.bla-row[disabled] {
  opacity: 0.72;
  cursor: not-allowed;
}

.bla-stats {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.5rem;
  padding: 0 1rem;
}

.bla-stat {
  padding: 0.75rem 0.8rem;
  border: 1px solid var(--bla-line);
  border-radius: 0.9rem;
  background: var(--bla-card);
}

.bla-stat strong {
  display: block;
  font-family: var(--bla-level);
  font-size: 1.5rem;
  font-weight: 620;
  letter-spacing: -0.03em;
  color: var(--bla-accent-deep);
}

.bla-stat span {
  display: block;
  margin-top: 0.1rem;
  color: var(--bla-muted);
  font-size: 0.7rem;
  line-height: 1.25;
}

.bla-meter {
  height: 0.6rem;
  overflow: hidden;
  border-radius: 999px;
  background: rgba(23, 35, 63, 0.12);
}

.bla-meter span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--bla-accent);
}

.bla-card--dark .bla-meter {
  background: rgba(255, 255, 255, 0.2);
}

.bla-card--dark .bla-meter span {
  background: var(--bla-gold-dark);
}

/* ladder inside the app */

.bla-ladder {
  display: grid;
  margin: 0 1rem;
  overflow: hidden;
  border: 1px solid var(--bla-line);
  border-radius: 0.9rem;
  list-style: none;
  padding: 0;
}

.bla-rung {
  position: relative;
  display: grid;
  grid-template-columns: 2.3rem minmax(0, 1fr) auto;
  gap: 0.65rem;
  align-items: center;
  padding: 0.6rem 0.75rem;
  border-bottom: 1px solid var(--bla-line);
  background: var(--bla-card);
}

.bla-rung:last-child {
  border-bottom: 0;
}

.bla-rung__code {
  height: 2.1rem;
  display: grid;
  place-items: center;
  border-radius: 0.5rem;
  background: rgba(23, 35, 63, 0.07);
  font-family: var(--bla-level);
  font-size: 0.95rem;
  font-weight: 620;
}

.bla-rung strong {
  display: block;
  font-size: 0.8rem;
  font-weight: 620;
}

.bla-rung small {
  display: block;
  color: var(--bla-muted);
  font-size: 0.68rem;
}

.bla-rung__tag {
  padding: 0.22rem 0.5rem;
  border-radius: 999px;
  background: var(--bla-accent);
  color: #fff;
  font-size: 0.6rem;
  font-weight: 760;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  white-space: nowrap;
}

.bla-rung--done {
  background: var(--bla-paper);
}

.bla-rung--done strong {
  color: var(--bla-muted);
  font-weight: 540;
}

.bla-rung--now {
  background: var(--bla-accent-soft);
}

.bla-rung--now::before {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 4px;
  background: var(--bla-accent);
  content: "";
}

.bla-rung--now .bla-rung__code {
  background: var(--bla-accent);
  color: #fff;
}

.bla-rung--next .bla-rung__code {
  background: var(--bla-marigold-soft);
  color: var(--bla-marigold-ink);
}

.bla-rung--next .bla-rung__tag {
  background: var(--bla-marigold-soft);
  color: var(--bla-marigold-ink);
}

/* attendance grid */

.bla-attend {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0.4rem;
  padding: 0 1rem;
  list-style: none;
  margin: 0;
}

.bla-attend li {
  padding: 0.55rem 0.4rem;
  border: 1px solid var(--bla-line);
  border-radius: 0.65rem;
  background: var(--bla-card);
  text-align: center;
}

.bla-attend b {
  display: block;
  font-size: 0.7rem;
  font-weight: 700;
}

.bla-attend span {
  display: block;
  margin-top: 0.2rem;
  font-size: 0.62rem;
}

.bla-attend .is-present {
  border-color: var(--bla-teal);
  background: var(--bla-teal-soft);
  color: var(--bla-teal-deep);
}

.bla-attend .is-missed {
  border-color: var(--bla-rose);
  background: var(--bla-rose-soft);
  color: var(--bla-rose);
}

.bla-attend .is-makeup {
  border-color: var(--bla-marigold-ink);
  background: var(--bla-marigold-soft);
  color: var(--bla-marigold-ink);
}

.bla-attend .is-upcoming {
  border-style: dashed;
  color: var(--bla-muted);
}

/* streak strip */

.bla-streak {
  display: flex;
  gap: 0.35rem;
  padding: 0 1rem;
  list-style: none;
  margin: 0;
}

.bla-streak li {
  flex: 1 1 0;
  display: grid;
  gap: 0.25rem;
  justify-items: center;
  padding: 0.5rem 0.2rem;
  border: 1px solid var(--bla-line);
  border-radius: 0.6rem;
  background: var(--bla-card);
  font-size: 0.62rem;
  color: var(--bla-muted);
}

.bla-streak i {
  width: 1.1rem;
  height: 1.1rem;
  display: block;
  border-radius: 50%;
  background: rgba(23, 35, 63, 0.1);
}

.bla-streak .is-done i {
  background: var(--bla-accent);
}

.bla-streak .is-today {
  border-color: var(--bla-accent);
}

.bla-note {
  margin: 0.6rem 1rem 0;
  color: var(--bla-muted);
  font-size: 0.74rem;
  line-height: 1.5;
}

.bla-feed {
  display: grid;
  gap: 0.4rem;
  padding: 0 1rem;
  list-style: none;
  margin: 0;
}

.bla-feed li {
  display: grid;
  grid-template-columns: 0.5rem minmax(0, 1fr);
  gap: 0.7rem;
  padding: 0.6rem 0.85rem;
  border: 1px solid var(--bla-line);
  border-radius: 0.8rem;
  background: var(--bla-card);
}

.bla-feed li::before {
  width: 0.5rem;
  height: 0.5rem;
  margin-top: 0.4rem;
  border-radius: 50%;
  background: var(--bla-accent);
  content: "";
}

.bla-feed strong {
  display: block;
  font-size: 0.8rem;
  font-weight: 620;
}

.bla-feed span {
  display: block;
  color: var(--bla-muted);
  font-size: 0.7rem;
}

/* --------------------------------------------------------------- dialogs -- */

.bla-dialog,
.bla-alert {
  width: min(24rem, calc(100vw - 1.6rem));
  max-height: min(88svh, 44rem);
  /* The `margin: 0` reset above strips the UA's `margin: auto`, which is what
     centres a modal dialog — put it back explicitly. */
  margin: auto;
  padding: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  border: 1px solid var(--bla-line);
  border-radius: 1.3rem;
  background: var(--bla-paper);
  color: var(--bla-ink);
  box-shadow: var(--bla-shadow);
}

.bla-dialog::backdrop,
.bla-alert::backdrop {
  background: rgba(9, 14, 28, 0.72);
  backdrop-filter: blur(5px);
}

.bla-dialog__head {
  position: sticky;
  top: 0;
  z-index: 2;
  display: flex;
  align-items: start;
  justify-content: space-between;
  gap: 0.8rem;
  padding: 1rem;
  border-bottom: 1px solid var(--bla-line);
  background: color-mix(in srgb, var(--bla-paper) 93%, transparent);
  backdrop-filter: blur(12px);
}

.bla-dialog__head h2 {
  margin-top: 0.3rem;
  font-size: 1.45rem;
}

.bla-dialog__close {
  width: 2.75rem;
  height: 2.75rem;
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  border: 1px solid var(--bla-line-strong);
  border-radius: 50%;
}

.bla-dialog__body {
  padding: 1rem;
  font-size: 0.88rem;
}

.bla-dialog__body > .bla-primary {
  margin-top: 1rem;
}

.bla-form {
  display: grid;
  gap: 0.7rem;
}

.bla-form label {
  display: grid;
  gap: 0.3rem;
}

.bla-form label span {
  color: var(--bla-muted);
  font-size: 0.68rem;
  font-weight: 740;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.bla-form select,
.bla-form input {
  width: 100%;
  min-height: 2.9rem;
  padding: 0.6rem 0.7rem;
  border: 1px solid var(--bla-line-strong);
  border-radius: 0.6rem;
  background: var(--bla-card);
  font-size: 0.88rem;
}

.bla-fineprint {
  margin-top: 0.7rem;
  color: var(--bla-muted);
  font-size: 0.73rem;
  line-height: 1.5;
}

.bla-warn {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 0.6rem;
  margin-top: 0.9rem;
  padding: 0.75rem 0.85rem;
  border: 1px solid var(--bla-marigold-ink);
  border-radius: 0.7rem;
  background: var(--bla-marigold-soft);
  color: var(--bla-marigold-ink);
  font-size: 0.76rem;
  line-height: 1.45;
}

.bla-warn .bla-icon {
  margin-top: 0.1rem;
}

.bla-paylines {
  display: grid;
  gap: 0.5rem;
  margin: 0;
}

.bla-paylines > div {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.8rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px dashed var(--bla-line);
}

.bla-paylines > div:last-child {
  padding-bottom: 0;
  border-bottom: 0;
}

.bla-paylines > div.is-total {
  padding-top: 0.5rem;
  border-top: 2px solid var(--bla-ink);
  border-bottom: 0;
}

.bla-paylines dt {
  color: var(--bla-muted);
  font-size: 0.78rem;
}

.bla-paylines dd {
  margin: 0;
  font-size: 0.86rem;
  font-weight: 660;
  text-align: right;
}

.bla-paylines .is-total dt {
  color: var(--bla-ink);
  font-weight: 660;
}

.bla-paylines .is-total dd {
  font-family: var(--bla-level);
  font-size: 1.3rem;
  font-weight: 620;
}

/* set runner */

.bla-runner__hint {
  color: var(--bla-muted);
  font-size: 0.8rem;
  line-height: 1.5;
}

.bla-runner__clock {
  margin-top: 1rem;
  padding: 1.1rem 1rem;
  border-radius: 1rem;
  background: var(--bla-ink);
  color: var(--bla-on-dark);
  text-align: center;
}

.bla-runner__time {
  font-family: var(--bla-level);
  font-size: 3.1rem;
  font-weight: 600;
  letter-spacing: -0.04em;
  line-height: 1;
  color: #fff;
  font-variant-numeric: tabular-nums;
}

.bla-runner__clock.is-over .bla-runner__time {
  color: var(--bla-gold-dark);
}

.bla-runner__target {
  margin-top: 0.4rem;
  color: var(--bla-muted-dark);
  font-size: 0.74rem;
}

.bla-runner__target strong {
  color: var(--bla-gold-dark);
}

.bla-runner__bar {
  height: 0.4rem;
  overflow: hidden;
  margin-top: 0.75rem;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.2);
}

.bla-runner__bar span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--bla-teal-dark);
  transition: width 300ms linear;
}

.bla-runner__clock.is-over .bla-runner__bar span {
  background: var(--bla-gold-dark);
}

.bla-runner__score {
  margin-top: 1rem;
  padding: 0.9rem 1rem;
  border: 1px solid var(--bla-line);
  border-radius: 1rem;
  background: var(--bla-card);
  text-align: center;
}

.bla-runner__score > p:first-child {
  font-size: 0.84rem;
  font-weight: 620;
}

.bla-stepper {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.9rem;
  margin-top: 0.6rem;
}

.bla-stepper button {
  width: 2.9rem;
  height: 2.9rem;
  display: grid;
  place-items: center;
  border: 1px solid var(--bla-line-strong);
  border-radius: 50%;
  background: var(--bla-paper);
}

.bla-stepper output {
  min-width: 3.4rem;
  font-family: var(--bla-level);
  font-size: 2rem;
  font-weight: 620;
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
}

.bla-runner__accuracy {
  margin-top: 0.5rem;
  color: var(--bla-muted);
  font-size: 0.76rem;
}

.bla-runner__accuracy.is-low {
  color: var(--bla-rose);
  font-weight: 620;
}

.bla-runner__verdict {
  margin-top: 0.9rem;
  padding: 0.85rem 0.95rem;
  border-radius: 0.8rem;
  background: var(--bla-accent-soft);
  color: var(--bla-ink);
  font-size: 0.85rem;
  line-height: 1.5;
}

.bla-runner__verdict:empty {
  display: none;
}

.bla-runner__verdict.is-repeat {
  background: var(--bla-marigold-soft);
  color: var(--bla-marigold-ink);
}

.bla-alert {
  padding: 1.5rem;
  text-align: center;
}

.bla-alert .bla-kicker {
  justify-content: center;
}

.bla-alert h2 {
  margin-top: 0.35rem;
  font-size: 1.6rem;
}

.bla-alert > p:not(.bla-kicker) {
  margin-top: 0.5rem;
  color: var(--bla-muted);
  font-size: 0.87rem;
  line-height: 1.5;
}

.bla-alert .bla-primary {
  margin-top: 1.1rem;
}

.bla-secondary--link {
  display: flex;
}

.bla-toast {
  position: fixed;
  bottom: 5.6rem;
  left: 50%;
  z-index: 200;
  width: min(22rem, calc(100vw - 2rem));
  padding: 0.75rem 0.95rem;
  border-radius: 0.75rem;
  background: var(--bla-ink);
  color: #fff;
  box-shadow: var(--bla-shadow);
  font-size: 0.85rem;
  transform: translateX(-50%);
}

/* ----------------------------------------------------------- breakpoints -- */

@media (max-width: 1000px) {
  .bla-stage {
    grid-template-columns: 1fr;
  }

  .bla-pitch {
    min-height: auto;
    align-items: center;
    flex-direction: row;
    gap: 1rem;
    padding: 0.85rem 1.1rem;
  }

  .bla-pitch__copy {
    display: none;
  }

  .bla-pitch__actions {
    margin-left: auto;
    flex-wrap: nowrap;
  }

  .bla-pitch__actions p {
    display: none;
  }

  .bla-device-wrap {
    min-height: 0;
    padding: 1rem;
  }

  .bla-device {
    height: min(54rem, calc(100svh - 6.5rem));
    min-height: 0;
  }
}

@media (max-width: 560px) {
  body {
    background: var(--bla-paper);
  }

  .bla-pitch {
    display: none;
  }

  .bla-device-wrap {
    min-height: 100svh;
    padding: 0;
    background: var(--bla-paper);
  }

  .bla-device {
    width: 100%;
    height: 100svh;
    min-height: 100svh;
    border: 0;
    border-radius: 0;
    box-shadow: none;
  }

  .bla-device__sensor {
    display: none;
  }

  .bla-statusbar {
    height: calc(2.5rem + env(safe-area-inset-top));
    padding-top: max(0.7rem, env(safe-area-inset-top));
  }

  .bla-screen {
    top: calc(11rem + env(safe-area-inset-top));
    bottom: calc(4.6rem + env(safe-area-inset-bottom));
  }

  .bla-tabbar {
    height: calc(4.6rem + env(safe-area-inset-bottom));
    padding-bottom: max(0.55rem, env(safe-area-inset-bottom));
  }

  .bla-dialog,
  .bla-alert {
    width: min(24rem, calc(100vw - 1rem));
    max-height: calc(100svh - 1.5rem);
  }
}

@media (max-width: 380px) {
  .bla-actions {
    grid-template-columns: 1fr;
  }

  .bla-stats {
    grid-template-columns: 1fr;
  }

  .bla-attend {
    grid-template-columns: repeat(3, 1fr);
  }

  .bla-tabbar button span {
    font-size: 0.56rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
