
  :root{
    --bg:#f6f7f9; --card:#fff; --fg:#14171c; --muted:#5b6472;
    --line:#d9dee6; --accent:#1d4ed8; --warn:#9a3412; --warnbg:#ffedd5;
    --ok:#0f766e; --okbg:#ccfbf1;
  }
  @media (prefers-color-scheme:dark){
    :root{
      --bg:#0f1216; --card:#181d24; --fg:#e8ecf2; --muted:#949eae;
      --line:#2a323d; --accent:#6f9bff; --warn:#fdba74; --warnbg:#7c2d12;
      --ok:#5eead4; --okbg:#134e4a;
    }
  }
  *{box-sizing:border-box}
  body{margin:0;padding:1.25rem 1rem 4rem;background:var(--bg);color:var(--fg);
       font:16px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
  main{max-width:900px;margin:0 auto}
  .top{display:flex;align-items:baseline;gap:.75rem;margin-bottom:1rem;flex-wrap:wrap}
  h1{font-size:1.3rem;margin:0}
  .top a{color:var(--muted);font-size:.85rem;text-decoration:none}
  .top a:hover{color:var(--accent)}

  #find{width:100%;padding:.85rem 1rem;font-size:1.05rem;background:var(--card);
    color:var(--fg);border:2px solid var(--line);border-radius:12px}
  #find:focus{outline:none;border-color:var(--accent)}
  .bar{display:flex;justify-content:space-between;align-items:center;gap:1rem;
    margin:.5rem 0 1rem;color:var(--muted);font-size:.8rem;min-height:1.4rem}
  .bar button{background:none;border:none;color:var(--muted);font:inherit;font-size:.8rem;
    cursor:pointer;padding:0;text-decoration:underline}
  .bar button:hover{color:var(--accent)}

  details.cat{border-bottom:1px solid var(--line)}
  details.cat > summary{list-style:none;cursor:pointer;padding:.7rem .25rem;
    display:flex;align-items:center;gap:.5rem;font-size:.8rem;font-weight:600;
    text-transform:uppercase;letter-spacing:.06em;color:var(--muted);user-select:none}
  details.cat > summary::-webkit-details-marker{display:none}
  details.cat > summary::before{content:"";border:solid currentColor;border-width:0 1.5px 1.5px 0;
    padding:2.5px;transform:rotate(-45deg);transition:transform .15s;margin-right:.15rem}
  details.cat[open] > summary::before{transform:rotate(45deg)}
  details.cat > summary:hover{color:var(--accent)}
  details.cat > summary .n{margin-left:auto;font-weight:400;letter-spacing:0;
    text-transform:none;font-size:.78rem;opacity:.8}

  .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
    gap:.5rem;padding:.15rem .25rem 1rem}
  button.pick{padding:.7rem .8rem;font:inherit;font-size:.9rem;font-weight:600;
    background:var(--card);color:var(--fg);border:1px solid var(--line);
    border-radius:10px;cursor:pointer;text-align:left;line-height:1.3}
  button.pick small{display:block;font-weight:400;font-size:.75rem;color:var(--muted);margin-top:.15rem}
  button.pick:hover,button.pick:focus-visible{border-color:var(--accent);outline:none}
  button.pick[aria-expanded=true]{border-color:var(--accent);
    box-shadow:inset 0 0 0 1px var(--accent);border-bottom-left-radius:0;border-bottom-right-radius:0}

  /* The open tool spans the whole grid, so it lands directly under the row
     holding the card that was clicked rather than at the foot of the page. */
  .panel{grid-column:1 / -1;margin:-.25rem 0 .5rem}
  section.tool{background:var(--card);border:1px solid var(--accent);border-radius:12px;padding:1.1rem}
  section.tool h2{font-size:1.05rem;margin:0 0 .2rem;text-transform:none;letter-spacing:0;color:var(--fg)}
  .sub{color:var(--muted);font-size:.85rem;margin:0 0 1rem}
  .row{display:flex;gap:.5rem;flex-wrap:wrap;align-items:flex-end;margin-bottom:.75rem}
  .f{flex:1;min-width:130px}
  label{display:block;font-size:.78rem;color:var(--muted);margin-bottom:.25rem}
  label.chk{display:flex;gap:.4rem;align-items:center;font-size:.9rem;color:var(--fg)}
  input,select{width:100%;padding:.6rem .7rem;font-size:1rem;background:var(--bg);
    color:var(--fg);border:1px solid var(--line);border-radius:8px}
  label.chk input{width:auto}
  input:focus,select:focus{outline:none;border-color:var(--accent)}
  .out{margin-top:.9rem;padding:.9rem 1rem;background:var(--okbg);color:var(--ok);
    border-radius:10px;font-size:1.05rem;font-weight:600}
  .out small{display:block;font-weight:400;font-size:.82rem;opacity:.85;margin-top:.3rem}
  .out.empty{background:var(--bg);color:var(--muted);font-weight:400}
  .out.warn{background:var(--warnbg);color:var(--warn)}
  .note{margin-top:.9rem;padding:.75rem .9rem;background:var(--warnbg);color:var(--warn);
    border-radius:10px;font-size:.83rem}
  .note b{display:block;margin-bottom:.15rem}
  .src{margin-top:.9rem;font-size:.8rem;color:var(--muted)}
  .src a{color:var(--accent)}
  table{width:100%;border-collapse:collapse;font-size:.85rem;margin-top:.75rem}
  th,td{text-align:left;padding:.4rem .5rem;border-bottom:1px solid var(--line)}
  th{color:var(--muted);font-weight:600;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}
  .scroll{overflow-x:auto}
  .none{color:var(--muted);padding:1.5rem 0}

  /* Pinned tools. A handful get reached for constantly, and making someone
     search or expand a category for the unit converter is a tax on every use. */
  .pinned{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
    gap:.5rem;margin:0 0 1rem}
  .pinned button{padding:.7rem .8rem;font:inherit;font-size:.9rem;font-weight:600;
    background:var(--accent);color:#fff;border:0;border-radius:10px;cursor:pointer;
    text-align:left;line-height:1.25}
  .pinned button small{display:block;font-weight:400;font-size:.74rem;opacity:.85;margin-top:.15rem}
  .pinned button:hover{filter:brightness(1.08)}
  .pinnedlbl{font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;
    color:var(--muted);font-weight:600;margin:0 0 .45rem}

  /* Drawn output. Scales to the panel and prints with the rest. */
  .draw{margin-top:.9rem}
  .draw svg{width:100%;height:auto;max-width:640px;display:block;
    background:var(--card);border:1px solid var(--line);border-radius:10px}
  .draw text{font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
  .formula{margin:.6rem 0 0;border-top:1px solid var(--line);padding-top:.5rem}
  .formula summary{cursor:pointer;font-size:.78rem;color:var(--muted);
    text-transform:uppercase;letter-spacing:.05em}
  .formula code{display:block;margin:.4rem 0;padding:.4rem .6rem;background:var(--card);
    border-radius:6px;font-size:.85rem;overflow-x:auto;white-space:pre-wrap}
