@layer reset, tokens, base, compositions, blocks, utilities;

/* css/reset.css */
@layer reset {
  *,
  *::before,
  *::after {
    box-sizing: border-box;
  }
  * {
    margin: 0;
  }
  html {
    -webkit-text-size-adjust: 100%;
  }
  body {
    min-height: 100vh;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
  }
  img,
  picture,
  video,
  canvas,
  svg {
    display: block;
    max-width: 100%;
  }
  input,
  button,
  textarea,
  select {
    font: inherit;
    color: inherit;
  }
  p,
  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    overflow-wrap: break-word;
  }
  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    font-size: inherit;
    font-weight: inherit;
  }
  a {
    color: inherit;
    text-decoration: none;
  }
  button {
    background: none;
    border: 0;
    padding: 0;
    cursor: pointer;
  }
  ul,
  ol {
    list-style: none;
    padding: 0;
  }
  :where(:focus-visible) {
    outline: 2px solid var(--aqua);
    outline-offset: 2px;
  }
}

/* css/tokens.css */
@layer tokens {
  :root {
    --void: #0b0710;
    --void-deep: #08050d;
    --panel: #1b1430;
    --coral: #ff7a6b;
    --aqua: #5fe0c4;
    --gold: #ffcf6b;
    --lime: #9ae66e;
    --ink: #f3ecff;
    --muted: #9a8fb5;
    --danger: #c2456b;
    --danger-text: #ff6b8f;
    --on-warm: #1a0f12;
    --on-cool: #06120e;
    --border-c: 154 143 181;
    --glow-warm: 255 160 90;
    --aqua-rgb: 95 224 196;
    --control-h: 2.25rem;
    --control-h-sm: 1.75rem;
    --control-font: .78rem;
    --control-font-sm: .72rem;
    --btn-bg: rgb(74 58 102 / .18);
    --surface-panel:
      linear-gradient(
        180deg,
        rgba(22, 16, 33, .95),
        rgba(14, 10, 22, .97));
    --shadow-panel: 0 24px 70px rgba(0, 0, 0, .6), inset 0 1px 0 rgba(255, 255, 255, .04);
    --shadow-toast: 0 16px 40px rgba(0, 0, 0, .5);
    --font:
      "Chakra Petch",
      ui-monospace,
      "SFMono-Regular",
      monospace;
    --font-display:
      "Press Start 2P",
      "Chakra Petch",
      monospace;
    --gutter: clamp(1rem, 4vw, 2.5rem);
    --pad-end: clamp(1.125rem, 3vh, 1.625rem);
    --dock-bottom: 2.5rem;
    --footer-bottom: .75rem;
    --radius-sm: 0.5rem;
    --radius-md: 0.75rem;
    --radius-lg: 1.125rem;
    --radius-pill: 62.4375rem;
    --ease-out: cubic-bezier(.2, .8, .2, 1);
    --ease-warp: cubic-bezier(.5, .05, .3, 1);
    --star-core: #fff3d6;
    --star-glow: var(--gold);
    color-scheme: dark;
  }
}

/* css/base.css */
@layer base {
  body {
    background: var(--void);
    color: var(--ink);
    font-family: var(--font);
  }
  [data-phx-session],
  [data-phx-teleported-src] {
    display: contents;
  }
  @media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
      animation-duration: .01ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: .01ms !important;
      scroll-behavior: auto !important;
    }
    .shoot,
    #warp {
      display: none;
    }
  }
  @media (forced-colors: active) {
    .logo-word,
    .game h1 {
      -webkit-text-fill-color: currentColor;
      color: CanvasText;
    }
  }
}

/* css/compositions.css */
@layer compositions {
  .flow > * + * {
    margin-block-start: var(--flow-space, 1em);
  }
  .cluster {
    display: flex;
    flex-wrap: wrap;
    gap: var(--cluster-gap, 1rem);
    align-items: center;
  }
  .stack {
    display: flex;
    flex-direction: column;
    gap: var(--stack-gap, 1rem);
  }
}

