/* Self-hosted fonts. Both families are SIL Open Font License 1.1;
   licences are in assets/fonts/. Latin subset only, so non-Latin text
   (the CJK and emoji examples in the copy) falls back to system fonts. */

@font-face{font-family:'Bricolage Grotesque';font-style:normal;font-weight:700;font-display:swap;src:url('fonts/bricolage-700.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/plex-sans-400.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/plex-sans-600.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/plex-mono-400.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/plex-mono-600.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* Converter-Hex — instrument-panel design system
   Palette: pale sage paper, ink near-black-green, single pine accent. */

:root{
  --paper:#E9EBE3;
  --panel:#F6F7F2;
  --panel-2:#EFF1EA;
  --ink:#141915;
  --muted:#5D665E;
  --rule:#CCD2C5;
  --rule-soft:#DEE2D7;
  --pine:#24544A;
  --pine-tint:#D7E3DC;
  --pine-ink:#123028;

  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --sans:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --disp:"Bricolage Grotesque",var(--sans);

  --r:3px;
  --w:70rem;
}

*,*::before,*::after{box-sizing:border-box}

html{-webkit-text-size-adjust:100%}

body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:17px;
  line-height:1.62;
  -webkit-font-smoothing:antialiased;
}

.wrap{width:100%;max-width:var(--w);margin:0 auto;padding:0 20px}

a{color:var(--pine);text-decoration:none;text-underline-offset:3px;text-decoration-thickness:1px}
a:hover{text-decoration:underline}

:focus-visible{outline:2px solid var(--pine);outline-offset:2px;border-radius:2px}

/* ---------- header ---------- */

.site-head{border-bottom:1px solid var(--rule);background:var(--panel)}
.head-in{display:flex;align-items:center;gap:20px;min-height:60px;flex-wrap:wrap}

.brand{display:flex;align-items:center;gap:10px;font-family:var(--mono);font-weight:600;
  font-size:.92rem;letter-spacing:.02em;color:var(--ink)}
.brand:hover{text-decoration:none}
.brand-mark{display:grid;place-items:center;width:26px;height:26px;background:var(--pine);
  color:var(--panel);border-radius:var(--r);font-size:.72rem;font-weight:600;letter-spacing:0}

.nav{margin-left:auto;display:flex;gap:2px;flex-wrap:wrap}
.nav a{font-family:var(--mono);font-size:.78rem;color:var(--muted);padding:5px 9px;border-radius:var(--r)}
.nav a:hover{background:var(--pine-tint);color:var(--pine-ink);text-decoration:none}
.nav a[aria-current="page"]{background:var(--pine);color:var(--panel)}

/* ---------- crumbs + hero ---------- */

.crumbs{font-family:var(--mono);font-size:.74rem;color:var(--muted);padding:18px 0 0;letter-spacing:.02em}
.crumbs span{opacity:.45;padding:0 5px}

.hero{padding:26px 0 22px}
.eyebrow{font-family:var(--mono);font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--pine);margin:0 0 12px}

h1{font-family:var(--disp);font-weight:700;line-height:1.02;letter-spacing:-.025em;
  font-size:clamp(2.1rem,6.4vw,3.4rem);margin:0}

.deck{font-size:1.05rem;color:var(--muted);max-width:46ch;margin:14px 0 0}

/* ---------- tool ---------- */

.tool{background:var(--panel);border:1px solid var(--rule);border-radius:var(--r);
  padding:18px;margin:0 0 34px}

.tool-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin:0 0 10px}

.lbl{font-family:var(--mono);font-size:.68rem;letter-spacing:.15em;text-transform:uppercase;color:var(--muted)}

.mini{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap}

.chip{font-family:var(--mono);font-size:.72rem;background:transparent;color:var(--muted);
  border:1px solid var(--rule);border-radius:var(--r);padding:3px 9px;cursor:pointer;line-height:1.5}
.chip:hover{border-color:var(--pine);color:var(--pine)}
.chip[aria-pressed="true"]{background:var(--pine);border-color:var(--pine);color:var(--panel)}

.entry{width:100%;display:block;font-family:var(--mono);font-weight:600;
  font-size:clamp(1.35rem,4.6vw,2.1rem);line-height:1.35;letter-spacing:.04em;
  color:var(--ink);background:var(--paper);border:1px solid var(--rule);border-radius:var(--r);
  padding:14px 15px;resize:vertical;min-height:3.6rem}
