:root {
    --forest:#1D3C34; --forest-deep:#142b25; --sage:#6B7C4A; --sage2:#A2A568; --cream:#F5F0E8; --cream2:#F1E6B2; --tan:#D6D2C4;
    --ink:#1D3C34; --mute:#7d7866; --line:#e2dccc; --lock:#ebe6da; --lockline:#c9c3b3; --red:#b5482f;
    --display:"bookmania", Georgia, serif; --ui:"Work Sans", system-ui, sans-serif;
    --ease:cubic-bezier(.2,.8,.2,1); --spring:cubic-bezier(.22,1.15,.36,1);
    --shadow:0 1px 2px rgba(29,60,52,.06), 0 10px 30px -12px rgba(29,60,52,.25);
  }
  * { box-sizing:border-box; }
  [hidden] { display:none !important; }   /* beats .xp display:grid */
  html { font-size:16px; }
  body { margin:0; background:var(--cream); background-image:radial-gradient(ellipse 80% 40% at 50% -5%, #fffdf7 0%, transparent 70%); color:var(--ink); font-family:var(--ui); line-height:1.4; -webkit-font-smoothing:antialiased; }
  ::selection { background:var(--cream2); }

  /* ---------- header ---------- */
  header { background:var(--forest); background-image:radial-gradient(ellipse 60% 120% at 100% 0%, #26503f 0%, transparent 60%); color:var(--cream); padding:26px 40px 24px; display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:40px; animation:fade .8s var(--ease) both; }
  .brand { font-size:.75rem; letter-spacing:.22em; text-transform:uppercase; opacity:.7; font-weight:600; }
  header h1 { margin:4px 0 0; font-family:var(--display); font-weight:400; font-size:1.9rem; letter-spacing:-.01em; line-height:1.1; }
  .xp { display:grid; grid-template-columns:auto 1fr; gap:10px 18px; align-items:center; max-width:640px; }
  .xp .lvl { font-family:var(--display); font-style:italic; font-size:2rem; color:var(--cream2); line-height:1; grid-row:span 2; }
  .xp .lvl small { display:block; font-family:var(--ui); font-style:normal; font-size:.65rem; letter-spacing:.2em; text-transform:uppercase; opacity:.7; margin-bottom:2px; }
  .xp .bar { height:12px; background:rgba(255,255,255,.12); border-radius:6px; overflow:hidden; position:relative; }
  .xp .bar i { display:block; height:100%; background:linear-gradient(90deg, var(--sage) 0%, var(--sage2) 100%); border-radius:6px; width:0; transition:width 1.1s var(--spring); position:relative; }
  .xp .txt { font-size:.9rem; opacity:.9; display:flex; gap:18px; }
  .xp .txt b { font-weight:600; }
  .anchors { display:flex; gap:28px; }
  .anchors div { text-align:right; }
  .anchors b { display:block; font-size:.62rem; letter-spacing:.2em; text-transform:uppercase; opacity:.6; font-weight:600; margin-bottom:3px; }
  .anchors span { font-family:var(--display); font-size:1.15rem; font-style:italic; }

  /* ---------- page ---------- */
  main { padding:34px 48px 60px; }
  .crumbs { font-size:.85rem; color:var(--mute); letter-spacing:.02em; } .crumbs:empty { display:none; } .crumbs div { margin:14px 0 4px; }
  .crumbs a { color:var(--forest); font-weight:600; cursor:pointer; text-decoration:none; border-bottom:1px solid transparent; transition:border-color .2s; }
  .crumbs a:hover { border-color:var(--forest); }
  .title { display:grid; grid-template-columns:1fr minmax(280px, 34%); align-items:end; gap:40px; margin-bottom:30px; }
  .title h2 { margin:0; font-family:var(--display); font-weight:400; font-size:2.4rem; line-height:1.05; letter-spacing:-.015em; }
  .title h2 em { font-style:italic; color:var(--sage); }
  .hint { font-size:1rem; color:var(--mute); margin:0 0 6px; line-height:1.55; text-align:right; text-wrap:balance; }
  h3.sec { display:flex; align-items:baseline; gap:14px; margin:54px 0 18px; font-family:var(--display); font-weight:400; font-size:1.55rem; letter-spacing:-.01em; }
  h3.sec small { font-family:var(--ui); font-size:.85rem; color:var(--mute); font-weight:400; }
  .rise { animation:rise .7s var(--ease) both; animation-delay:calc(var(--i, 0) * 55ms); }
  header .home { cursor:pointer; transition:opacity .2s; } header .home:hover { opacity:.8; }
  .back { display:inline-flex; align-items:center; gap:10px; margin-bottom:0; padding:10px 18px 10px 14px; border-radius:999px; background:#fff; border:1.5px solid var(--line); color:var(--forest); font-weight:600; font-size:.95rem; cursor:pointer; box-shadow:var(--shadow); transition:transform .3s var(--spring), border-color .2s; }
  .back:hover { transform:translateX(-4px); border-color:var(--forest); }
  .back i { font-style:normal; font-size:1.2rem; line-height:1; }
  .nav { display:flex; align-items:center; justify-content:space-between; gap:20px; margin-bottom:22px; flex-wrap:wrap; }
  .tabs { display:flex; gap:4px; background:#fff; border:1px solid var(--line); border-radius:999px; padding:4px; }
  .tabs a { padding:7px 16px; border-radius:999px; font-size:.85rem; font-weight:600; color:var(--mute); cursor:pointer; transition:all .25s var(--ease); }
  .tabs a.on { background:var(--forest); color:var(--cream2); }
  .tabs a:not(.on):hover { color:var(--forest); background:var(--cream); }
  .who { display:flex; align-items:center; gap:10px; font-size:.85rem; color:var(--mute); }
  .who select { font-family:var(--ui); font-size:.9rem; font-weight:600; color:var(--forest); background:#fff; border:1px solid var(--line); border-radius:999px; padding:8px 36px 8px 14px; appearance:none; -webkit-appearance:none; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%231D3C34' stroke-width='1.6'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 14px center; cursor:pointer; }
  .proj.dim { opacity:.32; filter:saturate(.4); }
  .proj.dim:hover { opacity:.8; }
  .task .role.me { background:var(--cream2); color:var(--forest); border-color:var(--forest); }
  .task.done .role.me { background:rgba(255,255,255,.9); }
  .task .imp.others { background:var(--forest); color:var(--cream2); }
  .stats { display:grid; grid-template-columns:repeat(3, 1fr); gap:16px; margin-bottom:38px; }
  .stats div { background:#fff; border:1px solid var(--line); border-radius:16px; padding:22px 24px 18px; box-shadow:var(--shadow); }
  .stats b { display:block; font-family:var(--display); font-style:italic; font-weight:400; font-size:3rem; line-height:1; color:var(--forest); }
  .stats b.warn { color:var(--red); }
  .stats span { display:block; font-size:.9rem; color:var(--mute); margin-top:10px; line-height:1.4; }
  .desk { display:grid; grid-template-columns:1.4fr 1fr; gap:40px; align-items:start; }
  .group { margin-bottom:26px; }
  .group h5 { margin:0 0 10px; display:flex; align-items:baseline; gap:10px; font-size:.75rem; letter-spacing:.16em; text-transform:uppercase; color:var(--mute); font-weight:600; }
  .group h5 b { font-family:var(--display); font-style:italic; font-weight:400; font-size:1.5rem; letter-spacing:0; text-transform:none; color:var(--forest); }
  .group .task { font-size:.95rem; padding:12px 16px 12px; }
  .group .task .t { font-weight:500; }
  .group .task .meta { margin-top:6px; }
  @media (max-width:900px) { .desk { grid-template-columns:1fr; } .stats { grid-template-columns:1fr; } }

  /* ---------- constellation ---------- */
  .map { margin:0 -48px; padding:26px 48px 18px; background-image:radial-gradient(circle, #e2dccb 1.2px, transparent 1.4px); background-size:28px 28px; background-position:14px 14px; }
  svg { width:100%; height:auto; display:block; overflow:visible; font-family:var(--ui); }
  .band { font-size:12px; font-weight:700; letter-spacing:.22em; fill:var(--forest); }
  .banddate { font-family:var(--display); font-style:italic; font-size:20px; fill:var(--sage); }
  .bandline { stroke:#d6cfbd; stroke-dasharray:1 7; stroke-linecap:round; stroke-width:1.5; }
  .pedge { fill:none; stroke:var(--sage2); stroke-width:2; opacity:.7; stroke-dasharray:1200; stroke-dashoffset:1200; animation:dash 1.6s .5s var(--ease) forwards; }
  .pedge.locked { stroke:var(--lockline); stroke-dasharray:5 6; stroke-dashoffset:0; animation:fade 1s .8s both; }
  .proj { cursor:pointer; animation:pop .8s var(--spring) both; animation-delay:calc(var(--i) * 45ms); }
  .proj .disc { transition:transform .35s var(--spring); transform-box:fill-box; transform-origin:center; }
  .proj:hover .disc { transform:scale(1.08); }
  .proj .shadow { fill:rgba(29,60,52,.10); filter:blur(6px); transform:translateY(5px); }
  .proj .ring { fill:#fff; stroke:#e6e0d0; stroke-width:7; }
  .proj .fill { fill:none; stroke:var(--sage); stroke-width:7; stroke-linecap:round; animation:draw 1.4s var(--ease) both; animation-delay:calc(.3s + var(--i) * 45ms); transition:stroke-dasharray .8s var(--spring); }
  .proj.complete .fill { stroke:var(--forest); }
  .proj.complete .ring { fill:var(--forest); stroke:var(--forest); }
  .proj.complete .count { fill:var(--cream2); }
  .proj.active .ring { stroke:var(--cream2); }
  .proj.active .halo { fill:none; stroke:var(--sage2); stroke-width:1.5; animation:pulse 2.4s ease-in-out infinite; }
  .proj text { pointer-events:none; }
  .proj .count { font-size:15px; font-weight:700; fill:var(--forest); }
  .proj .name { font-size:13px; font-weight:500; fill:var(--forest); }
  .proj .badge circle { fill:var(--forest); }
  .proj .badge text { font-size:11px; font-weight:700; fill:var(--cream2); }
  .proj .badge { animation:pop .6s var(--spring) both; animation-delay:calc(.9s + var(--i) * 45ms); transform-box:fill-box; transform-origin:center; }

  /* ---------- task cards ---------- */
  .cols { display:grid; grid-template-columns:1fr 1.25fr 1fr; gap:28px; align-items:start; }
  .col h4 { margin:0 0 16px; display:flex; align-items:baseline; gap:10px; font-family:var(--display); font-weight:400; font-size:1.35rem; color:var(--mute); }
  .col h4 b { font-style:italic; font-weight:400; font-size:2rem; line-height:1; color:var(--forest); }
  .col h4.hot { color:var(--forest); }
  .col h4.hot b { color:var(--sage); }
  .task { position:relative; background:#fff; border:1.5px solid var(--line); border-radius:14px; padding:16px 18px 14px; margin-bottom:12px; font-size:1.05rem; line-height:1.35; cursor:pointer; box-shadow:var(--shadow); transition:transform .3s var(--spring), box-shadow .3s var(--ease), border-color .2s; }
  .task:hover { transform:translateY(-3px); box-shadow:0 2px 4px rgba(29,60,52,.06), 0 18px 40px -14px rgba(29,60,52,.35); border-color:var(--sage2); }
  .task .t { font-weight:600; padding-right:68px; letter-spacing:-.005em; }
  .task .meta { display:flex; gap:8px 12px; align-items:center; font-size:.82rem; color:var(--mute); margin-top:10px; flex-wrap:wrap; }
  .task .role { border:1px solid var(--line); border-radius:999px; padding:2px 9px; font-size:.72rem; font-weight:600; letter-spacing:.03em; }
  .task .role.hq { background:var(--forest); color:var(--cream); border-color:var(--forest); }
  .task .late { color:var(--red); font-weight:600; }
  .task .imp { background:var(--cream2); color:var(--forest); border-radius:999px; padding:2px 10px; font-size:.72rem; font-weight:700; letter-spacing:.03em; }
  .task .note { font-family:var(--display); font-style:italic; font-size:.95rem; color:var(--sage); margin-top:8px; }
  .task .info { position:absolute; right:48px; top:16px; width:20px; height:20px; border-radius:50%; border:1.5px solid currentColor; font-size:.7rem; display:grid; place-items:center; opacity:.45; font-weight:700; font-family:var(--display); font-style:italic; }
  .task .check { position:absolute; right:16px; top:15px; width:22px; height:22px; border-radius:50%; border:2px solid var(--forest); display:grid; place-items:center; font-size:.75rem; transition:transform .3s var(--spring), background .2s; }
  .task:hover .check { transform:scale(1.12); }
  .task .check::before { content:""; position:absolute; inset:-10px; }
  .task.ready .check, .task.prog .check, .task.done .check { cursor:pointer; }
  .task.ready .check:hover, .task.prog .check:hover { background:var(--forest); color:var(--cream2); transform:scale(1.25); }
  .task.ready .check:hover::after, .task.prog .check:hover::after { content:"✓"; }
  .task.done .check:hover { background:var(--forest); color:#fff; border-color:var(--forest); transform:scale(1.25); }
  .task.done { background:var(--sage); border-color:var(--sage); color:#fff; box-shadow:none; }
  .task.done .meta, .task.done .note { color:rgba(255,255,255,.8); }
  .task.done .role { border-color:rgba(255,255,255,.35); }
  .task.done .role.hq { background:rgba(255,255,255,.18); border-color:transparent; }
  .task.done .check { background:#fff; color:var(--forest); border-color:#fff; }
  .task.ready { background:var(--cream2); border-color:var(--forest); }
  .task.prog { background:#fff; border-color:var(--forest); }
  .task.prog::after { content:"In progress"; position:absolute; top:-10px; left:16px; background:var(--forest); color:var(--cream2); font-size:.65rem; padding:2px 9px; border-radius:999px; letter-spacing:.1em; font-weight:700; text-transform:uppercase; }
  .task.locked { background:transparent; border-color:var(--lockline); border-style:dashed; color:var(--mute); box-shadow:none; }
  .task.locked .t { font-weight:500; }
  .task.locked .check { border-color:var(--lockline); }
  .task.locked .blocker { font-size:.82rem; margin-top:8px; line-height:1.45; }
  .task.locked .blocker b { color:var(--forest); font-weight:600; }
  .empty { font-family:var(--display); font-style:italic; font-size:1.05rem; color:var(--mute); padding:22px; border:1.5px dashed var(--line); border-radius:14px; text-align:center; }

  /* ---------- top unblockers ---------- */
  .strip { display:grid; grid-template-columns:repeat(auto-fit, minmax(320px, 1fr)); gap:18px; }
  .strip .task { margin:0; padding:20px 20px 16px 20px; }
  .strip .task .num { font-family:var(--display); font-style:italic; font-size:2.2rem; line-height:1; color:var(--sage2); position:absolute; right:18px; bottom:10px; opacity:.6; }
  .strip .task .proj { display:block; font-size:.7rem; color:var(--mute); font-weight:600; margin-bottom:6px; letter-spacing:.14em; text-transform:uppercase; }

  /* ---------- drawer ---------- */
  .scrim { position:fixed; inset:0; background:rgba(20,43,37,.45); backdrop-filter:blur(3px); opacity:0; pointer-events:none; transition:opacity .35s; z-index:5; }
  .drawer { position:fixed; top:0; right:0; bottom:0; width:min(540px,100%); background:#fff; box-shadow:-20px 0 60px rgba(20,43,37,.3); transform:translateX(104%); transition:transform .5s var(--spring); z-index:6; overflow-y:auto; padding:34px 38px 40px; }
  body.open .scrim { opacity:1; pointer-events:auto; } body.open .drawer { transform:none; }
  .drawer > * { animation:rise .6s var(--ease) both; }
  .drawer > *:nth-child(2) { animation-delay:.05s } .drawer > *:nth-child(3) { animation-delay:.1s } .drawer > *:nth-child(n+4) { animation-delay:.15s }
  .drawer .x { position:absolute; top:22px; right:24px; width:38px; height:38px; border-radius:50%; background:var(--cream); border:none; font-size:1.3rem; cursor:pointer; color:var(--forest); display:grid; place-items:center; transition:transform .3s var(--spring), background .2s; }
  .drawer .x:hover { transform:rotate(90deg); background:var(--cream2); }
  .drawer .kicker { font-size:.72rem; letter-spacing:.18em; text-transform:uppercase; color:var(--mute); font-weight:600; }
  .drawer .kicker a { color:var(--forest); cursor:pointer; }
  .drawer h2 { margin:10px 48px 16px 0; font-family:var(--display); font-weight:400; font-size:2rem; line-height:1.12; letter-spacing:-.015em; }
  .drawer .pills { display:flex; flex-wrap:wrap; gap:8px; }
  .drawer .pill { font-size:.8rem; padding:5px 12px; border-radius:999px; border:1.5px solid var(--line); font-weight:500; }
  .drawer .pill.done { background:var(--sage); color:#fff; border-color:var(--sage); } .drawer .pill.ready { background:var(--cream2); border-color:var(--forest); font-weight:700; } .drawer .pill.locked { border-style:dashed; border-color:var(--lockline); color:var(--mute); } .drawer .pill.hq { background:var(--forest); color:var(--cream); border-color:var(--forest); } .drawer .pill.late { color:var(--red); border-color:var(--red); font-weight:600; }
  .drawer h5 { margin:30px 0 10px; font-size:.72rem; letter-spacing:.18em; text-transform:uppercase; color:var(--mute); font-weight:600; }
  .drawer p { margin:0; font-size:1.02rem; line-height:1.6; white-space:pre-wrap; }
  .drawer p.none { color:var(--mute); font-family:var(--display); font-style:italic; }
  .drawer a.ext { color:var(--forest); font-weight:600; word-break:break-all; text-decoration:none; border-bottom:1.5px solid var(--sage2); }
  .drawer .quote { font-family:var(--display); font-style:italic; font-size:1.15rem; color:var(--sage); line-height:1.5; border-left:3px solid var(--cream2); padding-left:14px; }
  .drawer ul { margin:0; padding:0; list-style:none; }
  .drawer li { padding:10px 0; border-bottom:1px solid var(--line); font-size:1rem; display:flex; gap:12px; align-items:baseline; }
  .drawer li:last-child { border-bottom:none; }
  .drawer li::before { content:"○"; color:var(--mute); font-size:.9rem; }
  .drawer li.d::before { content:"●"; color:var(--sage); }
  .drawer li a { cursor:pointer; color:var(--forest); text-decoration:none; font-weight:500; }
  .drawer li a:hover { text-decoration:underline; }
  .drawer li small { color:var(--mute); font-size:.8rem; }
  .drawer .stat { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; }
  .drawer .stat div { background:var(--cream); border-radius:14px; padding:16px 16px 14px; }
  .drawer .stat b { display:block; font-family:var(--display); font-style:italic; font-weight:400; font-size:2.4rem; line-height:1; color:var(--forest); } .drawer .stat span { display:block; font-size:.78rem; color:var(--mute); margin-top:8px; line-height:1.35; }
  .drawer .stat b.late { color:var(--red); }
  .drawer .act { margin-top:32px; width:100%; padding:17px; border-radius:14px; border:none; font-weight:700; font-size:1.05rem; cursor:pointer; background:var(--forest); color:var(--cream2); letter-spacing:.02em; font-family:var(--ui); transition:transform .3s var(--spring), box-shadow .3s; box-shadow:0 12px 30px -10px rgba(29,60,52,.5); }
  .drawer .act:hover { transform:translateY(-2px); box-shadow:0 18px 36px -12px rgba(29,60,52,.55); }
  .drawer .act.undo { background:var(--cream); color:var(--forest); box-shadow:none; }
  .drawer .act:disabled { background:var(--lock); color:var(--mute); cursor:not-allowed; box-shadow:none; transform:none; }
  .fine { font-size:.8rem; color:var(--mute); margin-top:14px; line-height:1.5; }

  /* ---------- toast + footer ---------- */
  .toast { position:fixed; left:50%; bottom:34px; transform:translateX(-50%) translateY(30px) scale(.96); background:var(--forest); color:var(--cream2); padding:14px 24px; border-radius:999px; font-weight:600; font-size:1rem; opacity:0; transition:all .5s var(--spring); pointer-events:none; z-index:7; max-width:90vw; text-align:center; box-shadow:0 20px 50px -12px rgba(20,43,37,.6); }
  .toast b { font-family:var(--display); font-style:italic; font-weight:400; font-size:1.3rem; margin-right:8px; }
  .toast.show { opacity:1; transform:translateX(-50%) translateY(0) scale(1); }
  .footer { display:flex; justify-content:space-between; align-items:center; margin-top:60px; font-size:.8rem; color:var(--mute); border-top:1px solid var(--line); padding-top:18px; flex-wrap:wrap; gap:12px; }
  .footer button { background:none; border:1px solid var(--line); color:var(--mute); font-size:.78rem; padding:6px 12px; border-radius:999px; cursor:pointer; font-family:var(--ui); transition:all .2s; }
  .footer button:hover { color:var(--forest); border-color:var(--forest); }
  .legend { display:flex; gap:18px; }
  .legend span::before { content:""; display:inline-block; width:12px; height:12px; border-radius:4px; margin-right:6px; vertical-align:-2px; border:1.5px solid var(--line); background:#fff; }
  .legend .d::before { background:var(--sage); border-color:var(--sage); } .legend .n::before { background:var(--cream2); border-color:var(--forest); } .legend .l::before { background:transparent; border-style:dashed; border-color:var(--lockline); }

  @keyframes rise { from { opacity:0; transform:translateY(14px); } }
  @keyframes fade { from { opacity:0; } }
  @keyframes pop { from { opacity:0; transform:scale(.6); } }
  @keyframes draw { from { stroke-dasharray:0 1000; } }
  @keyframes dash { to { stroke-dashoffset:0; } }
  @keyframes pulse { 0%,100% { r:46; opacity:.7; } 50% { r:54; opacity:0; } }
  @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; } }
  @media (max-width:900px) { .title { grid-template-columns:1fr; gap:12px; } .hint { text-align:left; } header { grid-template-columns:1fr; gap:18px; padding:22px 20px; } .anchors { justify-content:flex-start; } .anchors div { text-align:left; } main { padding:24px 20px 50px; } .map { margin:0 -20px; padding:20px 20px 12px; } .cols { grid-template-columns:1fr; } .title h2 { font-size:1.9rem; } }

  /* ---------- sign in ---------- */
  #signin { max-width:640px; margin:12vh auto; text-align:center; }
  .signin-title { font-family:var(--display); font-weight:400; font-size:2.4rem; line-height:1.1; margin:0 0 14px; }
  .signin-title em { font-style:italic; color:var(--sage); }
  #gsi { display:flex; justify-content:center; margin:26px 0 14px; }
  .linkbtn { background:none; border:none; color:var(--mute); font-family:var(--ui); font-size:.85rem; cursor:pointer; text-decoration:underline; }
  .who select { margin-left:8px; }