/* css/blocks/background.css */
@layer blocks {
  .app-shell {
    position: relative;
    min-height: 100svh;
  }
  .bg {
    position: fixed;
    inset: 0;
    z-index: -1;
    overflow: hidden;
    pointer-events: none;
    background: var(--void-deep);
    contain: layout paint style;
  }
  @media (prefers-reduced-motion: no-preference) {
    .bg {
      animation: bg-in 1100ms ease-out both;
    }
    @keyframes bg-in {
      from {
        opacity: 0;
        transform: scale(1.03);
      }
      to {
        opacity: 1;
        transform: none;
      }
    }
  }
  .bg-nebula {
    position: absolute;
    inset: 0;
    background:
      radial-gradient(
        circle at 50% 32%,
        #241a33,
        var(--void-deep) 72%);
  }
  .blob {
    position: absolute;
    width: 48vmax;
    height: 48vmax;
    opacity: .55;
  }
  .blob[data-layer="1"] {
    background:
      radial-gradient(
        circle,
        rgba(255, 122, 107, .5),
        rgb(255 122 107 / 0) 66%);
    left: -16vmax;
    top: -12vmax;
  }
  .blob[data-layer="2"] {
    background:
      radial-gradient(
        circle,
        rgba(95, 224, 196, .46),
        rgb(95 224 196 / 0) 66%);
    right: -18vmax;
    top: 16vmax;
  }
  .blob[data-layer="3"] {
    background:
      radial-gradient(
        circle,
        rgba(199, 146, 234, .42),
        rgb(199 146 234 / 0) 66%);
    left: 24vmax;
    bottom: -22vmax;
  }
  .stars {
    position: absolute;
    inset: 0;
    background-repeat: repeat;
  }
  .stars[data-layer="1"] {
    background-image:
      radial-gradient(
        0.0625rem 0.0625rem at 2.5rem 3.75rem,
        #fff,
        transparent),
      radial-gradient(
        0.0625rem 0.0625rem at 7.5rem 1.875rem,
        #cdeaff,
        transparent),
      radial-gradient(
        0.0625rem 0.0625rem at 12.5rem 7.5rem,
        #fff,
        transparent),
      radial-gradient(
        0.0625rem 0.0625rem at 5rem 12.5rem,
        #ffe0ee,
        transparent),
      radial-gradient(
        0.0875rem 0.0875rem at 15rem 13.75rem,
        #fff,
        transparent);
    background-size: 16.25rem 16.25rem;
    opacity: .55;
  }
  .stars[data-layer="2"] {
    background-image:
      radial-gradient(
        0.0625rem 0.0625rem at 3.75rem 5.625rem,
        #fff,
        transparent),
      radial-gradient(
        0.0875rem 0.0875rem at 18.75rem 10rem,
        #d9f6ff,
        transparent),
      radial-gradient(
        0.0625rem 0.0625rem at 11.25rem 20rem,
        #fff,
        transparent),
      radial-gradient(
        0.1rem 0.1rem at 22.5rem 22.5rem,
        #fff,
        transparent);
    background-size: 26.25rem 26.25rem;
    opacity: .4;
  }
  .shoot {
    position: absolute;
    width: 10rem;
    height: 0.125rem;
    border-radius: 0.125rem;
    opacity: 0;
    transform: rotate(18deg);
    background:
      linear-gradient(
        90deg,
        transparent,
        #fff);
    filter: drop-shadow(0 0 6px #cfe7ff);
  }
  .shoot[data-layer="1"] {
    top: 8%;
    animation: shoot 8s ease-in 1.5s infinite;
  }
  .shoot[data-layer="2"] {
    top: 52%;
    animation: shoot 11s ease-in 5s infinite;
  }
  @keyframes shoot {
    0% {
      transform: rotate(18deg) translateX(-45vw);
      opacity: 0;
    }
    4% {
      opacity: .9;
    }
    16% {
      transform: rotate(18deg) translateX(140vw);
      opacity: 0;
    }
    100% {
      opacity: 0;
    }
  }
}

/* css/blocks/nav.css */
@layer blocks {
  .nav {
    position: sticky;
    top: 0;
    z-index: 30;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.875rem var(--gutter);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    background:
      linear-gradient(
        180deg,
        rgba(11, 7, 16, .88),
        rgba(11, 7, 16, .35));
    border-bottom: 1px solid rgb(var(--border-c) / .18);
  }
  .nav[data-variant=ghost] {
    background:
      linear-gradient(
        180deg,
        rgba(8, 5, 13, .6),
        transparent);
    border-bottom: 0;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
  .logo {
    display: inline-flex;
    align-items: center;
    gap: 0.6875rem;
    text-decoration: none;
  }
  .logo-mark {
    width: 2.375rem;
    height: 2.375rem;
    flex: none;
    overflow: visible;
    filter: drop-shadow(0 0 11px rgba(255, 207, 107, .5));
  }
  .logo-word {
    font-family: var(--font-display);
    font-weight: 400;
    transform: skewX(-18deg);
    letter-spacing: .1em;
    font-size: 1.25rem;
    background:
      linear-gradient(
        90deg,
        var(--coral),
        var(--gold),
        var(--aqua));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    filter: drop-shadow(0 0 10px rgba(255, 207, 107, .35));
  }
  @media (max-width: 480px) {
    .logo-word {
      display: none;
    }
  }
  .navlinks {
    display: flex;
    align-items: center;
    gap: 0.625rem;
  }
  .navlinks form {
    margin: 0;
  }
  .nav-user {
    color: var(--muted);
    font-size: .8rem;
    letter-spacing: .06em;
  }
  @media (max-width: 640px) {
    .nav-user {
      display: none;
    }
  }
}

/* css/blocks/button.css */
@layer blocks {
  .btn {
    font: inherit;
    font-size: var(--control-font);
    line-height: 1.15;
    letter-spacing: .12em;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
    min-height: var(--control-h);
    padding: .5rem .9rem;
    border-radius: var(--radius-sm);
    border: 1px solid rgb(var(--border-c) / .35);
    background: var(--btn-bg);
    color: var(--ink);
    transition: .15s;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  .btn:not(:disabled):hover {
    border-color: var(--aqua);
    background: rgba(95, 224, 196, .14);
    box-shadow: 0 0 18px rgba(95, 224, 196, .25);
  }
  .btn[data-variant=primary] {
    border: 0;
    padding: calc(.5rem + 0.0625rem) calc(.9rem + 0.0625rem);
    background:
      linear-gradient(
        90deg,
        var(--coral),
        var(--gold));
    color: var(--on-warm);
    font-weight: 700;
  }
  .btn[data-variant=primary]:not(:disabled):hover {
    background:
      linear-gradient(
        90deg,
        var(--coral),
        var(--gold));
    filter: brightness(1.08);
    box-shadow: 0 0 24px rgb(var(--glow-warm) / .6);
  }
  .btn[data-variant=ghost] {
    border: 0;
    background: none;
    color: var(--muted);
  }
  .btn[data-variant=ghost]:not(:disabled):hover {
    background: none;
    box-shadow: none;
    color: var(--ink);
  }
  .btn[data-size=sm] {
    min-height: var(--control-h-sm);
    padding: .25rem .55rem;
    font-size: var(--control-font-sm);
    letter-spacing: .08em;
  }
  .btn[data-flush] {
    padding-inline: 0;
  }
  .btn:disabled {
    cursor: not-allowed;
    opacity: .6;
    filter: none;
    background: rgb(74 58 102 / .6);
    box-shadow: inset 0 0 0 1px rgb(var(--border-c) / .4);
    color: var(--muted);
  }
  .select {
    position: relative;
    display: inline-block;
  }
  .select-toggle {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    min-height: var(--control-h);
    padding: 0 .75rem;
    font: inherit;
    font-size: var(--control-font);
    letter-spacing: .06em;
    color: var(--ink);
    background: var(--btn-bg);
    border: 1px solid rgb(var(--border-c) / .35);
    border-radius: var(--radius-sm);
    cursor: pointer;
    list-style: none;
    user-select: none;
    transition: border-color .15s, background .15s;
  }
  .select-toggle[data-size=sm] {
    min-height: var(--control-h-sm);
    padding: 0 .55rem;
    font-size: var(--control-font-sm);
  }
  .select-toggle::-webkit-details-marker {
    display: none;
  }
  .select-toggle:hover,
  .select[open] .select-toggle {
    border-color: var(--aqua);
  }
  .select-toggle:focus-visible {
    outline: 2px solid var(--aqua);
    outline-offset: 2px;
  }
  .select .caret {
    display: grid;
    place-items: center;
    color: var(--muted);
    transition: transform .15s;
  }
  .select[open] .caret {
    transform: rotate(180deg);
  }
  .select-menu {
    position: absolute;
    z-index: 40;
    top: calc(100% + .35rem);
    min-width: 100%;
    display: flex;
    flex-direction: column;
    gap: .125rem;
    padding: .25rem;
    background: var(--panel);
    border: 1px solid rgb(var(--border-c) / .35);
    border-radius: .55rem;
    box-shadow: 0 14px 34px rgba(0, 0, 0, .55);
  }
  .select[data-align=right] .select-menu {
    right: 0;
  }
  .select[data-align=left] .select-menu {
    left: 0;
  }
  .select-opt {
    text-align: left;
    border: 0;
    border-radius: .4rem;
    padding: .45rem .7rem;
    font: inherit;
    font-size: .72rem;
    letter-spacing: .06em;
    color: var(--muted);
    background: transparent;
    cursor: pointer;
    white-space: nowrap;
  }
  .select-opt:hover {
    background: rgb(95 224 196 / .12);
    color: var(--ink);
  }
  .select-opt[data-active] {
    background: rgb(95 224 196 / .18);
    color: var(--ink);
  }
  .select-opt.locked {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .6rem;
    text-decoration: none;
    color: var(--muted);
    opacity: .55;
  }
  .select-opt.locked:hover {
    opacity: 1;
    background: rgb(95 224 196 / .1);
    color: var(--ink);
  }
  .select-opt.locked .opt-lock {
    display: inline-flex;
    align-items: center;
    flex: none;
    color: rgb(95 224 196);
  }
  .select-opt.locked .opt-tip {
    position: absolute;
    bottom: calc(100% + .4rem);
    left: 50%;
    transform: translateX(-50%);
    width: max-content;
    max-width: 11rem;
    text-align: center;
    white-space: normal;
    font-size: .62rem;
    line-height: 1.3;
    letter-spacing: .02em;
    color: var(--ink);
    background: var(--panel);
    border: 1px solid rgb(95 224 196 / .35);
    border-radius: .45rem;
    padding: .3rem .5rem;
    box-shadow: 0 10px 26px rgba(0, 0, 0, .55);
    opacity: 0;
    pointer-events: none;
    transition: opacity .12s ease;
    z-index: 60;
  }
  .select-opt.locked:hover .opt-tip,
  .select-opt.locked:focus-visible .opt-tip {
    opacity: 1;
  }
  .game-lobby[data-demo] .slots .select-toggle {
    width: 95px;
    justify-content: space-between;
  }
}

/* css/blocks/landing.css */
@layer blocks {
  @keyframes pulse {
    0%, 100% {
      opacity: 1;
    }
    50% {
      opacity: .2;
    }
  }
  .app-main {
    position: relative;
    z-index: 1;
    max-width: 85rem;
    margin: 0 auto;
    padding: clamp(1.75rem, 6vw, 4.5rem) var(--gutter) 5rem;
  }
  .stage {
    position: relative;
    min-height: 100svh;
  }
  .stage-bg {
    position: fixed;
    inset: 0;
    z-index: 0;
    background: var(--void-deep);
  }
  .stage-art {
    position: absolute;
    inset: 0;
    background:
      radial-gradient(
        70vmax 70vmax at 25% 25%,
        var(--g1),
        transparent 60%),
      radial-gradient(
        70vmax 70vmax at 78% 75%,
        var(--g2),
        transparent 60%),
      var(--void);
    animation: stage-art-drift 16s ease-in-out infinite alternate;
  }
  @keyframes stage-art-drift {
    from {
      transform: scale(1) translate(0, 0);
    }
    to {
      transform: scale(1.12) translate(-2%, -2%);
    }
  }
  .stage-bg .game {
    position: absolute;
    inset: 0;
    opacity: 0;
    transition: opacity .6s ease;
  }
  .stage-bg .game.is-ready {
    opacity: 1;
  }
  .stage-overlay {
    position: fixed;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    background:
      linear-gradient(
        180deg,
        rgba(8, 5, 13, .5) 0%,
        rgba(8, 5, 13, .08) 22%,
        rgba(8, 5, 13, .22) 52%,
        rgba(8, 5, 13, .78) 82%,
        rgba(8, 5, 13, .96) 100%),
      radial-gradient(
        130% 90% at 50% -10%,
        transparent 55%,
        rgba(8, 5, 13, .5));
  }
  .stage-content {
    position: relative;
    z-index: 2;
    min-height: 100svh;
    display: flex;
    flex-direction: column;
  }
  .stage-hero {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    gap: .7rem;
    width: 100%;
    padding: 0 var(--gutter) clamp(0.875rem, 3vh, 1.75rem);
  }
  .eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    letter-spacing: .3em;
    text-transform: uppercase;
    font-size: .7rem;
    color: var(--aqua);
  }
  .livedot {
    width: 0.4375rem;
    height: 0.4375rem;
    border-radius: 50%;
    background: var(--aqua);
    box-shadow: 0 0 10px var(--aqua);
    animation: pulse 1.2s infinite;
  }
  .stage-title {
    font-size: clamp(2.6rem, 8vw, 6rem);
    font-weight: 700;
    letter-spacing: .04em;
    line-height: .98;
    margin-left: -0.06em;
    filter: drop-shadow(0 6px 34px rgba(0, 0, 0, .7));
  }
  .tagline {
    color: var(--ink);
    opacity: .9;
    max-width: 56ch;
    font-size: clamp(.9rem, 1.5vw, 1.1rem);
    line-height: 1.5;
    text-shadow: 0 2px 12px rgba(0, 0, 0, .6);
  }
  .cta-row {
    display: flex;
    align-items: center;
    gap: 1rem;
    margin-top: .6rem;
    flex-wrap: wrap;
  }
  .cta {
    display: inline-flex;
    align-items: center;
    gap: 0.625rem;
    background:
      linear-gradient(
        90deg,
        var(--coral),
        var(--gold));
    color: var(--on-warm);
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    font-size: .9rem;
    padding: .8rem 1.6rem;
    border-radius: var(--radius-sm);
    text-decoration: none;
    box-shadow: 0 0 30px rgb(var(--glow-warm) / .5);
    transition: .2s;
  }
  .cta:hover {
    transform: translateY(-0.125rem);
    box-shadow: 0 0 46px rgb(var(--glow-warm) / .8);
  }
  .cta-ico {
    display: inline-flex;
    width: 1.375rem;
    height: 1.375rem;
    flex: none;
    transition: transform .25s var(--ease-out);
  }
  .cta-ico-svg {
    width: 1.375rem;
    height: 1.375rem;
    display: block;
    transform-box: fill-box;
    transform-origin: center;
    transform: rotate(-14deg);
    animation: pad-shake 4.5s ease-in-out infinite;
  }
  .cta:hover .cta-ico {
    transform: scale(1.18) rotate(16deg);
  }
  @keyframes pad-shake {
    0%, 84%, 100% {
      transform: rotate(-14deg);
    }
    86% {
      transform: rotate(-2deg) translateY(-0.0625rem);
    }
    88% {
      transform: rotate(-26deg) translateY(0.0625rem);
    }
    90% {
      transform: rotate(-4deg) translateY(-0.0625rem);
    }
    92% {
      transform: rotate(-24deg) translateY(0.0625rem);
    }
    94% {
      transform: rotate(-14deg);
    }
  }
  .cta[data-disabled] {
    background: rgba(255, 255, 255, .06);
    color: var(--muted);
    border: 1px solid rgb(var(--border-c) / .3);
    box-shadow: none;
    cursor: default;
  }
  .hero-meta {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    flex-wrap: wrap;
  }
  .hero-tag {
    display: inline-flex;
    align-items: center;
    font-size: .64rem;
    letter-spacing: .16em;
    text-transform: uppercase;
    font-weight: 700;
    color: var(--muted);
    padding: .2rem .68rem;
    border-radius: var(--radius-pill);
    border: 1px solid rgb(var(--border-c) / .3);
  }
  .dock {
    display: flex;
    gap: 0.75rem;
    overflow-x: auto;
    width: 100%;
    padding: 0.75rem var(--gutter) var(--dock-bottom);
    scrollbar-width: none;
  }
  .dock::-webkit-scrollbar {
    display: none;
  }
  .dock-item {
    position: relative;
    flex: 0 0 auto;
    width: 9.75rem;
    height: 5.375rem;
    border-radius: var(--radius-md);
    overflow: hidden;
    cursor: pointer;
    border: 1px solid rgb(var(--border-c) / .22);
    background: rgba(18, 12, 30, .82);
    color: var(--ink);
    display: flex;
    align-items: flex-end;
    padding: 0.5625rem 0.6875rem;
    text-align: left;
    font: inherit;
    transition:
      transform .2s,
      border-color .2s,
      box-shadow .2s;
  }
  .dock-item:hover:not(:disabled) {
    transform: translateY(-0.25rem);
    border-color: rgba(95, 224, 196, .5);
  }
  .dock-item:disabled {
    cursor: not-allowed;
  }
  .dock-item[data-active] {
    border-color: var(--aqua);
    box-shadow: 0 0 0 1px var(--aqua), 0 14px 34px -12px rgba(95, 224, 196, .6);
  }
  .dock-art {
    position: absolute;
    inset: 0;
    z-index: 0;
    background:
      radial-gradient(
        circle at 28% 28%,
        var(--g1),
        transparent 62%),
      radial-gradient(
        circle at 76% 78%,
        var(--g2),
        transparent 62%),
      #120c20;
    opacity: .55;
  }
  .dock-name {
    position: relative;
    z-index: 1;
    font-size: .8rem;
    font-weight: 600;
    letter-spacing: .03em;
    text-shadow: 0 1px 8px rgba(0, 0, 0, .8);
  }
  .dock-live {
    position: absolute;
    top: 0.5625rem;
    right: 0.6875rem;
    z-index: 1;
    width: 0.4375rem;
    height: 0.4375rem;
    border-radius: 50%;
    background: var(--aqua);
    box-shadow: 0 0 10px var(--aqua);
    animation: pulse 1.2s infinite;
  }
  .dock-soon {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    z-index: 1;
    padding: 0.1rem 0.36rem;
    border-radius: 0.3rem;
    font-size: 0.5rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #dbe3f2;
    background: rgba(6, 4, 12, 0.66);
    border: 1px solid rgb(var(--border-c) / 0.32);
    white-space: nowrap;
  }
  .dock-item[data-soon] .dock-art {
    filter: grayscale(0.55) brightness(0.6);
  }
  .dock-item[data-soon] .dock-name {
    opacity: 0.72;
  }
  .dock-item[data-game=black-hole] .dock-art {
    opacity: 1;
    background:
      radial-gradient(
        130% 150% at 50% 55%,
        rgb(var(--glow-warm) / .22),
        var(--void) 72%);
  }
  .dock-item[data-game=black-hole] .dock-art::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    width: 92%;
    height: 34%;
    transform: translate(-50%, -50%);
    border-radius: 50%;
    background:
      radial-gradient(
        closest-side,
        rgba(255, 246, 222, .97),
        rgba(255, 185, 95, .8) 42%,
        rgba(220, 110, 50, .3) 66%,
        transparent 80%);
    filter: blur(1.4px);
  }
  .dock-item[data-game=black-hole] .dock-art::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    width: 30%;
    aspect-ratio: 1;
    transform: translate(-50%, -50%);
    border-radius: 50%;
    background: #000;
    box-shadow: 0 0 0 2px rgba(255, 238, 205, .95), 0 0 13px 1px rgba(255, 205, 130, .7);
  }
  .dock-item[data-game=zenith] .dock-art {
    opacity: 1;
    background:
      linear-gradient(
        180deg,
        #241042 0%,
        #3a1450 52%,
        #5a1a48 100%);
  }
  .dock-item[data-game=zenith] .dock-art::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 58%;
    width: 52%;
    aspect-ratio: 1;
    transform: translate(-50%, -50%);
    border-radius: 50%;
    background:
      repeating-linear-gradient(
        180deg,
        transparent 0 0.3125rem,
        rgba(18, 8, 26, .85) 0.3125rem 0.4375rem),
      linear-gradient(
        180deg,
        #ffd36b 0%,
        #ff7ab0 54%,
        #c23a86 100%);
    box-shadow: 0 0 16px rgba(255, 120, 176, .5);
  }
  .dock-item[data-game=zenith] .dock-art::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 63%;
    height: 0.125rem;
    background: #ff6bd0;
    box-shadow: 0 0 12px 1px #ff6bd0;
  }
  .dock-item[data-game=it-sees-you] .dock-art {
    opacity: 1;
    background:
      repeating-linear-gradient(
        0deg,
        rgba(0, 0, 0, .34) 0 1px,
        transparent 1px 3px),
      radial-gradient(
        120% 125% at 50% 50%,
        transparent 48%,
        rgba(0, 0, 0, .55) 100%),
      url(/game-it-sees-you/img/eye.png) center / 64% no-repeat,
      var(--void);
  }
}

/* css/blocks/game.css */
@layer blocks {
  .game-shell {
    position: fixed;
    inset: 0;
  }
  .game-shell .nav {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    z-index: 50;
  }
  .game {
    position: absolute;
    inset: 0;
    z-index: 1;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ink);
    font-family: var(--font);
  }
  .game canvas {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    display: block;
  }
  .game .overlay {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    background:
      radial-gradient(
        circle at 50% 45%,
        rgba(36, 26, 51, .35),
        rgba(14, 10, 22, .82));
    -webkit-backdrop-filter: blur(2px);
    backdrop-filter: blur(2px);
    overflow-y: auto;
    z-index: 10;
    gap: 1.4rem;
    padding: 2rem;
  }
  .game .pause-menu {
    display: flex;
    flex-direction: column;
    gap: .6rem;
    min-width: 15rem;
  }
  .game .pause-menu .btn {
    width: 100%;
  }
  .game #pause[data-mode=local] [data-pause=leave] {
    display: none;
  }
  .game #pause[data-mode=online] :is([data-pause=restart], [data-pause=quit]) {
    display: none;
  }
  .game #pause[data-mode=online] {
    background: transparent;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
    justify-content: flex-start;
    padding-top: 12vh;
    pointer-events: none;
  }
  .game #pause[data-mode=online] > * {
    pointer-events: auto;
  }
  .game #pause[data-mode=online] #pauseTitle {
    font-size: 1.3rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    text-shadow: 0 2px 14px rgba(0, 0, 0, .85);
  }
  .game h1 {
    font-weight: 700;
    letter-spacing: .42em;
    font-size: clamp(2.4rem, 7vw, 4.6rem);
    text-indent: .42em;
    background:
      linear-gradient(
        180deg,
        var(--star-core),
        var(--star-glow));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    filter: drop-shadow(0 0 24px rgba(255, 207, 107, .25));
  }
  .game .game-msg-big {
    font-size: clamp(1.8rem, 5vw, 3rem);
    font-weight: 700;
    letter-spacing: .06em;
  }
  .game .game-msg-sub {
    color: var(--muted);
    letter-spacing: .16em;
    text-transform: uppercase;
    font-size: .82rem;
  }
  .game .game-hint {
    position: absolute;
    bottom: 0.875rem;
    left: 0;
    right: 0;
    text-align: center;
    color: var(--muted);
    font-size: .72rem;
    letter-spacing: .14em;
    z-index: 5;
    opacity: .7;
  }
  .game[data-mode=demo] .game-hint,
  .game[data-mode=demo] #message,
  .game[data-mode=demo] #loading,
  .game[data-mode=demo] #pause {
    display: none !important;
  }
}

