  :root{
    --bg: #eef1fa;
    --bg-2: #ffffff;
    --panel: #ffffff;
    --panel-2: #f3f5fc;
    --raised: #e8ebf7;
    --border: #dbe0f0;
    --border-soft: rgba(60,72,130,0.12);
    --text: #1a2040;
    --muted: #626c8f;

    --accent: #0891a8;      /* teal — primary trace colour */
    --accent-2: #6d4fe0;    /* violet — secondary accent */
    --accent-grad: linear-gradient(135deg, #0891a8 0%, #6d4fe0 100%);

    --success: #10925c;
    --warning: #a86a06;
    --error: #cf3350;

    /* canvas theme vars consumed directly by script.js */
    --dot: #0891a8;
    --dot-inner: #ffffff;
    --ghost: rgba(109, 79, 224, 0.5);
    --final: #0891a8;
    --hint: rgba(109, 79, 224, 0.45);
    --connection: rgba(60, 72, 130, 0.16);
  }
  *{box-sizing:border-box}
  html,body{height:100%;margin:0}
  body{
    font-family:'Inter', system-ui, -apple-system, "Segoe UI", Roboto, Arial;
    color:var(--text);
    background:
      radial-gradient(circle at 12% 8%, rgba(109,79,224,0.08), transparent 42%),
      radial-gradient(circle at 90% 88%, rgba(8,145,168,0.08), transparent 45%),
      var(--bg);
    background-attachment:fixed;
    overflow-x:hidden;
    overflow-y:auto;
    -webkit-text-size-adjust:100%;
  }
  ::selection{background:var(--accent-2);color:#fff}
  :focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}

  .wrap{
    min-height:100vh;
    min-height:100dvh;
    display:flex;flex-direction:column;align-items:center;
    padding:14px 10px;
    padding-top:max(14px, env(safe-area-inset-top));
    padding-bottom:max(14px, env(safe-area-inset-bottom));
    padding-left:max(10px, env(safe-area-inset-left));
    padding-right:max(10px, env(safe-area-inset-right));
  }
  .container{width:100%;max-width:1080px;margin:0 auto}

  header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:12px 18px;margin-bottom:16px;background:linear-gradient(180deg, rgba(255,255,255,0.9), rgba(243,245,252,0.75));border:1px solid var(--border-soft);border-radius:16px;backdrop-filter:blur(10px);box-shadow:0 8px 26px rgba(30,40,80,0.08)}
  .left,.center,.right{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
  .center{flex:1 1 auto;justify-content:center;order:3;min-width:100%}
  @media(min-width:701px){ .center{order:0;min-width:0;flex:0 0 auto} }

  .brand{display:flex;align-items:center;gap:10px}
  .brand-mark{width:34px;height:34px;flex:0 0 auto}
  .brand-text{display:flex;flex-direction:column;line-height:1.05}
  .brand-text b{font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:700;letter-spacing:0.4px;color:var(--text)}
  .brand-text span{font-size:10px;letter-spacing:1.8px;color:var(--muted);text-transform:uppercase}

  .pill{background:var(--panel-2);border:1px solid var(--border-soft);padding:8px 16px;border-radius:999px;font-weight:600;color:var(--accent);box-shadow:inset 0 1px 0 rgba(255,255,255,0.6);font-size:14px;font-family:'JetBrains Mono',monospace;letter-spacing:0.5px}
  .level-title{font-family:'Space Grotesk',sans-serif;font-weight:700;letter-spacing:1.5px;font-size:15px;color:var(--muted);text-transform:uppercase}
  .level-title span{color:var(--text);font-size:19px;letter-spacing:0.5px;margin-left:4px;font-family:'JetBrains Mono',monospace}

  .stars{display:flex;gap:5px}
  .star{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;background:var(--panel-2);border:1px solid var(--border-soft);font-size:15px;color:var(--border);transition:all .2s}
  .star.filled{color:var(--warning);background:rgba(168,106,6,0.10);border-color:rgba(168,106,6,0.3);box-shadow:0 0 12px rgba(168,106,6,0.2)}

  .panel{background:linear-gradient(180deg, var(--panel), var(--bg-2));border-radius:18px;padding:18px;box-shadow:0 10px 30px rgba(30,40,80,0.10), inset 0 1px 0 rgba(255,255,255,0.6);border:1px solid var(--border-soft)}
  .game-row{display:flex;gap:16px;align-items:stretch}

  .board-frame{flex:1;border-radius:14px;border:1px solid var(--border);background:
      radial-gradient(circle, rgba(60,72,130,0.14) 1px, transparent 1.2px) 0 0/26px 26px,
      linear-gradient(180deg, #ffffff, #eef1fa);
    padding:10px;display:flex;justify-content:center;align-items:center;position:relative;overflow:hidden}
  .board-frame::before{content:"";position:absolute;inset:0;border-radius:14px;box-shadow:inset 0 0 60px rgba(8,145,168,0.05);pointer-events:none}
  #board{background:transparent;border-radius:10px;display:block;touch-action:none;position:relative}

  .sidebar{width:172px;display:flex;flex-direction:column;gap:6px}
  .side-label{font-family:'Space Grotesk',sans-serif;font-size:10px;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted);margin:10px 4px 2px}
  .side-label:first-child{margin-top:0}

  .btn{padding:10px 14px;border-radius:12px;background:var(--panel-2);border:1px solid var(--border-soft);cursor:pointer;font-weight:600;transition:all .16s ease;color:var(--text);font-size:14px;font-family:'Inter',sans-serif;display:flex;align-items:center;justify-content:center;gap:8px}
  .btn i{font-size:13px;color:var(--muted);transition:color .16s ease}
  .btn:hover{transform:translateY(-1px);border-color:var(--accent);box-shadow:0 6px 18px rgba(8,145,168,0.14);color:var(--text)}
  .btn:hover i{color:var(--accent)}
  .btn:active{transform:translateY(0)}
  .btn.primary{background:var(--accent-grad);color:#ffffff;border-color:transparent;font-weight:700}
  .btn.primary i{color:#ffffff}
  .btn.secondary{background:transparent;color:var(--muted);border-color:var(--border)}
  .btn.warning{background:rgba(168,106,6,0.10);color:var(--warning);border-color:rgba(168,106,6,0.3)}
  .btn.warning i{color:var(--warning)}
  .btn.error{background:rgba(207,51,80,0.10);color:var(--error);border-color:rgba(207,51,80,0.3)}

  .small{font-weight:600;font-size:13px;color:var(--muted);display:flex;align-items:center;gap:8px}
  .small i{color:var(--accent)}
  footer{display:flex;flex-wrap:wrap;gap:8px 16px;justify-content:space-between;align-items:center;padding:14px 4px 4px;color:var(--muted);font-size:12px;margin-top:14px;border-top:1px solid var(--border-soft)}
  #saveState{font-family:'JetBrains Mono',monospace;color:var(--text)}

  /* modal / level select */
  #levelSelect{position:fixed;inset:0;background:rgba(20,26,50,0.45);backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;z-index:60;animation:fadeIn .18s ease}
  .levels-card{background:linear-gradient(180deg, var(--panel-2), var(--bg-2));border-radius:18px;padding:26px;max-width:880px;width:92%;max-height:80vh;overflow:auto;box-shadow:0 24px 70px rgba(20,26,50,0.25);border:1px solid var(--border-soft);animation:popIn .2s ease}
  .levels-card h3{font-family:'Space Grotesk',sans-serif;margin:0;letter-spacing:0.4px}
  .level-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(64px,1fr));gap:12px;margin-top:18px}
  .lvl-btn{position:relative;aspect-ratio:1;border-radius:12px;background:var(--raised);color:var(--text);border:1px solid var(--border-soft);cursor:pointer;font-weight:700;font-size:15px;font-family:'JetBrains Mono',monospace;transition:all .16s}
  .lvl-btn:hover:not(.locked){border-color:var(--accent);transform:translateY(-2px);box-shadow:0 8px 18px rgba(8,145,168,0.18)}
  .lvl-btn.locked{background:transparent;color:var(--border);opacity:.7;cursor:not-allowed}
  .lvl-btn.locked::after{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f023";position:absolute;bottom:3px;right:5px;font-size:9px;color:var(--muted)}
  .lvl-btn.completed{background:rgba(16,146,92,0.12);border-color:rgba(16,146,92,0.4);color:var(--success)}
  .lvl-btn.completed::after{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f00c";position:absolute;top:3px;right:5px;font-size:9px;color:var(--success)}

  .toast{position:fixed;top:22px;left:50%;transform:translateX(-50%) translateY(-8px);background:linear-gradient(180deg, var(--panel-2), var(--bg-2));color:var(--text);padding:12px 22px;border-radius:12px;z-index:100;opacity:0;transition:opacity .28s ease, transform .28s ease;pointer-events:none;font-weight:600;border:1px solid var(--border-soft);box-shadow:0 14px 34px rgba(20,26,50,0.2);font-size:14px}

  .modal{position:fixed;inset:0;background:rgba(20,26,50,0.45);backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;z-index:70}
  .modal-content{background:linear-gradient(180deg, var(--panel-2), var(--bg-2));padding:26px;border-radius:18px;max-width:420px;width:90%;box-shadow:0 24px 70px rgba(20,26,50,0.25);border:1px solid var(--border-soft);animation:popIn .2s ease}
  .modal-content h3{font-family:'Space Grotesk',sans-serif;margin-top:0;letter-spacing:0.4px}
  .setting-row{display:flex;justify-content:space-between;align-items:center;margin:16px 0;font-size:14px}
  .switch{position:relative;display:inline-block;width:44px;height:24px;flex:0 0 auto}
  .switch input{opacity:0;width:0;height:0}
  .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:var(--raised);border:1px solid var(--border);border-radius:24px;transition:.25s}
  .slider:before{position:absolute;content:"";height:16px;width:16px;left:3px;top:3px;background:#ffffff;border:1px solid var(--border);border-radius:50%;transition:.25s}
  input:checked + .slider{background:var(--accent-grad);border-color:transparent}
  input:checked + .slider:before{transform:translateX(20px);background:#ffffff;border-color:transparent}

  ul{padding-left:20px;color:var(--text);opacity:.9;line-height:1.6}

  /* Tutorial styles */
  .tutorial-overlay{position:fixed;inset:0;background:rgba(20,26,50,0.5);backdrop-filter:blur(4px);z-index:1000;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease}
  .tutorial-card{background:linear-gradient(180deg, var(--panel-2), var(--bg-2));border-radius:18px;padding:26px;max-width:600px;width:90%;max-height:80vh;overflow:auto;box-shadow:0 24px 70px rgba(20,26,50,0.25);border:1px solid var(--border-soft);position:relative;animation:popIn .2s ease}
  .tutorial-card h2{font-family:'Space Grotesk',sans-serif;margin-top:0;font-size:22px;letter-spacing:0.2px;color:var(--text)}
  .tutorial-card p{color:var(--muted);line-height:1.6;font-size:14.5px}
  .tutorial-step{display:none;text-align:center}
  .tutorial-step.active{display:block}
  .tutorial-navigation{display:flex;flex-wrap:wrap;justify-content:space-between;margin-top:18px;gap:10px}
  .tutorial-navigation .btn{flex:0 0 auto;padding:10px 20px}
  .tutorial-dot{width:8px;height:8px;border-radius:50%;background:var(--border);margin:0 4px;cursor:pointer;transition:all .2s}
  .tutorial-dot.active{background:var(--accent);box-shadow:0 0 10px rgba(8,145,168,0.4);transform:scale(1.3)}
  .tutorial-dots{display:flex;justify-content:center;align-items:center;margin:16px 0}
  .tutorial-canvas{border:1px solid var(--border-soft);border-radius:12px;margin:14px auto;display:block;background:
      radial-gradient(circle, rgba(60,72,130,0.12) 1px, transparent 1.2px) 0 0/20px 20px, #ffffff}

  @keyframes fadeIn{from{opacity:0}to{opacity:1}}
  @keyframes popIn{from{opacity:0;transform:scale(.96) translateY(6px)}to{opacity:1;transform:scale(1) translateY(0)}}

  /* ---------- Responsive breakpoints ---------- */

  /* Tablet and below: sidebar moves under the board, buttons flow in a row */
  @media(max-width:900px){
    .game-row{flex-direction:column-reverse}
    .sidebar{width:100%;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:8px}
    .sidebar .btn{flex:1 1 auto;min-width:92px}
    .side-label{display:none}
  }

  /* Phones: tighten header, type sizes, and give the board a friendlier portrait ratio */
  @media(max-width:600px){
    .wrap{padding:8px 6px}
    header{padding:10px 12px;border-radius:14px}
    .level-title{font-size:11px}
    .level-title span{font-size:15px}
    .pill{padding:5px 11px;font-size:11.5px}
    .star{width:20px;height:20px;font-size:11px}
    .btn{padding:9px 10px;font-size:12.5px;gap:6px}
    .brand-text span{display:none}
    .brand-mark{width:28px;height:28px}
    .panel{padding:12px;border-radius:14px}
    #board{aspect-ratio:4/3 !important}
    footer{font-size:11px}
  }

  /* Small phones: collapse sidebar buttons to icon-only for compact, thumb-friendly rows */
  @media(max-width:420px){
    .brand-text{display:none}
    .level-title{font-size:10px}
    .level-title span{font-size:13px}
    header{gap:6px 8px}
    .left,.right{gap:6px}
    .sidebar{gap:6px}
    .sidebar .btn{flex:0 0 auto;min-width:0;width:48px;height:48px;padding:0;border-radius:14px}
    .sidebar .btn .btn-label{display:none}
    #openLevelSelect .btn-label{display:none}
    #board{aspect-ratio:1/1 !important}
    .small span{font-size:11px}
  }

  /* Very small phones: shave a little more so nothing clips */
  @media(max-width:340px){
    .stars{gap:3px}
    .star{width:17px;height:17px;font-size:9px}
    .pill{padding:4px 9px;font-size:10.5px}
  }

  @media(max-width:380px){
    .modal-content, .tutorial-card, .levels-card{padding:18px}
    .tutorial-navigation .btn{flex:1 1 auto;padding:10px 12px;font-size:13px}
  }

  /* Landscape phones with limited height: shrink the board so controls stay visible without scrolling */
  @media(max-height:480px) and (orientation:landscape){
    .board-frame{max-height:60vh}
    #board{max-height:56vh;width:auto !important;height:56vh !important;aspect-ratio:auto !important}
    header{padding:8px 12px;margin-bottom:8px}
    .panel{padding:10px}
    footer{display:none}
  }

  @media (prefers-reduced-motion: reduce){
    *{animation-duration:0.001ms !important;transition-duration:0.001ms !important}
  }