/* ======================================================
   Giglio Fiorito.exe — secret mini-game
====================================================== */

.giglio-hole {
  position: fixed;
  left: clamp(18px, 3vw, 42px);
  bottom: clamp(18px, 4vw, 42px);
  width: 46px;
  height: 46px;
  border: 1px solid rgba(0, 220, 255, .18);
  border-radius: 50%;
  background:
    radial-gradient(circle at 50% 50%, rgba(0, 225, 255, .20), rgba(64, 114, 255, .08) 42%, rgba(0,0,0,.48) 74%),
    rgba(0, 0, 0, .26);
  box-shadow:
    0 0 16px rgba(0, 191, 255, .16),
    inset 0 0 16px rgba(0, 191, 255, .08);
  z-index: 18500;
  opacity: .42;
  cursor: inherit;
  overflow: hidden;
  transition: opacity .25s ease, transform .25s ease, box-shadow .25s ease;
}

.giglio-hole:hover,
.giglio-hole:focus-visible {
  opacity: 1;
  transform: scale(1.08);
  outline: none;
  box-shadow:
    0 0 24px rgba(0, 220, 255, .42),
    0 0 42px rgba(64, 114, 255, .18),
    inset 0 0 18px rgba(0, 191, 255, .16);
}

.hole-ring {
  position: absolute;
  inset: 7px;
  border-radius: inherit;
  border: 1px dashed rgba(130, 245, 255, .42);
  animation: holeSpin 7s linear infinite;
}

.hole-core {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  color: rgba(175, 248, 255, .78);
  font: 700 .58rem/1 "Courier New", monospace;
  letter-spacing: .08em;
  text-shadow: 0 0 8px rgba(0, 220, 255, .72);
  animation: holeFlicker 2.8s steps(2, end) infinite;
}

@keyframes holeSpin { to { transform: rotate(360deg); } }
@keyframes holeFlicker {
  0%, 82%, 100% { opacity: .46; }
  86% { opacity: 1; transform: translateX(1px); }
  88% { opacity: .22; transform: translateX(-1px); }
  92% { opacity: .86; transform: translateX(0); }
}

.giglio-loading {
  position: fixed;
  inset: 0;
  display: grid;
  place-items: center;
  align-content: center;
  gap: .7rem;
  background:
    radial-gradient(circle at 50% 48%, rgba(0, 220, 255, .18), transparent 34%),
    radial-gradient(circle at 50% 50%, rgba(64, 114, 255, .12), transparent 55%),
    rgba(0, 0, 0, .88);
  z-index: 50000;
  opacity: 0;
  pointer-events: none;
  transition: opacity .32s ease;
}

.giglio-loading.is-active {
  opacity: 1;
  pointer-events: auto;
}

.loading-orb {
  width: 74px;
  height: 74px;
  border-radius: 50%;
  border: 1px solid rgba(0, 225, 255, .34);
  background: radial-gradient(circle, rgba(255,255,255,.30), rgba(0,220,255,.22) 38%, transparent 72%);
  box-shadow: 0 0 30px rgba(0, 220, 255, .38);
  animation: loadingOrb 1.1s ease-in-out infinite, loadingGlitch 1.9s steps(2,end) infinite;
}

.giglio-loading p {
  margin: 0;
  color: #dffcff;
  font: 700 clamp(1rem, 3vw, 1.35rem)/1.2 "Courier New", monospace;
  letter-spacing: .06em;
  text-shadow: 0 0 12px rgba(0, 220, 255, .62);
}

.giglio-loading span {
  color: rgba(210, 250, 255, .64);
  font-size: .86rem;
}

@keyframes loadingOrb {
  0%, 100% { transform: scale(.92); }
  50% { transform: scale(1.08); }
}
@keyframes loadingGlitch {
  0%, 76%, 100% { filter: hue-rotate(0deg); }
  80% { filter: hue-rotate(15deg) contrast(1.4); transform: translateX(2px); }
  82% { transform: translateX(-2px); }
}