/* css/blocks/game-lobby.css */
@layer blocks {
  .game-lobby {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: grid;
    place-items: center;
    padding: var(--gutter);
  }
  .game-lobby .morph {
    position: relative;
    width: 100%;
    max-width: 32.5rem;
    background: var(--surface-panel);
    border: 1px solid rgb(var(--border-c) / .22);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-panel);
    transition: height .26s var(--ease-out);
  }
  .game-lobby .morph[data-morphing] {
    overflow: hidden;
  }
  .game-lobby .panel {
    --stack-gap: 1.05rem;
    width: 100%;
    align-items: center;
    padding: clamp(1.4rem, 3vw, 2.2rem) clamp(1.2rem, 3vw, 2rem);
  }
  .game-lobby .swap {
    position: relative;
    width: 100%;
  }
  .game-lobby .screen {
    --stack-gap: 1.05rem;
    width: 100%;
    align-items: center;
  }
  .game-lobby [data-ghost] {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    pointer-events: none;
    animation: lobby-fade-out .2s ease forwards;
  }
  .game-lobby .screen[data-enter] {
    animation: lobby-fade-in .26s ease;
  }
  @keyframes lobby-fade-out {
    to {
      opacity: 0;
    }
  }
  @keyframes lobby-fade-in {
    from {
      opacity: 0;
    }
    to {
      opacity: 1;
    }
  }
  @media (prefers-reduced-motion: reduce) {
    .game-lobby .morph {
      transition: none;
    }
    .game-lobby [data-ghost],
    .game-lobby .screen[data-enter] {
      animation: none;
    }
  }
  .game-lobby .title {
    font-weight: 700;
    letter-spacing: .04em;
    line-height: .98;
    font-size: clamp(2.2rem, 6vw, 3.4rem);
    color: var(--ink);
    filter: drop-shadow(0 6px 34px rgba(0, 0, 0, .7));
  }
  .game-lobby .hint {
    color: var(--muted);
    font-size: .78rem;
    letter-spacing: .04em;
    text-align: center;
    margin-top: -.4rem;
    max-width: 34ch;
    line-height: 1.5;
  }
  .game-lobby .col {
    --stack-gap: .6rem;
    width: 100%;
    max-width: 18.75rem;
  }
  .game-lobby .col .choice {
    width: 100%;
  }
  .game-lobby .actions {
    --cluster-gap: .7rem;
    justify-content: center;
    margin-top: .2rem;
  }
  .game-lobby .choice {
    font-family: inherit;
    font-size: .82rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--ink);
    background: rgb(74 58 102 / .18);
    border: 1px solid rgb(var(--border-c) / .35);
    border-radius: var(--radius-sm);
    padding: .62rem 1.15rem;
    cursor: pointer;
    transition: .15s;
  }
  .game-lobby a.choice {
    display: block;
    text-align: center;
    text-decoration: none;
  }
  .game-lobby .choice:hover,
  .game-lobby .choice:focus-visible {
    background: rgb(95 224 196 / .14);
    border-color: var(--aqua);
    box-shadow: 0 0 18px rgb(95 224 196 / .25);
    outline: none;
  }
  .game-lobby .choice:disabled {
    opacity: .32;
    cursor: not-allowed;
    box-shadow: none;
    border-color: rgb(var(--border-c) / .35);
    background: rgb(74 58 102 / .18);
  }
  .game-lobby .primary {
    font-family: inherit;
    font-size: .82rem;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--on-warm);
    background:
      linear-gradient(
        90deg,
        var(--coral),
        var(--gold));
    border: 0;
    border-radius: var(--radius-sm);
    padding: calc(.62rem + 1px) calc(1.15rem + 1px);
    cursor: pointer;
    transition: .15s;
  }
  .game-lobby .primary:hover {
    filter: brightness(1.08);
    box-shadow: 0 0 24px rgb(var(--glow-warm) / .55);
  }
  .game-lobby .primary:disabled {
    opacity: .32;
    cursor: not-allowed;
    filter: none;
    box-shadow: none;
  }
  .game-lobby .back {
    font-family: inherit;
    font-size: .82rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--muted);
    background: none;
    border: 0;
    padding: .62rem 1.15rem;
    cursor: pointer;
    transition: color .15s;
  }
  .game-lobby .back:hover {
    color: var(--ink);
  }
  .game-lobby .slots {
    --stack-gap: .5rem;
    width: 100%;
  }
  .game-lobby .slot {
    display: flex;
    align-items: center;
    gap: .4rem;
    padding: .5rem .55rem;
    border: 1px solid rgb(var(--border-c) / .28);
    border-radius: var(--radius-md);
    background: rgb(40 30 58 / .72);
  }
  .game-lobby .slot[data-you] {
    border-color: rgb(255 122 107 / .7);
    box-shadow: inset 0 0 0 1px rgb(255 122 107 / .35), 0 0 16px rgb(255 122 107 / .12);
  }
  .game-lobby .slot[data-empty] {
    border-style: dashed;
    border-color: rgb(var(--border-c) / .3);
    background: rgb(40 30 58 / .3);
  }
  .game-lobby .slot[data-empty] .name {
    color: var(--muted);
  }
  .game-lobby .acc {
    width: 2.5rem;
    height: 2.5rem;
    flex: none;
    display: grid;
    place-items: center;
    border-radius: .625rem;
    background: rgb(0 0 0 / .32);
    border: 1px solid rgb(var(--border-c) / .25);
  }
  .game-lobby .acc[data-kind=bot] {
    border-color: rgb(154 230 110 / .4);
  }
  .game-lobby .acc[data-kind=empty] {
    color: var(--muted);
    border-style: dashed;
  }
  .game-lobby .ship {
    width: 2.5rem;
    height: 2.5rem;
    flex: none;
    display: grid;
    place-items: center;
    border-radius: .625rem;
    background: rgb(0 0 0 / .32);
    border: 1px solid rgb(var(--border-c) / .2);
  }
  .game-lobby .ship[data-empty] {
    background: transparent;
    border-style: dashed;
    border-color: rgb(var(--border-c) / .22);
  }
  .game-lobby .name {
    flex: 1;
    min-width: 0;
    margin-left: .5rem;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: .14rem;
    font-size: .95rem;
    letter-spacing: .02em;
    color: var(--ink);
  }
  .game-lobby .tag {
    color: var(--muted);
    font-size: .63rem;
    letter-spacing: .1em;
    text-transform: uppercase;
  }
  .game-lobby .controls {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: .45rem;
  }
  .game-lobby .act {
    font-family: inherit;
    height: 2rem;
    padding: 0 .85rem;
    font-size: .66rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--ink);
    background: rgb(74 58 102 / .18);
    border: 1px solid rgb(var(--border-c) / .35);
    border-radius: var(--radius-sm);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: .15s;
  }
  .game-lobby .act:hover {
    background: rgb(95 224 196 / .14);
    border-color: var(--aqua);
    box-shadow: 0 0 18px rgb(95 224 196 / .25);
  }
  .game-lobby .x {
    width: var(--control-h-sm);
    height: var(--control-h-sm);
    flex: none;
    padding: 0;
    border-radius: .45rem;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--muted);
    background: rgb(74 58 102 / .18);
    border: 1px solid rgb(var(--border-c) / .35);
    cursor: pointer;
    transition: .15s;
  }
  .game-lobby .x:hover {
    border-color: var(--danger);
    color: #fff;
    background: rgb(194 69 107 / .2);
  }
  .game-lobby .rooms {
    --stack-gap: .5rem;
    width: 100%;
    max-height: 44vh;
    overflow-y: auto;
  }
  .game-lobby .mini {
    padding: .42rem .9rem;
    font-size: .72rem;
  }
  .game-lobby .empty {
    color: var(--muted);
    font-size: .84rem;
    text-align: center;
    padding: 1.2rem;
    line-height: 1.6;
  }
}