.entry::placeholder{color:var(--muted);opacity:.55;font-weight:400;letter-spacing:.02em}
.entry:focus{outline:none;border-color:var(--pine);box-shadow:0 0 0 3px var(--pine-tint)}
.entry.bad{border-color:#9C3B22;box-shadow:0 0 0 3px #F0DDD6}

.note{font-family:var(--mono);font-size:.76rem;color:var(--muted);margin:9px 0 0;min-height:1.2em}
.note.err{color:#9C3B22}

/* ---------- signature: nibble strip ---------- */

.strip-box{margin:16px 0 0;border-top:1px dashed var(--rule);padding:14px 0 0}
.strip{display:flex;gap:12px;overflow-x:auto;padding:2px 0 8px;scrollbar-width:thin}
.byte{flex:0 0 auto;border:1px solid var(--rule-soft);border-radius:var(--r);
  background:var(--panel-2);padding:7px 8px 5px;text-align:center}
.nibs{display:flex;gap:6px}
.nib{min-width:44px}
.nib b{display:block;font-family:var(--mono);font-size:1.15rem;font-weight:600;line-height:1.25;
  color:var(--pine-ink);background:var(--pine-tint);border-radius:2px;padding:1px 0}
.nib i{display:block;font-family:var(--mono);font-style:normal;font-size:.72rem;
  letter-spacing:.06em;color:var(--muted);margin-top:3px}
.byte em{display:block;font-family:var(--mono);font-style:normal;font-size:.62rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:5px;opacity:.8}
.strip-more{flex:0 0 auto;align-self:center;font-family:var(--mono);font-size:.74rem;color:var(--muted)}

/* ---------- outputs ---------- */

.outs{margin:16px 0 0;border-top:1px solid var(--rule);}
.out{display:grid;grid-template-columns:6.5rem minmax(0,1fr) auto;gap:12px;align-items:center;
  padding:11px 0;border-bottom:1px solid var(--rule-soft)}
.out:last-child{border-bottom:0}
.out .lbl{padding-top:2px}
.val{font-family:var(--mono);font-size:1.02rem;font-weight:600;word-break:break-all;
  color:var(--ink);margin:0;transition:background-color .5s ease}
.val.empty{color:var(--muted);font-weight:400;opacity:.6}
.val.flash{background:var(--pine-tint);transition:background-color 0s}

.copy{font-family:var(--mono);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;
  background:transparent;border:1px solid var(--rule);color:var(--muted);border-radius:var(--r);
  padding:4px 8px;cursor:pointer;white-space:nowrap}
.copy:hover{border-color:var(--pine);color:var(--pine)}
.copy.done{background:var(--pine);border-color:var(--pine);color:var(--panel)}

.single .val{font-size:clamp(1.35rem,4.4vw,2rem)}
.single .out{grid-template-columns:6.5rem minmax(0,1fr) auto}

@media (max-width:560px){
  .out{grid-template-columns:minmax(0,1fr) auto;row-gap:4px}
  .out .lbl{grid-column:1/-1}
}

/* ---------- prose ---------- */

.prose{max-width:none}
.prose h2{font-family:var(--disp);font-weight:700;letter-spacing:-.015em;line-height:1.15;
  font-size:clamp(1.4rem,3.4vw,1.85rem);margin:44px 0 12px;padding-top:14px;
  border-top:1px solid var(--rule)}
.prose h3{font-family:var(--disp);font-weight:700;font-size:1.08rem;letter-spacing:-.005em;
  margin:26px 0 8px}
.prose p{margin:0 0 14px;max-width:72ch}
.prose ul,.prose ol{margin:0 0 16px;padding-left:1.25em;max-width:72ch}
.prose li{margin:0 0 7px}
.prose strong{font-weight:600}
.prose code{font-family:var(--mono);font-size:.9em;background:var(--panel);
  border:1px solid var(--rule-soft);border-radius:2px;padding:1px 5px}

.callout{background:var(--panel);border:1px solid var(--rule);border-left:3px solid var(--pine);
  border-radius:var(--r);padding:14px 16px;margin:0 0 18px}
.callout p:last-child{margin-bottom:0}
.callout .lbl{display:block;margin-bottom:6px}

.steps{counter-reset:s;list-style:none;padding:0;margin:0 0 18px;max-width:72ch}
.steps li{counter-increment:s;position:relative;padding-left:2.5rem;margin:0 0 12px}
.steps li::before{content:counter(s);position:absolute;left:0;top:.15em;width:1.7rem;height:1.7rem;
  display:grid;place-items:center;font-family:var(--mono);font-size:.76rem;font-weight:600;
  color:var(--pine-ink);background:var(--pine-tint);border-radius:var(--r)}

.work{font-family:var(--mono);font-size:.86rem;line-height:1.85;background:var(--panel);
  border:1px solid var(--rule);border-radius:var(--r);padding:14px 16px;margin:0 0 18px;
  overflow-x:auto;white-space:pre;color:var(--ink)}
.work b{color:var(--pine);font-weight:600}

.tbl-scroll{overflow-x:auto;margin:0 0 18px;border:1px solid var(--rule);border-radius:var(--r)}
table{border-collapse:collapse;width:100%;font-family:var(--mono);font-size:.86rem;background:var(--panel)}
th,td{text-align:left;padding:8px 14px;border-bottom:1px solid var(--rule-soft);white-space:nowrap}
th{font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);
  font-weight:600;background:var(--panel-2)}
tr:last-child td{border-bottom:0}

.faq h3{margin:22px 0 6px}
.faq p{color:var(--muted)}

/* ---------- link grids ---------- */

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:10px;margin:0 0 18px}
.card{display:block;background:var(--panel);border:1px solid var(--rule);border-radius:var(--r);
  padding:12px 14px;color:var(--ink)}