.giglio-game {
  position: fixed;
  inset: 0;
  z-index: 48000;
  display: none;
  overflow: auto;
  padding: clamp(18px, 4vw, 42px);
  background:
    radial-gradient(circle at 25% 20%, rgba(0, 220, 255, .12), transparent 32%),
    radial-gradient(circle at 75% 70%, rgba(64, 114, 255, .10), transparent 38%),
    linear-gradient(180deg, rgba(0,0,0,.94), rgba(0,10,16,.97));
}

.giglio-game.is-active {
  display: block;
}

.game-shell {
  width: min(980px, 100%);
  margin: 0 auto;
  padding: clamp(1rem, 3vw, 1.6rem);
  border: 1px solid rgba(0, 220, 255, .20);
  border-radius: 28px;
  background:
    linear-gradient(135deg, rgba(3, 15, 24, .78), rgba(0, 34, 50, .46));
  box-shadow:
    0 0 28px rgba(0, 191, 255, .12),
    inset 0 0 18px rgba(0, 191, 255, .04);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}

.game-header {
  display: flex;
  gap: 1rem;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: 1rem;
}

.game-kicker {
  margin: 0 0 .25rem;
  color: #8ff4ff;
  font: 700 .75rem/1.2 "Courier New", monospace;
  letter-spacing: .12em;
  text-transform: uppercase;
}

.game-header h1 {
  margin: 0;
  font-size: clamp(1.8rem, 5vw, 3.2rem);
  color: #effcff;
  text-shadow: 0 0 18px rgba(0, 220, 255, .32);
}

.game-subtitle {
  margin: .5rem 0 0;
  max-width: 680px;
  color: rgba(235, 252, 255, .75);
}

.return-site,
.game-btn {
  border: 1px solid rgba(0, 220, 255, .26);
  border-radius: 999px;
  padding: .72rem .95rem;
  background: rgba(0, 191, 255, .08);
  color: #dffcff;
  cursor: inherit;
  box-shadow: 0 0 12px rgba(0, 191, 255, .10);
}

.return-site:hover,
.game-btn:hover {
  background: rgba(0, 191, 255, .14);
  box-shadow: 0 0 18px rgba(0, 220, 255, .22);
}

.game-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: .7rem;
  align-items: center;
  margin: 1rem 0 .7rem;
}

.game-stat {
  min-width: 92px;
  padding: .55rem .75rem;
  border-radius: 16px;
  background: rgba(0,0,0,.22);
  border: 1px solid rgba(0, 191, 255, .12);
}

.game-stat span {
  display: block;
  font-size: .68rem;
  color: rgba(190, 245, 255, .62);
  text-transform: uppercase;
  letter-spacing: .08em;
}

.game-stat strong {
  color: #e8fdff;
}

.game-help {
  margin: .4rem 0 1rem;
  color: rgba(220, 250, 255, .62);
  font-size: .84rem;
}

.giglio-board {
  --cell: min(9.5vw, 42px);
  display: grid;
  grid-template-columns: repeat(10, var(--cell));
  gap: 5px;
  justify-content: center;
  padding: clamp(.8rem, 3vw, 1.2rem);
  border-radius: 22px;
  background:
    radial-gradient(circle at 50% 50%, rgba(0, 220, 255, .08), transparent 62%),
    rgba(0, 0, 0, .18);
  border: 1px solid rgba(0, 191, 255, .10);
}

.cell {
  width: var(--cell);
  height: var(--cell);
  border: 1px solid rgba(0, 220, 255, .14);
  border-radius: 12px;
  background:
    linear-gradient(135deg, rgba(0, 191, 255, .08), rgba(64, 114, 255, .035)),
    rgba(0,0,0,.28);
  color: #dffcff;
  font: 800 clamp(.75rem, 3vw, 1rem)/1 "Segoe UI", sans-serif;
  display: grid;
  place-items: center;
  cursor: inherit;
  box-shadow: inset 0 0 8px rgba(0, 191, 255, .04);
  transition: transform .14s ease, background .16s ease, border-color .16s ease, box-shadow .16s ease;
  user-select: none;
}

.cell:hover {
  transform: translateY(-1px) scale(1.03);
  border-color: rgba(0, 220, 255, .35);
  box-shadow: 0 0 12px rgba(0, 220, 255, .12);
}

.cell.revealed {
  background: rgba(0, 25, 36, .42);
  border-color: rgba(0, 220, 255, .08);
  transform: none;
}