/* css/blocks/game-chat.css */
@layer blocks {
  .game-chat {
    position: absolute;
    left: var(--gutter);
    bottom: var(--pad-end);
    z-index: 3;
    width: clamp(15rem, 21vw, 19.5rem);
    max-height: min(46vh, 24rem);
    display: flex;
    flex-direction: column;
    background: var(--surface-panel);
    border: 1px solid rgb(var(--border-c) / .22);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-panel);
    overflow: hidden;
  }
  .game-chat .tabs {
    display: flex;
    border-bottom: 1px solid rgb(var(--border-c) / .18);
  }
  .game-chat .tab {
    flex: 1;
    padding: .55rem .5rem;
    font: inherit;
    font-size: .76rem;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--muted);
    background: none;
    border: 0;
    border-bottom: 2px solid transparent;
    cursor: pointer;
    transition: color var(--ease-out) .15s, border-color var(--ease-out) .15s;
  }
  .game-chat .tab:hover {
    color: var(--ink);
  }
  .game-chat .tab[data-active] {
    color: var(--ink);
    border-bottom-color: var(--coral);
  }
  .game-chat .log {
    flex: 1;
    display: flex;
    flex-direction: column-reverse;
    gap: .35rem;
    padding: .65rem .7rem;
    overflow-y: auto;
    overscroll-behavior: contain;
  }
  .game-chat .empty {
    color: var(--muted);
    font-size: .78rem;
    text-align: center;
    margin: auto 0;
  }
  .game-chat .msg {
    font-size: .82rem;
    line-height: 1.4;
    word-break: break-word;
  }
  .game-chat .at {
    color: var(--muted);
    font-size: .66rem;
    margin-right: .3rem;
    opacity: .7;
  }
  .game-chat .who {
    color: var(--coral);
    font-weight: 600;
    margin-right: .35rem;
  }
  .game-chat .who::after {
    content: ":";
    color: var(--muted);
  }
  .game-chat .body {
    color: var(--ink);
  }
  .game-chat .compose {
    display: flex;
    gap: .4rem;
    padding: .55rem;
    border-top: 1px solid rgb(var(--border-c) / .18);
  }
  .game-chat .field {
    flex: 1;
    min-width: 0;
    padding: .45rem .6rem;
    font: inherit;
    font-size: .82rem;
    color: var(--ink);
    background: rgb(var(--border-c) / .1);
    border: 1px solid rgb(var(--border-c) / .22);
    border-radius: var(--radius-sm);
  }
  .game-chat .field::placeholder {
    color: var(--muted);
  }
  .game-chat .field:focus-visible {
    outline: none;
    border-color: rgb(var(--glow-warm) / .6);
  }
  .game-chat .send {
    flex: none;
    width: 2.2rem;
    font-size: .9rem;
    color: var(--on-warm);
    background:
      linear-gradient(
        90deg,
        var(--coral),
        var(--gold));
    border: 0;
    border-radius: var(--radius-sm);
    cursor: pointer;
  }
  .game-chat .send:hover {
    filter: brightness(1.08);
  }
  .game-chat .field:disabled,
  .game-chat .send:disabled {
    opacity: .55;
    cursor: not-allowed;
    filter: none;
  }
  @media (max-width: 64rem) {
    .game-chat {
      display: none;
    }
  }
}