.card:hover{border-color:var(--pine);text-decoration:none;background:var(--panel-2)}
.card b{display:block;font-family:var(--mono);font-size:.92rem;font-weight:600;color:var(--pine)}
.card span{display:block;font-size:.82rem;color:var(--muted);margin-top:2px;line-height:1.45}
.card.soon{opacity:.55;pointer-events:none}
.card.soon b{color:var(--muted)}

/* ---------- footer ---------- */

.site-foot{border-top:1px solid var(--rule);background:var(--panel);margin-top:56px;padding:28px 0 34px}
.foot-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:22px}
.foot-cols .foot-h{font-family:var(--mono);font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);margin:0 0 8px;font-weight:600}
.foot-cols ul{list-style:none;margin:0;padding:0}
.foot-cols li{margin:0 0 5px}
.foot-cols a{font-size:.88rem;color:var(--ink)}
.foot-cols a:hover{color:var(--pine)}
.foot-base{margin-top:24px;padding-top:16px;border-top:1px solid var(--rule-soft);
  font-family:var(--mono);font-size:.74rem;color:var(--muted);display:flex;gap:14px;flex-wrap:wrap}

@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
[hidden]{display:none!important}

/* Mobile: lift the tool toward the top of the viewport. */
@media (max-width:640px){
  body{font-size:16px}
  .head-in{min-height:52px;gap:10px}
  .nav{width:100%;margin-left:0;overflow-x:auto;flex-wrap:nowrap;
    padding-bottom:6px;scrollbar-width:none}
  .nav::-webkit-scrollbar{display:none}
  .nav a{white-space:nowrap;padding:4px 8px}
  .crumbs{padding-top:12px}
  .hero{padding:16px 0 14px}
  .eyebrow{margin-bottom:8px}
  .deck{font-size:.95rem;margin-top:10px}
  .tool{padding:14px}
  .tool-head{margin-bottom:8px}
  .entry{padding:11px 12px;min-height:3.1rem}
  .strip-box{margin-top:12px;padding-top:11px}
  .prose h2{margin-top:34px}
}

/* Reference tables read better constrained than stretched. */
.tbl-scroll{max-width:46rem}

/* ---------- calculator ---------- */
.calc-rows{display:grid;gap:10px;margin:0 0 4px}
.calc-row{display:grid;grid-template-columns:2.2rem minmax(0,1fr);gap:10px;align-items:center}
.calc-sym{font-family:var(--mono);font-size:1.3rem;font-weight:600;color:var(--pine);text-align:center}
.calc-rows .entry{font-size:clamp(1.2rem,4vw,1.8rem);min-height:3rem;padding:11px 13px}