.cell.flagged::after {
  content: "✦";
  color: #8ff4ff;
  text-shadow: 0 0 10px rgba(0, 220, 255, .85);
}

.cell.lily {
  background: radial-gradient(circle, rgba(0,220,255,.36), rgba(64,114,255,.12) 46%, rgba(0,0,0,.34));
  box-shadow: 0 0 20px rgba(0, 220, 255, .35);
}

.cell.lily::after { content: "✿"; }

.cell.feather::after {
  content: "🪶";
  filter: drop-shadow(0 0 8px rgba(0,220,255,.8));
}

.cell.safe-0 { color: transparent; }
.cell.safe-1 { color: #9ef4ff; }
.cell.safe-2 { color: #65d6ff; }
.cell.safe-3 { color: #4072ff; }
.cell.safe-4, .cell.safe-5, .cell.safe-6, .cell.safe-7, .cell.safe-8 { color: #ffffff; }

.cell.scan-danger {
  animation: dangerReveal 1.25s ease both;
}

@keyframes dangerReveal {
  0%, 100% { box-shadow: 0 0 0 rgba(0, 220, 255, 0); }
  18%, 72% {
    background: radial-gradient(circle, rgba(0, 220, 255, .32), rgba(64, 114, 255, .12));
    box-shadow: 0 0 22px rgba(0, 220, 255, .42);
  }
}

@media (max-width: 620px) {
  .game-header {
    flex-direction: column;
  }

  .return-site {
    width: 100%;
  }

  .giglio-board {
    --cell: min(8.5vw, 34px);
    gap: 4px;
  }

  .cell {
    border-radius: 9px;
  }
}

@media (hover: none) and (pointer: coarse) {
  .giglio-hole {
    width: 42px;
    height: 42px;
    opacity: .55;
  }
}

/* ======================================================
   Giglio Fiorito.exe v40 — clarity, levels, modal, mobile, teleporting hole
====================================================== */

.giglio-hole {
  width: 34px !important;
  height: 34px !important;
  opacity: .34;
  transition:
    opacity .24s ease,
    transform .34s cubic-bezier(.18,.82,.22,1),
    box-shadow .24s ease,
    left .42s steps(2,end),
    top .42s steps(2,end) !important;
  animation: holeIdleGlitchV40 3.6s steps(2,end) infinite;
}

.giglio-hole:hover,
.giglio-hole:focus-visible {
  opacity: 1;
  transform: scale(1.18) rotate(-2deg);
}

.hole-ring {
  inset: 6px !important;
  animation: holeSpin 5.8s linear infinite, holeRingWarpV40 2.7s ease-in-out infinite !important;
}

.hole-core {
  font-size: .48rem !important;
}

.giglio-hole.is-teleporting {
  opacity: 0 !important;
  transform: scale(.35) rotate(22deg) skewX(12deg);
  filter: blur(1px) contrast(1.8);
}

.giglio-hole.has-arrived {
  animation: holeArrivalV40 .52s ease-out both, holeIdleGlitchV40 3.6s steps(2,end) infinite .52s;
}

@keyframes holeIdleGlitchV40 {
  0%, 78%, 100% { filter: none; }
  80% { filter: hue-rotate(16deg) contrast(1.5); transform: translateX(1px); }
  82% { transform: translateX(-1px); opacity: .78; }
  84% { transform: translateX(0); }
}

@keyframes holeRingWarpV40 {
  0%, 100% { border-radius: 50%; transform: scale(1); }
  50% { border-radius: 42% 58% 51% 49%; transform: scale(1.08); }
}

@keyframes holeArrivalV40 {
  0% { opacity: 0; transform: scale(.35) rotate(-28deg); filter: blur(1.2px); }
  55% { opacity: 1; transform: scale(1.32) rotate(5deg); filter: blur(0); }
  100% { opacity: .45; transform: scale(1) rotate(0); }
}

.giglio-game { padding: clamp(12px, 2.5vw, 30px); }
.game-shell { width: min(1040px, 100%); min-height: calc(100dvh - 60px); display: flex; flex-direction: column; }
.game-header { align-items: center; }
.game-toolbar { justify-content: center; }
.game-stat { text-align: center; }
.key-owned { color: #dffcff !important; text-shadow: 0 0 10px rgba(0,220,255,.75); }
.key-search { color: #9ef4ff !important; }

.cell {
  background: linear-gradient(145deg, rgba(0,45,62,.72), rgba(0,12,18,.82)) !important;
  border:1px solid rgba(0,220,255,.24) !important;
  box-shadow: inset 0 0 12px rgba(0,220,255,.045);
}

.cell.revealed {
  background: linear-gradient(145deg, rgba(0,20,28,.38), rgba(0,5,8,.26)) !important;
  border-color: rgba(170,245,255,.08) !important;
  opacity: .82;
  box-shadow: inset 0 0 18px rgba(255,255,255,.025), inset 0 0 8px rgba(0,220,255,.035) !important;
}

.cell.revealed:not(.lily):not(.feather):not(.key-cell):not(.door-cell) { color: rgba(215,252,255,.92); }
.cell.flagged { border-color: rgba(160,245,255,.46) !important; background: radial-gradient(circle at 50% 45%, rgba(0,220,255,.18), rgba(0,15,22,.88)) !important; }
.cell.lily { opacity: 1; border-color: rgba(0,230,255,.62) !important; }
.cell.feather,.cell.key-cell,.cell.door-cell { opacity:1; border-color: rgba(220,255,255,.42) !important; background: radial-gradient(circle at 50% 45%, rgba(0,220,255,.26), rgba(64,114,255,.10) 48%, rgba(0,0,0,.32)) !important; }
.cell.key-cell::after { content:"⚿"; color:#dffcff; text-shadow:0 0 12px rgba(0,220,255,.9); }
.cell.door-cell::after { content:"▣"; color:#fff; text-shadow:0 0 14px rgba(64,114,255,.9); }

.lore-line { margin:1rem auto 0; max-width:760px; color:rgba(210,250,255,.70); font:600 .95rem/1.5 "Segoe UI",sans-serif; text-align:center; letter-spacing:.02em; text-shadow:0 0 10px rgba(0,220,255,.14); }

.game-modal { position:fixed; inset:0; z-index:51000; display:none; place-items:center; padding:1rem; background:radial-gradient(circle at 50% 42%, rgba(0,220,255,.13), transparent 36%), rgba(0,0,0,.66); backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); }
.game-modal.is-active { display:grid; }
.game-modal-card { width:min(520px,92vw); padding:clamp(1.2rem,4vw,2rem); border-radius:28px; border:1px solid rgba(0,220,255,.24); background:linear-gradient(135deg, rgba(3,15,24,.92), rgba(0,34,50,.74)); box-shadow:0 0 32px rgba(0,220,255,.18), inset 0 0 20px rgba(0,220,255,.05); text-align:center; animation:modalBloom .32s ease-out both; }
.modal-kicker { margin:0 0 .45rem; color:#8ff4ff; font:700 .72rem/1 "Courier New",monospace; letter-spacing:.15em; text-transform:uppercase; }
.game-modal-card h2 { margin:0; color:#effcff; font-size:clamp(1.6rem,5vw,2.5rem); }
.game-modal-card p { color:rgba(225,250,255,.76); }
.modal-actions { display:flex; gap:.7rem; justify-content:center; flex-wrap:wrap; margin-top:1rem; }
@keyframes modalBloom { from{opacity:0; transform:translateY(10px) scale(.96);} to{opacity:1; transform:translateY(0) scale(1);} }

.giglio-board { --cell: clamp(28px, min(7.8vw, 7.8vh), 42px); gap:clamp(3px,.7vw,5px); max-width:100%; overflow:auto; }

@media (max-width:760px){
  .game-shell{min-height:calc(100dvh - 28px); padding:.9rem;}
  .game-header{flex-direction:column;text-align:center;}
  .game-toolbar{display:grid; grid-template-columns:repeat(2,minmax(0,1fr));}
  .game-btn,.return-site{width:100%;}
  .giglio-board{--cell:clamp(25px,8.3vw,34px); padding:.65rem;}
  .game-help{text-align:center;font-size:.78rem;}
}

@media (max-width:420px){
  .game-toolbar{grid-template-columns:1fr;}
  .giglio-board{--cell:clamp(22px,8vw,30px); gap:3px;}
  .cell{border-radius:8px;}
}

/* ======================================================
   v41 — Game hub, scanned lilies, language-ready game UI
====================================================== */

.game-shell.is-choosing-game .game-toolbar,
.game-shell.is-choosing-game .game-help,
.game-shell.is-choosing-game .giglio-board,
.game-shell.is-choosing-game .lore-line {
  display: none;
}

.game-hub {
  display: grid;
  grid-template-columns: repeat(4, minmax(120px, 1fr));
  gap: .85rem;
  margin: 1rem 0 1.2rem;
}

.game-card {
  min-height: 150px;
  border: 1px solid rgba(0, 220, 255, .18);
  border-radius: 24px;
  background:
    radial-gradient(circle at 50% 20%, rgba(0, 220, 255, .14), transparent 48%),
    linear-gradient(145deg, rgba(0, 35, 50, .42), rgba(0, 8, 14, .62));
  color: #dffcff;
  cursor: inherit;
  padding: 1rem;
  text-align: center;
  box-shadow: inset 0 0 18px rgba(0, 220, 255, .035);
  transition: transform .22s ease, border-color .22s ease, box-shadow .22s ease, filter .22s ease;
}

.game-card:hover,
.game-card:focus-visible {
  transform: translateY(-3px) scale(1.025);
  border-color: rgba(0, 230, 255, .44);
  box-shadow: 0 0 24px rgba(0, 220, 255, .16), inset 0 0 18px rgba(0, 220, 255, .065);
  outline: none;
}

.game-card:not(.is-playable) {
  opacity: .64;
}

.game-card-icon {
  display: grid;
  place-items: center;
  width: 52px;
  height: 52px;
  margin: 0 auto .7rem;
  border-radius: 50%;
  background: rgba(0, 220, 255, .08);
  border: 1px solid rgba(0, 220, 255, .18);
  color: #9ef4ff;
  text-shadow: 0 0 12px rgba(0, 220, 255, .68);
  font-weight: 800;
}

.game-card strong,
.game-card small {
  display: block;
}

.game-card small {
  margin-top: .45rem;
  color: rgba(220, 250, 255, .62);
  line-height: 1.35;
}

.cell.scanned-lily {
  background:
    radial-gradient(circle at 50% 44%, rgba(0, 220, 255, .30), rgba(64,114,255,.12) 45%, rgba(0, 8, 14, .74)) !important;
  border-color: rgba(0, 235, 255, .62) !important;
  box-shadow:
    0 0 18px rgba(0, 220, 255, .30),
    inset 0 0 18px rgba(0, 220, 255, .08) !important;
  pointer-events: none;
}

.cell.scanned-lily::after {
  content: "✿";
  color: #dffcff;
  text-shadow: 0 0 14px rgba(0, 220, 255, .95);
}

@media (max-width: 820px) {
  .game-hub {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 430px) {
  .game-hub {
    grid-template-columns: 1fr;
  }

  .game-card {
    min-height: 118px;
  }
}

/* ======================================================
   v42 — playable hidden game hub mini-games
====================================================== */
.alt-game-area {
  display: none;
  margin: 1rem auto 0;
  width: min(720px, 100%);
  padding: clamp(.9rem, 3vw, 1.4rem);
  border-radius: 24px;
  border: 1px solid rgba(0,220,255,.16);
  background: rgba(0,0,0,.18);
}

.mini-game-title {
  text-align: center;
  color: #dffcff;
  font-size: clamp(1.3rem, 4vw, 2rem);
  font-weight: 800;
  margin-bottom: 1rem;
  text-shadow: 0 0 16px rgba(0,220,255,.28);
}

.signal-grid {
  width: min(360px, 90vw);
  margin: 0 auto 1rem;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: .75rem;
}

.signal-grid button {
  aspect-ratio: 1;
  min-height: 110px;
}

.door-display {
  width: min(320px, 90%);
  margin: 0 auto 1rem;
  padding: .85rem 1rem;
  border-radius: 18px;
  border: 1px solid rgba(0,220,255,.20);
  color: #dffcff;
  text-align: center;
  font: 800 2rem/1 "Courier New", monospace;
  letter-spacing: .18em;
  background: rgba(0,0,0,.26);
  text-shadow: 0 0 14px rgba(0,220,255,.55);
}

.door-pad {
  width: min(420px, 100%);
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: .7rem;
}

.language-control {
  position: relative;
}

@media (max-width: 480px) {
  .memory-grid { gap: .45rem; }
  .memory-card { min-height: 54px; }
  .door-pad { grid-template-columns: repeat(2, 1fr); }
}

/* ======================================================
   v43 — fixed game hub alternates + catcher/runner
====================================================== */
.alt-game-area {
  display: none;
  margin: 1rem auto 0;
  width: min(760px, 100%);
  padding: clamp(.9rem, 3vw, 1.4rem);
  border-radius: 24px;
  border: 1px solid rgba(0,220,255,.16);
  background: rgba(0,0,0,.18);
}

.memory-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(54px, 1fr));
  gap: .65rem;
}

.memory-card,
.signal-grid button,
.door-pad button {
  min-height: 70px;
  border: 1px solid rgba(0,220,255,.22);
  border-radius: 18px;
  background: linear-gradient(145deg, rgba(0,45,62,.58), rgba(0,12,18,.82));
  color: #dffcff;
  font-size: 1.25rem;
  cursor: inherit;
  text-shadow: 0 0 10px rgba(0,220,255,.45);
}

.memory-card.open {
  background: radial-gradient(circle, rgba(0,220,255,.28), rgba(0,15,22,.72));
  box-shadow: 0 0 18px rgba(0,220,255,.16);
}

.signal-grid {
  width: min(440px, 92vw);
  margin: 0 auto 1rem;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: .75rem;
}

.signal-grid.seven button:last-child {
  grid-column: 2;
}

.signal-grid button {
  aspect-ratio: 1;
  min-height: 82px;
}

.signal-grid button.active {
  background: radial-gradient(circle, rgba(255,255,255,.54), rgba(0,220,255,.36), rgba(64,114,255,.18));
  box-shadow: 0 0 28px rgba(0,220,255,.55);
}

.signal-start {
  display: block;
  margin: 0 auto;
}

.catcher-stage,
.runner-stage {
  position: relative;
  width: min(560px, 92vw);
  height: min(54vh, 420px);
  min-height: 280px;
  margin: 0 auto 1rem;
  border: 1px solid rgba(0,220,255,.18);
  border-radius: 24px;
  overflow: hidden;
  background:
    radial-gradient(circle at 50% 20%, rgba(0,220,255,.12), transparent 38%),
    linear-gradient(180deg, rgba(0,20,30,.42), rgba(0,0,0,.38));
}

.catcher-player {
  position: absolute;
  left: 50%;
  bottom: 18px;
  transform: translateX(-50%);
  font-size: 2rem;
  filter: drop-shadow(0 0 10px rgba(0,220,255,.75));
}

.falling {
  position: absolute;
  top: 0;
  border: 0;
  background: transparent;
  color: #dffcff;
  font-size: 1.4rem;
  cursor: inherit;
  filter: drop-shadow(0 0 10px rgba(0,220,255,.48));
}

.falling.bad {
  color: #8ff4ff;
}

.runner-player {
  position: absolute;
  left: 48px;
  bottom: 42px;
  font-size: 2rem;
  transition: bottom .22s ease;
  filter: drop-shadow(0 0 10px rgba(0,220,255,.75));
}

.runner-player.jump {
  bottom: 150px;
}

.runner-obstacle {
  position: absolute;
  right: -40px;
  bottom: 42px;
  font-size: 2rem;
  color: #dffcff;
  animation: runnerObstacle 2.1s linear forwards;
  filter: drop-shadow(0 0 12px rgba(0,220,255,.48));
}

@keyframes runnerObstacle {
  to { transform: translateX(-680px); }
}

.mini-hud {
  text-align: center;
  color: rgba(220,250,255,.8);
  font-weight: 700;
}

@media (max-width: 480px) {
  .memory-grid { grid-template-columns: repeat(4, 1fr); gap: .45rem; }
  .memory-card { min-height: 54px; }
  .signal-grid button { min-height: 64px; }
}