/* css/blocks/player.css */
@layer blocks {
  .player {
    position: fixed;
    right: var(--gutter);
    bottom: var(--dock-bottom);
    z-index: 9000;
    display: inline-flex;
    align-items: center;
    gap: 0.625rem;
    padding: 0.25rem 0.75rem;
    border: 1px solid rgb(var(--border-c) / .28);
    border-radius: var(--radius-pill);
    background: rgba(11, 7, 16, .82);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    box-shadow: 0 12px 36px rgba(0, 0, 0, .5);
    font-family: var(--font);
  }
  .player-btn {
    width: 1.875rem;
    height: 1.875rem;
    flex: none;
    padding: 0;
    border: 0;
    border-radius: 50%;
    cursor: pointer;
    display: grid;
    place-items: center;
    color: var(--on-warm);
    background:
      linear-gradient(
        135deg,
        var(--coral),
        var(--gold));
    box-shadow: 0 0 16px rgb(var(--glow-warm) / .45);
    transition: filter .15s, box-shadow .15s;
  }
  .player-btn:hover {
    filter: brightness(1.08);
    box-shadow: 0 0 24px rgb(var(--glow-warm) / .7);
  }
  .player-btn svg {
    width: 0.9375rem;
    height: 0.9375rem;
    fill: currentColor;
  }
  .player .ico-stop {
    display: none;
  }
  .player[data-playing] .ico-play {
    display: none;
  }
  .player[data-playing] .ico-stop {
    display: block;
  }
  .player-vol {
    width: 0.5625rem;
    height: 1.875rem;
    flex: none;
    overflow: visible;
    cursor: pointer;
    touch-action: none;
    margin-left: -0.625rem;
  }
  .player-vol .player-vol-track {
    fill: none;
    stroke: rgb(var(--border-c) / .35);
    stroke-width: 4.5;
    stroke-linecap: round;
  }
  .player-vol .player-vol-fill {
    fill: none;
    stroke: var(--gold);
    stroke-width: 4.5;
    stroke-linecap: round;
  }
  .player-bars {
    display: flex;
    align-items: flex-end;
    gap: 0.125rem;
    height: 1rem;
  }
  .player-bars span {
    width: 0.15625rem;
    height: 100%;
    border-radius: 0.125rem;
    transform: scaleY(.12);
    transform-origin: bottom;
    background:
      linear-gradient(
        180deg,
        var(--gold),
        var(--coral));
    transition: transform .05s linear;
  }
}