/* ---------- colour ---------- */
.color-head{display:flex;gap:14px;align-items:stretch;margin:0 0 12px;flex-wrap:wrap}
.color-head .field{flex:1 1 260px;min-width:0}
.swatch{flex:0 0 132px;min-height:96px;display:grid;place-items:center;border:1px solid var(--rule);
  border-radius:var(--r);font-family:var(--mono);font-size:.86rem;font-weight:600;letter-spacing:.05em;
  background:var(--panel-2)}
.picker{width:132px;height:44px;padding:0;border:1px solid var(--rule);border-radius:var(--r);
  background:var(--panel);cursor:pointer}
.picker::-webkit-color-swatch-wrapper{padding:3px}
.picker::-webkit-color-swatch{border:0;border-radius:2px}
.picker::-moz-color-swatch{border:0;border-radius:2px}
.pick-wrap{display:flex;align-items:center;gap:10px;margin:0 0 12px;flex-wrap:wrap}

/* ---------- swatch grid (colour chart) ---------- */
.swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px;margin:0 0 18px}
.sw{border:1px solid var(--rule);border-radius:var(--r);overflow:hidden;background:var(--panel)}
.sw-chip{height:52px}
.sw b{display:block;font-family:var(--mono);font-size:.76rem;font-weight:600;padding:5px 7px 0}
.sw span{display:block;font-family:var(--mono);font-size:.68rem;color:var(--muted);padding:0 7px 6px}

/* ---------- long reference tables ---------- */
.tbl-tall{max-height:30rem;overflow:auto;border:1px solid var(--rule);border-radius:var(--r);
  margin:0 0 18px;max-width:46rem}
.tbl-tall table{border:0}
.tbl-tall thead th{position:sticky;top:0;z-index:1;background:var(--panel-2);
  box-shadow:inset 0 -1px 0 var(--rule)}
.tbl-tall td{padding:6px 14px}

/* ---------- section index ---------- */
.hub h2{margin-top:38px}

/* ---------- sequential section navigation ---------- */
.seq{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:26px 0 0;
  padding-top:20px;border-top:1px solid var(--rule)}
.seq a{display:block;background:var(--panel);border:1px solid var(--rule);border-radius:var(--r);
  padding:11px 14px;color:var(--ink)}
.seq a:hover{border-color:var(--pine);background:var(--panel-2);text-decoration:none}
.seq span{display:block;font-family:var(--mono);font-size:.66rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted);margin-bottom:3px}
.seq b{font-family:var(--mono);font-size:.9rem;font-weight:600;color:var(--pine);line-height:1.35}
.seq .seq-next{grid-column:2;text-align:right}
.seq .seq-prev{grid-column:1}
@media (max-width:560px){
  .seq{grid-template-columns:1fr}
  .seq .seq-next,.seq .seq-prev{grid-column:1;text-align:left}
}

/* ---------- sitemap page ---------- */
.map-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:22px;
  margin:0 0 24px}
.map-cols h2{margin:0 0 8px;padding-bottom:6px;border-bottom:1px solid var(--rule)}
.map-cols ul{list-style:none;margin:0;padding:0}
.map-cols li{margin:0 0 6px;line-height:1.4}
.map-cols li a{font-size:.93rem}
.map-cols li em{display:block;font-style:normal;font-size:.78rem;color:var(--muted)}

/* ---------- touch target sizing (WCAG 2.2 target size, 24px minimum) ----------
   Links inline in a sentence are exempt; navigation lists are not. Padding is
   added rather than font size, so nothing about the visual rhythm changes. */
.crumbs a{display:inline-block;padding:5px 2px;margin:-5px 0}
.foot-cols li{margin:0}
.foot-cols li a{display:inline-block;padding:6px 2px;margin:-1px 0}
.nav a{padding:7px 10px}
.card{padding:14px 14px}
.sw{display:block}

@media (max-width:640px){
  .nav a{padding:8px 10px}
  .crumbs a{padding:6px 2px;margin:-6px 0}
}
.foot-base a{display:inline-block;padding:5px 2px;margin:-5px 0}

/* ==================== layout: content column + contents rail ==================== */
.shell{display:block}
.col{min-width:0}

.toc{display:none}
.toc-h{font-family:var(--mono);font-size:.66rem;letter-spacing:.15em;text-transform:uppercase;
  color:var(--muted);margin:0 0 10px;font-weight:600}
