/* Screen-specific styles: start screen, settings, setup, Travel mode (mode pick, locations, levels), language switch, achievements, wheel of fortune, tutorial. */

  /* ---------- START SCREEN ----------
     Sized with vh-based clamp()s (not fixed px) so the whole menu keeps fitting a normal browser window
     at 100% zoom without needing to scroll — it only shrinks when the viewport is actually short, and
     stays at its original comfortable size on tall/generous ones. Scoped to #screenStart only; every
     other screen's buttons/spacing are untouched. */
  #screenStart{ align-items:center; justify-content:center; text-align:center; gap: clamp(10px, 2.2vh, 18px); }

  /* the start screen has no coin HUD (see COIN_HUD_SCREENS in ui.js), so it doesn't need the 58px of
     top clearance the other screens reserve for it — reclaiming it keeps the whole main menu on-screen
     without a scrollbar in short embed frames (Y8's "no scrollbar" fix, carried over) */
  .app:has(#screenStart.active){ padding-top: 8px; padding-bottom: 8px; }

  #screenStart .gallows-deco svg{ width: clamp(96px, 17vh, 150px); height: clamp(93px, 16.4vh, 145px); }

  #screenStart .gallows-deco path, #screenStart .gallows-deco line{
    fill:none; stroke: var(--ink); stroke-width:4.5; stroke-linecap:round;
  }

  #screenStart .title-word{ display:flex; justify-content:center; gap:10px; margin: 4px 0 0; }

  #screenStart .title-word .slot{ font-size: clamp(28px, 4.6vh, 40px); min-width: 26px; }

  #screenStart .stack{ display:flex; flex-direction:column; gap: clamp(8px, 1.6vh, 12px); width: min(260px, 80vw); margin-top: clamp(4px, 1.2vh, 10px); }

  #screenStart .stack .btn{ padding: clamp(8px, 1.6vh, 12px) 22px; font-size: clamp(18px, 3.4vh, 24px); }

  /* "Слово дня" badge, tacked onto the corner of "Играть" — a second, direct entry point into the mode
     straight from the main menu (the mode-pick tile from Play → "Слово дня" still exists too). The row
     just wraps playBtn so the badge has something to position itself against; it isn't a flex item of its
     own, playBtn still fills the row exactly like it filled .stack directly before. */
  .play-row{ position:relative; }

  .word-of-day-badge{
    position:absolute; top:50%; right:-14px; transform:translateY(-50%);
    width:68px; height:68px; border-radius:999px; padding:4px;
    background:var(--card); border:3px solid var(--ink); box-shadow:0 3px 8px rgba(28,51,88,.25);
    display:flex; align-items:center; justify-content:center; text-align:center;
    font-family:'Caveat',cursive; font-weight:700; font-size:15px; line-height:1.05; color:var(--ink);
    cursor:pointer; z-index:2;
    animation: wordOfDayBadgePulse 2.6s ease-in-out infinite;
  }

  .word-of-day-badge:active{ animation-play-state:paused; transform:translateY(-50%) scale(.94); }

  @media (max-width:360px){
    .word-of-day-badge{ width:58px; height:58px; font-size:13px; right:-10px; }
  }

  /* ---------- SETTINGS ---------- */
  .setting-row{
    background: var(--card);
    border: 2.5px solid var(--ink);
    border-radius: 14px;
    padding: 16px;
    margin-bottom: 16px;
  }

  .setting-row .row-title{ font-size:21px; font-family:'Caveat',cursive; font-weight:700; margin-bottom:6px; }

  .setting-row .row-desc{ font-size:15px; color: var(--ink-soft); margin-bottom:10px; }

  input[type=range]{
    width:100%; accent-color: var(--ink); height:6px;
  }

  .vol-value{ text-align:right; font-size:16px; color:var(--ink-soft); }

  /* ---------- SETUP (category + difficulty) ---------- */
  #catGrid{ display:grid; grid-template-columns: 1fr 1fr; gap:10px; margin-bottom:18px; }

  .cat-tile{
    border:2.5px solid var(--ink); border-radius:12px; background:var(--card);
    padding:12px 10px; font-size:18px; cursor:pointer; text-align:center;
  }

  .cat-tile.selected{ background:var(--ink); color:var(--paper); }

  .cat-tile.random{ grid-column: 1 / -1; font-family:'Caveat',cursive; font-weight:700; font-size:21px; }

  /* purchasable category tile — dashed gold border like other "buy this" UI
     in the game, shows a lock glyph and price instead of selecting on tap */
  .cat-tile.locked{
    border-style: dashed; border-color: var(--gold); color: var(--gold);
    display:flex; flex-direction:column; align-items:center; gap:4px;
  }

  .cat-tile.locked.unaffordable{ opacity:.6; }

  .cat-tile-lock{ font-size:15px; }

  .cat-tile-price{ display:flex; align-items:center; gap:4px; font-size:15px; }

  .cat-tile-price .skin-price-coin{ display:inline-flex; }

  .diff-row{ display:flex; gap:10px; margin-bottom:22px; }

  .diff-tile{
    flex:1; border:2.5px solid var(--ink); border-radius:12px; background:var(--card);
    padding:12px 8px; text-align:center; cursor:pointer; font-size:18px;
  }

  .diff-tile.selected{ background:var(--ink); color:var(--paper); }

  .diff-tile .stars{ font-size:14px; display:block; margin-top:2px; opacity:.8; }

  /* desktop/landscape frames (e.g. Y8's embed): the setup screen must fit without a scrollbar —
     locked tiles put lock · name · price on one line instead of three, and the gaps shrink */
  @media (min-width: 700px){
    /* the coin HUD sits in the window's corner, beside (not above) the centered column here */
    .app:has(#screenSetup.active){ padding-top: 10px; }
    #screenSetup #startGameBtn{ padding-top:10px; padding-bottom:10px; }
    #screenSetup .topbar{ margin-bottom:6px; }
    #screenSetup h3{ margin:4px 0 8px; }
    #catGrid{ gap:8px; margin-bottom:10px; }
    #catGrid .cat-tile{ padding:9px 10px; }
    #catGrid .cat-tile.locked{ flex-direction:row; flex-wrap:wrap; justify-content:center; column-gap:8px; row-gap:2px; }
    .diff-row{ margin-bottom:12px; }
    .diff-tile{ padding:9px 8px; }
  }

  /* phones: same one-line locked tiles and tighter gaps (the coin HUD still needs the top padding here) */
  @media (max-width: 699px){
    #screenSetup .topbar{ margin-bottom:4px; }
    #screenSetup h3{ margin:4px 0 8px; }
    #catGrid{ gap:8px; margin-bottom:10px; }
    #catGrid .cat-tile{ padding:8px 6px; font-size:17px; }
    #catGrid .cat-tile.locked{ flex-direction:row; flex-wrap:wrap; justify-content:center; column-gap:6px; row-gap:0; }
    .diff-row{ margin-bottom:12px; gap:8px; }
    .diff-tile{ padding:8px 6px; }
  }

  @media (min-width: 700px) and (max-height: 620px){
    #screenSetup .topbar{ margin-bottom:0; }
    #screenSetup h3{ margin:2px 0 6px; }
    #catGrid{ gap:6px; }
    #catGrid .cat-tile{ padding:6px 10px; font-size:17px; }
    #catGrid .cat-tile.random{ font-size:19px; }
    .diff-tile{ padding:6px 8px; font-size:17px; }
    .diff-row{ margin-bottom:10px; }
  }

  /* ---------- START SCREEN: mode pick (Обычная игра / Путешествие) ----------
     Pressing Play hides every other tile on the start screen (and Play
     itself) and shows just the two mode buttons + a back button, instead of
     going straight to the category setup. showScreen('screenStart') always
     resets this, so returning to the start screen from anywhere is normal. */
  #screenStart .stack .mode-only{ display:none; }

  #screenStart.mode-pick .stack > *:not(.mode-only){ display:none; }

  #screenStart.mode-pick .stack .mode-only{ display:block; }

  /* ---------- JOURNEY ("Путешествие") ----------
     Full-viewport overlays (so PC gets a wide rectangle, phones a tall one)
     that sit above the normal .app column. They deliberately pin their own
     neutral grid-paper colors so no equipped background theme leaks in —
     real per-location pictures get added to the pages later. */
  body.mode-campaign .bottom-actions{ display:none; }

  .journey-overlay{
    --paper:#f4f2ea; --grid:#d7dbe6; --card:#fbfaf5; --ink:#1c3358;
    position:fixed; inset:0; z-index:14; display:none; overflow:hidden;
    background:
      linear-gradient(var(--grid) 1px, transparent 1px) 0 0/28px 28px,
      linear-gradient(90deg, var(--grid) 1px, transparent 1px) 0 0/28px 28px,
      var(--paper);
    color: var(--ink);
  }

  .journey-overlay.open{ display:block; }

  .jn-menu-btn{ position:absolute; top:12px; left:12px; z-index:3; }

  .jn-arrow{
    position:absolute; z-index:3; width:54px; height:54px; padding:0; border-radius:50%;
    border:3px solid var(--ink); background:var(--card); color:var(--ink);
    display:flex; align-items:center; justify-content:center; cursor:pointer;
    box-shadow:0 3px 8px rgba(28,51,88,.18);
  }

  .jn-arrow svg{ width:28px; height:28px; display:block; }

  .jn-arrow[hidden]{ display:none; }

  .jn-arrow:active{ transform:scale(.93); }

  #jlUpBtn{ right:14px; top:calc(50% - 64px); }

  #jlDownBtn{ right:14px; top:calc(50% + 10px); }

  #jvLeftBtn{ left:12px; top:calc(50% - 27px); }

  #jvRightBtn{ right:12px; top:calc(50% - 27px); }

  /* locations: vertical pager, one full-screen rectangle per location */
  .jl-viewport{ position:absolute; inset:0; overflow:hidden; }

  .jl-track{ height:100%; transition: transform .45s cubic-bezier(.4,.1,.2,1); }

  .jl-page{ position:relative; height:100%; width:100%; display:flex; align-items:center; justify-content:center; background-size:cover; background-position:center; background-repeat:no-repeat; }

  /* pages with location artwork: light dashed frame over the picture, and the
     title/progress/button sit on a paper card so they stay readable */
  .jl-page.has-art::before{ display:none; }

  #jvBackBtn, #jlBackBtn{ top:68px; }

  .jl-page.has-art .jl-content{
    background:rgba(251,250,245,.88); border:2.5px solid var(--ink); border-radius:20px;
    padding:20px 34px 24px; box-shadow:0 6px 18px rgba(28,51,88,.28);
  }

  /* narrow screens: keep the card clear of the up/down arrows on the right */
  @media (max-width: 480px){
    .jl-page.has-art .jl-content{ padding:16px 16px 20px; max-width:calc(100% - 152px); box-sizing:border-box; }
    .jl-page.has-art .jl-content .btn{ min-width:0; width:100%; font-size:24px; }
    .jl-name{ font-size:clamp(28px, 8vw, 40px); }
  }

  .jl-page::before{
    content:""; position:absolute; inset:12px; border-radius:22px;
    background: var(--tint, transparent); opacity:.5; pointer-events:none;
  }

  .jl-page[data-loc="bandit"]{ --tint: rgba(47,125,79,.10); }

  .jl-page[data-loc="origami"]{ --tint: rgba(232,120,90,.10); }

  .jl-page[data-loc="bones"]{ --tint: rgba(120,120,130,.12); }

  .jl-content{ position:relative; display:flex; flex-direction:column; align-items:center; gap:14px; padding:0 76px; text-align:center; }

  .jl-name{ font-family:'Caveat',cursive; font-weight:700; font-size:clamp(34px, 7vw, 58px); margin:0; color:var(--ink); }

  .jl-name.jl-dev{ font-style:italic; opacity:.7; }

  .jl-progress{ font-family:'Caveat',cursive; font-weight:700; font-size:26px; opacity:.8; }

  .jl-content .btn{ min-width:200px; font-size:26px; }

  .jl-content .btn:disabled{ opacity:.55; cursor:default; }

  /* a fully-finished location's card: a hand-drawn wooden "Пройдено" plaque in place of the progress
     text + "Начать" button (see buildLocationPages() in travel.js). Absolutely positioned within
     .jl-content (already position:relative above) so it overlays that same spot regardless of whether
     the old elements are still present underneath (only true right after finishing, see below). */
  .jl-plaque{
    position:absolute; left:50%; top:64%; width:min(82%, 300px); pointer-events:none; z-index:2;
    transform: translate(-50%,-50%) translateY(-160px) rotate(-42deg) scale(1.2);
    filter: drop-shadow(0 6px 9px rgba(28,51,88,.35));
    opacity:0;
  }

  .jl-plaque.jl-plaque-settled{ transform: translate(-50%,-50%) rotate(-16deg); opacity:1; }

  .jl-plaque.jl-plaque-animate{ animation: jlPlaqueDrop .7s cubic-bezier(.34,1.05,.64,1) forwards; }

  .jl-plaque-svg{ width:100%; height:auto; display:block; }

  .jl-plaque-text{
    position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);
    font-family:'Caveat',cursive; font-weight:700; font-size:clamp(24px, 6vw, 34px); color:#1c3358; white-space:nowrap;
  }

  /* the old progress text / "Начать" button, kept just long enough to dissolve once the plaque lands on
     top of them — see journeyPlayLocationCompletionTransition() in travel.js, which adds .jl-dissolve */
  .jl-dissolve{ animation: jlInkDissolve .55s ease-in forwards; }

  .jv-node .jv-lock svg{ width:22px; height:22px; }

  @media (max-width: 480px){ .jv-node .jv-lock svg{ width:18px; height:18px; } }

  /* levels: horizontal pager, one rectangle of 3 (phone) / 6 (PC) levels per page */
  /* which word category this location's levels use — a small tag in the top-right corner, under the coin counter */
  .jv-cat{
    position:absolute; top:64px; right:12px; z-index:2; max-width:min(56vw, 280px); text-align:center;
    padding:4px 14px 5px; border:2.5px solid var(--ink); border-radius:18px; background:var(--card);
    font-family:'Caveat',cursive; font-weight:700; font-size:20px; line-height:1.15; color:var(--ink);
    pointer-events:none; box-shadow:0 3px 8px rgba(28,51,88,.18);
  }
  /* outer wrapper: spans the gap between the icon button (left) and the coin counter (right) — which
     aren't the same width — and centers the actual badge inside that gap via flex, so the badge itself
     is centered on the page rather than shifted toward whichever side has less reserved space */
  .jv-title-wrap{
    position:absolute; top:12px; left:64px; right:97px; z-index:2;
    display:flex; justify-content:center; pointer-events:none;
  }
  /* the badge itself: same "ink badge" look as the coin counter (.coin-hud) — a bordered paper pill */
  .jv-title{
    max-width:100%; min-width:0; box-sizing:border-box;
    padding:6px 24px 8px; border:2.5px solid var(--ink); border-radius:999px;
    background:var(--card); box-shadow:0 3px 8px rgba(28,51,88,.18);
    font-family:'Caveat',cursive; font-weight:700; font-size:40px; color:var(--ink); text-align:center;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }

  /* opaque darken/lighten veil around the screen swap right after finishing a location's last level —
     see journeyPlayLocationCompletionTransition() in travel.js */
  #jvTransitionVeil{
    position:fixed; inset:0; z-index:30; background:#000; opacity:0; display:none;
    pointer-events:none; transition: opacity .28s ease;
  }
  /* .veil-shown (display) and .veil-on (opacity) are toggled a frame apart in JS — see
     journeyPlayCompletionTransition() in travel.js — so the opacity change has an already-rendered
     "from" frame to transition away from (display can't itself be transitioned) */
  #jvTransitionVeil.veil-shown{ display:block; }
  #jvTransitionVeil.veil-on{ opacity:1; pointer-events:auto; }

  .jv-viewport{ position:absolute; inset:0; overflow:hidden; }

  .jv-track{ display:flex; height:100%; width:100%; transition: transform .45s cubic-bezier(.4,.1,.2,1); }

  .jv-page{ flex:0 0 100%; position:relative; height:100%; }

  /* one slice of the location's panorama per page (set inline, see buildLevelPages() in travel.js) */
  .jv-page.has-art{ background-size: cover; background-position: center; background-repeat: no-repeat; }

  /* the forest's own blurred backdrop is dark enough that the (mostly brown/green) level icons started
     blending into it — a plain, minimal white veil behind the nodes lightens it just enough to tell them
     apart, without touching the actual photo or any other location's backdrop */
  .jv-page.jv-loc-bandit::before{
    content:""; position:absolute; inset:0; background:rgba(255,255,255,.28); pointer-events:none;
  }

  .jv-map{ position:absolute; left:80px; right:80px; top:100px; bottom:48px; }

  .jv-path{ position:absolute; inset:0; width:100%; height:100%; overflow:visible; pointer-events:none; }

  .jv-path path{
    fill:none; stroke:var(--ink); stroke-width:3; stroke-dasharray:4 9; stroke-linecap:round;
    vector-effect: non-scaling-stroke;
  }

  /* the level node IS its reward icon now (no more flat colored circle behind it) — .jv-node is just the
     sized, positioned hit-area/frame; .jv-node-icon is the actual artwork, sized to fill it via
     object-fit:contain so bigger-difficulty nodes naturally show a bigger icon, no separate icon-size
     rules needed. */
  .jv-node{
    position:absolute; transform:translate(-50%,-50%); border-radius:50%;
    padding:0; cursor:pointer;
    font-family:'Caveat',cursive; font-weight:700;
    display:flex; align-items:center; justify-content:center;
    background:none; border:none;
  }

  .jv-node-icon{
    width:100%; height:100%; object-fit:contain; display:block; pointer-events:none;
    filter: drop-shadow(0 2px 3px rgba(28,51,88,.35));
  }

  .jv-node.easy{ width:64px; height:64px; }

  .jv-node.medium{ width:84px; height:84px; }

  .jv-node.hard{ width:110px; height:110px; }

  .jv-node.locked{ cursor:default; }

  .jv-node.locked .jv-node-icon{ filter:grayscale(1) opacity(.55); }

  .jv-node .jv-lock{ display:none; position:absolute; inset:0; align-items:center; justify-content:center; }

  .jv-node.locked .jv-lock{ display:flex; }

  .jv-node.current{ animation: jvPulse 1.6s ease-in-out infinite; }

  /* finished levels stay full-color, just like the current one — only locked levels are greyed out */
  .jv-node.done{ cursor:default; pointer-events:none; }

  .jv-node.done::after{
    content:"✓"; position:absolute; right:-8px; top:-8px; width:22px; height:22px; border-radius:50%;
    background:#fff; color:#2f7d4f; border:2.5px solid var(--ink); font-size:14px; line-height:17px;
    text-align:center; text-shadow:none; z-index:1;
  }

  /* level number: a small badge pinned under the icon's own bottom edge, instead of filling the old
     circle — shown for every level, including locked ones. A plain sans-serif (not the app's cursive
     display font) keeps the digit sitting dead-center in such a small circle. */
  .jv-num{
    position:absolute; left:50%; bottom:-8px; transform:translateX(-50%);
    min-width:26px; height:26px; padding:0 6px; box-sizing:border-box; border-radius:999px;
    background:var(--card); border:2.5px solid var(--ink); color:var(--ink);
    font-family:Arial, Helvetica, sans-serif; font-size:15px; line-height:1; text-align:center; text-shadow:none;
    display:flex; align-items:center; justify-content:center;
  }

  @media (max-width: 480px){
    .jv-map{ left:64px; right:64px; }
    .jv-node.easy{ width:56px; height:56px; }
    .jv-node.medium{ width:74px; height:74px; }
    .jv-node.hard{ width:96px; height:96px; }
    .jv-title-wrap{ top:8px; }
    .jv-title{ font-size:30px; padding:4px 16px 6px; }
  }

  /* ---------- LANGUAGE SWITCH ---------- */
  .lang-row{ display:flex; flex-wrap:wrap; gap:10px; margin-top:8px; }

  .lang-btn{
    flex:1 1 calc(50% - 5px); min-width:110px; border: 2.5px solid var(--ink); background: var(--card); border-radius: 12px;
    padding: 10px 12px; font-family:'Caveat',cursive; font-weight:700; font-size:19px;
    color: var(--ink); cursor:pointer;
  }

  .lang-btn.active{ background: var(--green); color:#fff; border-color: var(--green); }

  /* ---------- ACHIEVEMENTS ---------- */
  .achv-card{
    display:flex; gap:12px; align-items:flex-start;
    border:2.5px solid var(--ink); border-radius:14px; background:var(--card);
    padding:14px; margin-bottom:12px;
  }

  .achv-card.locked{ opacity:.55; }

  .achv-icon{ font-size:30px; flex-shrink:0; width:38px; text-align:center; }

  .achv-info{ flex:1; }

  .achv-name{ font-family:'Caveat',cursive; font-weight:700; font-size:21px; }

  .achv-desc{ font-size:14px; color:var(--ink-soft); margin-top:2px; }

  .achv-reward{ font-size:13px; color:#a8791a; margin-top:6px; }

  .achv-status{ font-size:12px; margin-top:4px; font-weight:700; color:var(--ink-soft); }

  .achv-card.unlocked .achv-status{ color: var(--green); }

  /* ---------- WHEEL OF FORTUNE ---------- */
  .wheel-ready-dot{
    position:absolute; top:8px; right:10px; width:11px; height:11px; border-radius:50%;
    background: var(--red); border:1.5px solid var(--paper);
  }

  #wheelBtn{ position:relative; }

  .wheel-stage{
    /* The wheel also shrinks with the window height so the screen never scrolls;
       --wheel-rest is the height of everything else on the screen. */
    --wheel-rest: 380px;
    --wheel-size: max(150px, min(92vw, 420px, calc(100vh - var(--wheel-rest))));
    position:relative; width:var(--wheel-size); height:var(--wheel-size); margin: 22px auto 14px;
    display:flex; align-items:center; justify-content:center;
  }

  .wheel-pointer{
    position:absolute; top:-8px; left:50%; transform:translateX(-50%);
    width:0; height:0; border-left:20px solid transparent; border-right:20px solid transparent;
    border-top:32px solid var(--ink); z-index:2;
  }

  .wheel-spin-wrap{
    width:100%; height:100%; border-radius:50%;
    transition: transform 4.2s cubic-bezier(.17,.67,.16,1);
  }

  .wheel-spin-wrap svg{ width:100%; height:100%; display:block; }

  .wheel-status{ text-align:center; font-size:19px; color:var(--ink); font-family:'Caveat',cursive; font-weight:700; margin: 10px 0 2px; min-height:26px; }

  .wheel-substatus{ text-align:center; font-size:14px; color:var(--ink-soft); margin: 0 0 18px; min-height:18px; }

  #wheelSpinBtn[disabled]{ opacity:.5; }

  #screenWheel #wheelSpinBtn{ font-size:22px; padding:16px; margin-top:auto; }

  #screenWheel #wheelAdSpinBtn{ margin-top:10px; font-size:18px; padding:12px; }

  /* ---------- TUTORIAL OVERLAY ---------- */
  /* invisible click-blockers only — the actual dark dimming + spotlight glow
     is drawn entirely by .tutorial-ring's own giant box-shadow just below,
     so these stay transparent to avoid double-darkening the overlap */
  .tutorial-mask{
    position:fixed; background:transparent;
    pointer-events:auto; z-index:9998;
  }

  .tutorial-ring{
    position:fixed; display:none; pointer-events:none; z-index:9999;
    border:3px solid var(--gold); border-radius:14px;
    box-shadow: 0 0 0 4000px rgba(15,20,30,.72), 0 0 18px 2px rgba(184,134,47,.65);
    transition: all .25s ease;
  }

  .tutorial-bubble{
    position:fixed; z-index:10000; max-width: min(320px, 84vw);
    background: var(--card); border:3px solid var(--ink); border-radius:16px;
    padding:16px 18px; box-shadow: 0 8px 22px rgba(0,0,0,.35);
    font-family:'Patrick Hand', sans-serif; color: var(--ink);
    transition: top .25s ease, left .25s ease;
  }

  .tutorial-bubble.centered{
    top:50%; left:50%; transform: translate(-50%,-50%); text-align:center;
  }

  .tutorial-bubble-text{ font-size:19px; line-height:1.35; margin-bottom:12px; }

  /* episode counter ("1/3") in the top-right corner of the bubble */
  .tutorial-counter{
    position:absolute; top:6px; right:14px;
    font-family:'Caveat',cursive; font-weight:700; font-size:22px; line-height:1;
    color: var(--ink-soft);
  }
  .tutorial-bubble.has-counter .tutorial-bubble-text{ padding-right:34px; }

  .tutorial-bubble-actions{ display:flex; justify-content:flex-end; gap:10px; }

  .tutorial-bubble .btn{ padding:8px 18px; font-size:18px; }

  .tutorial-ask-card{
    position:fixed; top:50%; left:50%; transform: translate(-50%,-50%);
    z-index:10000; width:min(300px, 84vw);
    background: var(--card); border:3px solid var(--ink); border-radius:18px;
    padding:24px 22px; text-align:center; box-shadow: 0 10px 28px rgba(0,0,0,.4);
  }

  .tutorial-ask-title{ font-family:'Caveat',cursive; font-weight:700; font-size:26px; margin-bottom:8px; }

  .tutorial-ask-desc{ font-size:16px; color: var(--ink-soft); margin-bottom:18px; }

  .tutorial-ask-actions{ display:flex; flex-direction:column; gap:10px; }

  .key.tutorial-flash{ animation: tutorialFlashKey .5s ease 2; }