/* css/blocks/transition.css */
@layer blocks {
  #warp {
    position: fixed;
    inset: 0;
    z-index: 9500;
    pointer-events: none;
    overflow: hidden;
    --warp-edge: rgba(95, 224, 196, .5);
    --warp-dark: var(--void);
  }
  #warp[data-anim=fade] {
    background: var(--warp-dark);
    opacity: 0;
  }
  #warp[data-anim=fade][data-phase=cover] {
    opacity: 1;
    transition: opacity .2s ease;
  }
  #warp[data-anim=fade][data-phase=reveal] {
    opacity: 0;
    transition: opacity .3s ease;
  }
  #warp[data-anim=blur] {
    opacity: 0;
    background: rgba(11, 7, 16, .5);
    -webkit-backdrop-filter: blur(0);
    backdrop-filter: blur(0);
  }
  #warp[data-anim=blur][data-phase=cover] {
    opacity: 1;
    -webkit-backdrop-filter: blur(18px);
    backdrop-filter: blur(18px);
    transition:
      opacity .18s ease,
      backdrop-filter .26s ease,
      -webkit-backdrop-filter .26s ease;
  }
  #warp[data-anim=blur][data-phase=reveal] {
    opacity: 0;
    -webkit-backdrop-filter: blur(0);
    backdrop-filter: blur(0);
    transition:
      opacity .32s ease,
      backdrop-filter .3s ease,
      -webkit-backdrop-filter .3s ease;
  }
  #warp[data-anim=slide] {
    background: var(--warp-dark);
    transform: translateX(105%);
    box-shadow: -1px 0 0 var(--warp-edge), -24px 0 60px rgba(0, 0, 0, .55);
  }
  #warp[data-anim=slide][data-phase=cover] {
    transform: translateX(0);
    transition: transform .28s var(--ease-warp);
  }
  #warp[data-anim=slide][data-phase=reveal] {
    transform: translateX(-105%);
    transition: transform .34s var(--ease-warp);
  }
  #warp[data-anim=curtains]::before,
  #warp[data-anim=curtains]::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    height: 51%;
    background: var(--warp-dark);
  }
  #warp[data-anim=curtains]::before {
    top: 0;
    transform: translateY(-101%);
    box-shadow: 0 1px 0 var(--warp-edge);
  }
  #warp[data-anim=curtains]::after {
    bottom: 0;
    transform: translateY(101%);
    box-shadow: 0 -1px 0 var(--warp-edge);
  }
  #warp[data-anim=curtains][data-phase=cover]::before,
  #warp[data-anim=curtains][data-phase=cover]::after {
    transform: translateY(0);
    transition: transform .28s var(--ease-warp);
  }
  #warp[data-anim=curtains][data-phase=reveal]::before {
    transform: translateY(-101%);
    transition: transform .34s var(--ease-warp);
  }
  #warp[data-anim=curtains][data-phase=reveal]::after {
    transform: translateY(101%);
    transition: transform .34s var(--ease-warp);
  }
  #warp[data-anim=wipe]::before {
    content: "";
    position: absolute;
    top: -12%;
    left: -25%;
    width: 150%;
    height: 124%;
    background:
      linear-gradient(
        100deg,
        var(--warp-dark) 72%,
        var(--warp-edge) 90%,
        transparent);
    transform: translateX(-135%) skewX(-10deg);
  }
  #warp[data-anim=wipe][data-phase=cover]::before {
    transform: translateX(0) skewX(-10deg);
    transition: transform .3s var(--ease-warp);
  }
  #warp[data-anim=wipe][data-phase=reveal]::before {
    transform: translateX(135%) skewX(-10deg);
    transition: transform .34s var(--ease-warp);
  }
}