.toc ul{list-style:none;margin:0;padding:0;border-left:1px solid var(--rule)}
.toc li{margin:0}
.toc a{display:block;font-size:.86rem;line-height:1.35;color:var(--muted);
  padding:6px 0 6px 14px;margin-left:-1px;border-left:2px solid transparent}
.toc a:hover{color:var(--pine);border-left-color:var(--rule);text-decoration:none}
.toc a.here{color:var(--pine-ink);border-left-color:var(--pine);font-weight:600}

@media (min-width:900px){
  .shell{display:grid;grid-template-columns:minmax(0,1fr) 13rem;gap:40px;align-items:start}
  .toc{display:block;position:sticky;top:28px;max-height:calc(100vh - 56px);overflow-y:auto;
    scrollbar-width:thin}
}
@media (min-width:1180px){
  .shell{grid-template-columns:minmax(0,1fr) 14rem;gap:56px}
}

/* ==================== refinements ==================== */

/* The tool is the primary object on the page; everything else stays quiet. */
.tool{box-shadow:0 1px 2px rgba(20,25,21,.04), 0 14px 32px -22px rgba(20,25,21,.30)}

/* Denser, calmer worked-example blocks with a rule tying them to the accent. */
.work{font-size:.82rem;line-height:1.72;border-left:2px solid var(--pine-tint);
  padding:13px 16px 13px 18px}

/* Tables: alternating rows read faster than uniform ones at this density. */
tbody tr:nth-child(even){background:var(--panel-2)}
th{position:relative}
.tbl-scroll table,.tbl-tall table{font-size:.84rem}
td{padding:7px 14px}

/* Cards lift very slightly rather than only changing border colour. */
.card{transition:transform .12s ease, border-color .12s ease, background-color .12s ease}
.card:hover{transform:translateY(-1px)}
@media (prefers-reduced-motion:reduce){.card:hover{transform:none}}

/* Prose measure held even inside the narrower column. */
.prose p,.prose ul,.prose ol,.steps li{max-width:68ch}
.prose h2{scroll-margin-top:24px}

/* Keyboard users should not have to tab the whole nav on every page. */
.skip{position:absolute;left:-9999px;top:0;z-index:20;background:var(--pine);color:var(--panel);
  font-family:var(--mono);font-size:.8rem;padding:10px 16px;border-radius:0 0 var(--r) 0}
.skip:focus{left:0;text-decoration:none}
main:focus{outline:none}

/* Snappier, quieter confirmation flash. */
.val{transition:background-color .32s ease}

/* ==================== dark theme ====================
   Same design, re-toned. Everything is driven by the variables above, so this
   block is a palette swap rather than a second stylesheet. */