/* css/blocks/flash.css */
@layer blocks {
  .flash-group {
    position: fixed;
    top: 1rem;
    right: 1rem;
    z-index: 9800;
    display: flex;
    flex-direction: column;
    gap: 0.625rem;
    align-items: flex-end;
    max-width: min(22.5rem, calc(100vw - 2rem));
  }
  .flash {
    width: 100%;
    display: flex;
    gap: 0.625rem;
    align-items: flex-start;
    padding: 0.75rem 0.875rem;
    border-radius: var(--radius-md);
    border: 1px solid rgb(var(--border-c) / .28);
    background: rgba(22, 16, 33, .96);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    box-shadow: var(--shadow-toast);
    color: var(--ink);
    font-size: .82rem;
    cursor: pointer;
  }
  .flash[data-kind=error] {
    border-color: rgba(194, 69, 107, .6);
  }
  .flash[data-kind=info] {
    border-color: rgba(95, 224, 196, .5);
  }
  .flash-icon {
    flex: none;
    width: 1.25rem;
    height: 1.25rem;
  }
  .flash[data-kind=error] .flash-icon {
    color: var(--danger);
  }
  .flash[data-kind=info] .flash-icon {
    color: var(--aqua);
  }
  .flash-body {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
  }
  .flash-title {
    font-weight: 700;
    letter-spacing: .02em;
  }
  .flash-msg {
    color: var(--muted);
  }
  .flash-close {
    flex: none;
    color: var(--muted);
  }
  .flash-close:hover {
    color: var(--ink);
  }
  .spin {
    animation: spin .8s linear infinite;
  }
  @keyframes spin {
    to {
      transform: rotate(360deg);
    }
  }
  .flash[hidden] {
    display: none;
  }
  .fade {
    transition: opacity .2s ease, transform .2s ease;
  }
  .fade-from {
    opacity: 0;
    transform: translateY(-0.375rem);
  }
  .fade-to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* css/blocks/auth.css */
@layer blocks {
  .auth-shell {
    min-height: 100svh;
    display: grid;
    place-items: center;
    padding: 2rem var(--gutter);
  }
  .auth-page {
    min-height: 100svh;
    display: flex;
    flex-direction: column;
  }
  .auth-page .auth-shell {
    flex: 1;
    min-height: 0;
  }
  .auth-card {
    width: 100%;
    max-width: 26rem;
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
    padding: clamp(1.6rem, 4vw, 2.4rem);
    border-radius: var(--radius-lg);
    border: 1px solid rgb(var(--border-c) / .22);
    background: var(--surface-panel);
    box-shadow: var(--shadow-panel);
  }
  .auth-title {
    font-weight: 700;
    font-size: 1.6rem;
    letter-spacing: .04em;
  }
  .auth-sub {
    color: var(--muted);
    font-size: .85rem;
  }
  .auth-field {
    display: flex;
    flex-direction: column;
    gap: .35rem;
  }
  .auth-label {
    font-size: .72rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--muted);
  }
  .auth-input {
    width: 100%;
    min-height: var(--control-h);
    padding: 0 .8rem;
    font-size: var(--control-font);
    border-radius: var(--radius-sm);
    color: var(--ink);
    background: rgba(11, 7, 16, .6);
    border: 1px solid rgb(var(--border-c) / .35);
    transition: border-color .15s, box-shadow .15s;
  }
  .auth-input:focus {
    outline: none;
    border-color: rgb(var(--aqua-rgb) / .7);
    box-shadow: 0 0 0 3px rgb(var(--aqua-rgb) / .14);
  }
  .auth-error {
    color: var(--danger-text);
    font-size: .78rem;
  }
  .auth-link {
    color: var(--aqua);
    font-size: .82rem;
  }
  .auth-link:hover {
    text-decoration: underline;
  }
  .auth-actions {
    display: flex;
    flex-direction: column;
    gap: .6rem;
    margin-top: .2rem;
  }
  .auth-strategies {
    display: flex;
    flex-direction: column;
    gap: 1rem;
  }
  .auth-submit {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: var(--control-h);
    border: 0;
    padding: 0 1rem;
    border-radius: var(--radius-sm);
    cursor: pointer;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    font-size: .82rem;
    background:
      linear-gradient(
        90deg,
        var(--coral),
        var(--gold));
    color: var(--on-warm);
    box-shadow: 0 0 24px rgb(var(--glow-warm) / .4);
    transition: .2s;
  }
  .auth-submit:hover {
    filter: brightness(1.08);
    box-shadow: 0 0 30px rgb(var(--glow-warm) / .6);
  }
  .auth-input-error {
    border-color: var(--danger);
  }
  .auth-interstitial {
    display: flex;
    justify-content: space-between;
    gap: .5rem;
    flex-wrap: wrap;
    font-size: .8rem;
  }
  .auth-divider {
    display: flex;
    align-items: center;
    gap: .6rem;
    color: var(--muted);
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .14em;
    margin: .4rem 0;
  }
  .auth-divider::before,
  .auth-divider::after {
    content: "";
    flex: 1;
    height: 0.0625rem;
    background: rgb(var(--border-c) / .25);
  }
  .auth-remember {
    display: flex;
    align-items: center;
    gap: .5rem;
    font-size: .8rem;
    color: var(--muted);
  }
  .auth-flash-info,
  .auth-flash-error {
    position: fixed;
    top: 1rem;
    right: 1rem;
    z-index: 9800;
    max-width: 22.5rem;
    padding: 0.75rem 0.875rem;
    border-radius: var(--radius-md);
    font-size: .82rem;
    color: var(--ink);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    box-shadow: var(--shadow-toast);
  }
  .auth-flash-info {
    background: rgba(95, 224, 196, .15);
    border: 1px solid rgba(95, 224, 196, .5);
  }
  .auth-flash-error {
    background: rgba(194, 69, 107, .15);
    border: 1px solid rgba(194, 69, 107, .6);
  }
  .auth-providers,
  .auth-email-step {
    display: flex;
    flex-direction: column;
    gap: .7rem;
  }
  .auth-providers .btn {
    width: 100%;
    gap: .5rem;
  }
  .auth-actions .btn {
    width: 100%;
  }
  .auth-email-step .btn[data-variant=ghost] {
    align-self: flex-start;
    gap: .45rem;
  }
  .auth-back-arrow {
    width: 1.35rem;
    height: 1.35rem;
  }
}

/* css/blocks/profile.css */
@layer blocks {
  .profile {
    max-width: 30rem;
    margin: 0 auto;
  }
  .profile h1 {
    font-size: 1.6rem;
    font-weight: 700;
    letter-spacing: .04em;
  }
  .profile-note {
    color: var(--muted);
    font-size: .85rem;
  }
  .profile-card {
    padding: 1.4rem 1.6rem;
    border-radius: 1rem;
    border: 1px solid rgb(var(--border-c) / .22);
    background: rgba(27, 20, 48, .6);
  }
  .profile-row {
    display: flex;
    gap: .5rem;
  }
  .profile-row .profile-key {
    color: var(--muted);
  }
  .badge {
    font-size: .62rem;
    letter-spacing: .1em;
    text-transform: uppercase;
    padding: .18rem .5rem;
    border-radius: var(--radius-pill);
    font-weight: 700;
  }
  .badge[data-tone=ok] {
    color: var(--on-cool);
    background: var(--lime);
  }
  .badge[data-tone=warn] {
    color: var(--on-warm);
    background: var(--gold);
  }
  .danger-zone {
    border-color: rgb(var(--danger-rgb, 194 69 107) / .4);
    background: rgba(194, 69, 107, .06);
  }
  .danger-title {
    font-size: 1rem;
    font-weight: 700;
    letter-spacing: .04em;
    color: var(--danger-text);
  }
}

/* css/blocks/info.css */
@layer blocks {
  .info {
    max-width: 42rem;
    margin: 0 auto;
    padding-block: 1rem 2rem;
  }
  .info h1 {
    font-size: clamp(1.6rem, 4vw, 2.2rem);
    font-weight: 800;
    letter-spacing: .03em;
  }
  .info p {
    color: var(--ink);
    line-height: 1.7;
  }
  .info h2 {
    font-size: clamp(1.1rem, 2.5vw, 1.35rem);
    font-weight: 700;
    letter-spacing: .02em;
    margin-top: 1.4rem;
  }
  .info ul {
    color: var(--ink);
    line-height: 1.7;
    padding-left: 1.2rem;
    list-style: disc;
  }
  .info li + li {
    margin-top: .35rem;
  }
  .info a {
    color: #6fe6cb;
    text-decoration: underline;
    text-underline-offset: .15em;
  }
  .info a:hover {
    color: #a9f2e0;
  }
  .info-meta {
    font-size: .78rem;
    color: var(--muted);
    letter-spacing: .06em;
    text-transform: uppercase;
  }
  @media (prefers-reduced-motion: no-preference) {
    .info {
      animation: info-in 460ms cubic-bezier(.22, .61, .36, 1) both;
    }
    @keyframes info-in {
      from {
        opacity: 0;
        transform: translateY(14px);
      }
      to {
        opacity: 1;
        transform: none;
      }
    }
  }
}

/* css/blocks/footer.css */
@layer blocks {
  .site-footer {
    position: fixed;
    right: var(--gutter);
    bottom: var(--footer-bottom);
    z-index: 50;
    display: flex;
    align-items: center;
    gap: .4rem 1.1rem;
    font-size: .72rem;
    color: var(--muted);
  }
  .footer-brand {
    letter-spacing: .06em;
  }
  .footer-links {
    display: flex;
    gap: 1.1rem;
  }
  .footer-links a {
    color: var(--muted);
    text-decoration: none;
    letter-spacing: .04em;
    transition: color .15s;
  }
  .footer-links a:hover {
    color: var(--ink);
  }
  .stage-content .site-footer {
    opacity: .85;
  }
}

/* css/utilities.css */
@layer utilities {
  .icon {
    width: 1.25rem;
    height: 1.25rem;
    display: inline-block;
    vertical-align: middle;
    flex: none;
  }
  .hidden {
    display: none;
  }
  .contents {
    display: contents;
  }
}

/* css/app.css */