@media (prefers-color-scheme:dark){
  :root{
    --paper:#121613;
    --panel:#191E1B;
    --panel-2:#1E2420;
    --ink:#E6EAE3;
    --muted:#96A29A;
    --rule:#2C332E;
    --rule-soft:#232A25;
    --pine:#7FC7AE;
    --pine-tint:#233A31;
    --pine-ink:#BDE5D3;
  }
  .brand-mark{background:var(--pine);color:#0E1512}
  .chip[aria-pressed="true"]{background:var(--pine);border-color:var(--pine);color:#0E1512}
  .copy.done{background:var(--pine);border-color:var(--pine);color:#0E1512}
  .nav a[aria-current="page"]{background:var(--pine);color:#0E1512}
  .skip{background:var(--pine);color:#0E1512}
  .steps li::before{background:var(--pine-tint);color:var(--pine-ink)}
  .entry.bad{border-color:#C4644A;box-shadow:0 0 0 3px #3A211A}
  .note.err{color:#E29278}
  .tool{box-shadow:0 1px 2px rgba(0,0,0,.4), 0 16px 34px -22px rgba(0,0,0,.7)}
  /* Swatches carry their own inline background. Near-black ones would otherwise
     disappear into the panel, so give every chip an inset hairline. */
  .sw,.swatch{border-color:#39413A}
  .sw-chip{box-shadow:inset 0 0 0 1px rgba(255,255,255,.14)}
  .swatch{box-shadow:inset 0 0 0 1px rgba(255,255,255,.10)}
}

/* ---------- usability affordances ---------- */
.tool-head{align-items:center}
.clear{font-family:var(--mono);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;
  background:transparent;border:1px solid var(--rule);color:var(--muted);border-radius:var(--r);
  padding:4px 9px;cursor:pointer;margin-left:8px;white-space:nowrap}
.clear:hover{border-color:var(--pine);color:var(--pine)}

.val.copyable{cursor:pointer;border-radius:2px}
.val.copyable:hover{background:var(--pine-tint)}
.val.empty{cursor:default}
.val.empty:hover{background:transparent}

.swap{margin:14px 0 0;padding-top:12px;border-top:1px dashed var(--rule)}
.swap a{display:inline-block;font-family:var(--mono);font-size:.76rem;color:var(--muted);
  padding:6px 2px;margin:-6px 0}
.swap a::before{content:"\21C4";margin-right:7px;color:var(--pine);font-size:.95rem;
  vertical-align:-1px}
.swap a:hover{color:var(--pine)}

/* ==================== responsive: scrollable content ====================
   Wide tables and preformatted blocks scroll sideways on narrow screens. That
   is fine, but only if the reader can tell. These are CSS-only scroll shadows:
   the "local" gradients sit on the content and slide away as you scroll, while
   the "scroll" gradients are pinned to the frame and reveal the shadow. */
.tbl-scroll,.tbl-tall,.work,.strip{
  background-image:
    linear-gradient(to right, var(--panel) 42%, rgba(246,247,242,0)),
    linear-gradient(to left,  var(--panel) 42%, rgba(246,247,242,0)),
    radial-gradient(farthest-side at 0 50%, rgba(20,25,21,.16), rgba(20,25,21,0)),
    radial-gradient(farthest-side at 100% 50%, rgba(20,25,21,.16), rgba(20,25,21,0));
  background-position:left center, right center, left center, right center;
  background-repeat:no-repeat;
  background-size:44px 100%, 44px 100%, 15px 100%, 15px 100%;
  background-attachment:local, local, scroll, scroll;
}
.work{background-color:var(--panel)}
.strip{background-image:none}
@media (prefers-color-scheme:dark){
  .tbl-scroll,.tbl-tall,.work{
    background-image:
      linear-gradient(to right, var(--panel) 42%, rgba(25,30,27,0)),
      linear-gradient(to left,  var(--panel) 42%, rgba(25,30,27,0)),
      radial-gradient(farthest-side at 0 50%, rgba(0,0,0,.55), rgba(0,0,0,0)),
      radial-gradient(farthest-side at 100% 50%, rgba(0,0,0,.55), rgba(0,0,0,0));
  }
}

/* ==================== responsive: narrow screens ==================== */
@media (max-width:640px){
  /* More characters per line in worked examples, which are alignment-dependent
     and cannot wrap. */
  .work{font-size:.74rem;line-height:1.68;padding:12px 13px}
  /* Tighter cells fit more columns before scrolling is needed. */
  th,td{padding:6px 10px}
  .tbl-scroll table,.tbl-tall table{font-size:.79rem}
  .tbl-tall{max-height:24rem}
  /* Output labels above values already; keep the value from crowding Copy. */
  .single .val{font-size:clamp(1.15rem,5.2vw,1.6rem)}
  .swatches{grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:7px}
  .grid{grid-template-columns:1fr}
  .foot-cols{gap:18px}
}

@media (max-width:400px){
  .work{font-size:.69rem}
  th,td{padding:5px 8px}
  .nib{min-width:38px}
  .nib b{font-size:1.02rem}
}

/* When a reference table has to scroll sideways, pin the first column so the
   value you are looking up stays visible while you reach the other bases. */
@media (max-width:900px){
  .tbl-scroll th:first-child,.tbl-scroll td:first-child,
  .tbl-tall th:first-child,.tbl-tall td:first-child{
    position:sticky;left:0;z-index:2;
    box-shadow:1px 0 0 var(--rule-soft);
  }
  .tbl-scroll td:first-child,.tbl-tall td:first-child{background:var(--panel)}
  .tbl-scroll tbody tr:nth-child(even) td:first-child,
  .tbl-tall tbody tr:nth-child(even) td:first-child{background:var(--panel-2)}
  .tbl-scroll th:first-child,.tbl-tall th:first-child{background:var(--panel-2);z-index:3}
}
