/* Georgian Roots — root map (index.html) + root page (root.html). Owner: MAP worker.
   White paper, black ink, 2px outlines, pill controls; theme tints kept but soft. */
body[data-page="map"], body[data-page="root"] {
  --km-paper: #fff; --km-ink: #111; --km-ln: var(--line-c, #DADAD7); --km-muted: #6a6a66; --km-faint: #bdbdb6; --km-line: #e3e3dc; --km-soft: #f6f6f1;
  --km-accent: #143CAA; --km-red: #C83C1E;
  --km-tl: 0.94; --km-tc: 0.032; --km-gl: 0.975; --km-gc: 0.014;
  --km-ka: var(--f-ka, "Noto Sans Georgian", system-ui, sans-serif);
  --km-ui: var(--f-text, "Golos Text", system-ui, sans-serif);
  background: var(--km-paper); color: var(--km-ink);
}
.km-main [hidden], .km-panel[hidden], .km-tip[hidden], .km-res[hidden], svg[hidden] { display: none !important; }
[lang="ka"] { font-family: var(--km-ka); }

/* ---------- map page layout ---------- */
body[data-page="map"] { overflow-x: hidden; }
.km-main { display: block; padding: 0; margin: 0; max-width: none; width: 100%; }
.km-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; padding: 10px 16px; border-bottom: 2px solid var(--km-ln);
  background: var(--km-paper); position: relative; z-index: 6; box-sizing: border-box; }
.km-seg { display: inline-flex; border: 2px solid var(--km-ln); border-radius: 999px; padding: 2px; gap: 2px; background: var(--km-paper); flex: none; }
.km-seg button { font: 500 14px/1 var(--km-ui); border: 0; background: transparent; color: var(--km-ink); padding: 8px 14px; border-radius: 999px; cursor: pointer; min-height: 34px; }
.km-seg button:hover { background: var(--km-soft); }
.km-seg button[aria-pressed="true"] { background: var(--km-ink); color: var(--km-paper); }
.km-search { position: relative; flex: 1 1 220px; max-width: 380px; min-width: 0; }
.km-search input { width: 100%; box-sizing: border-box; font: 15px var(--km-ui); padding: 8px 16px; min-height: 40px; border: 2px solid var(--km-ln);
  border-radius: 999px; background: var(--km-paper); color: var(--km-ink); -webkit-appearance: none; appearance: none; }
.km-search input::placeholder { color: var(--km-muted); }
.km-res { position: absolute; top: calc(100% + 6px); left: 0; right: 0; background: var(--km-paper); border: 2px solid var(--km-ln); border-radius: 16px;
  box-shadow: 0 10px 30px rgb(0 0 0 / .12); overflow: hidden; z-index: 8; }
.km-res button { display: flex; gap: 10px; align-items: baseline; width: 100%; text-align: left; border: 0; background: none; color: var(--km-ink);
  padding: 9px 14px; cursor: pointer; font: 14px var(--km-ui); }
.km-res button:hover, .km-res button.on { background: #F0FBEE; }
.km-res b { font: 700 16px var(--km-ka); flex: none; }
.km-res span { color: var(--km-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.km-none { padding: 10px 14px; color: var(--km-muted); font-size: 14px; }
.km-all { flex: none; display: inline-flex; align-items: center; gap: 6px; min-height: 40px; box-sizing: border-box; padding: 0 16px; border: 2px solid var(--km-ln);
  border-radius: 999px; font: 500 14px/1 var(--km-ui); color: var(--km-ink); text-decoration: none; white-space: nowrap; background: var(--km-paper); }
.km-all [lang="ka"] { font-weight: 700; }
.km-all:hover { background: var(--km-soft); }
.km-all:focus-visible { outline: 3px solid var(--km-accent); outline-offset: 2px; }
.km-stats { margin-left: auto; font-size: 13px; color: var(--km-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }

.km-stage { position: relative; height: calc(100vh - 140px); min-height: 320px; overflow: hidden; background: var(--km-paper); }
.km-stage > svg { width: 100%; height: 100%; display: block; cursor: grab; touch-action: none; }
.km-stage > svg:active { cursor: grabbing; }
.km-loading { position: absolute; inset: 0; display: grid; place-items: center; color: var(--km-muted); font-size: 16px; }

/* alphabet poster */
#km-abc text { font-family: var(--km-ka); cursor: pointer; }
#km-abc .r { font-weight: 700; fill: var(--km-ink); }
#km-abc .w { font-weight: 400; fill: #8a8a84; }
#km-abc .f { font-weight: 400; fill: var(--km-faint); }
#km-abc text:hover, #km-abc text.on { fill: var(--km-red); }
#km-abc.dim text:not(.on) { opacity: .3; }

/* circle maps */
.km-grp { fill: oklch(var(--km-gl) var(--km-gc) var(--h)); stroke: #dcdcd4; stroke-width: 1; }
.km-grp.sub { fill: transparent; }
[data-mode="sound"] .km-grp { fill: #fafaf7; }
[data-mode="sound"] .km-grp.sub { fill: transparent; stroke-dasharray: 2 2; }
.km-glabel, .km-gsub { paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linejoin: round; vector-effect: non-scaling-stroke; }
.km-glabel { font: 600 13px var(--km-ui); fill: #55554f; text-anchor: middle; pointer-events: none; letter-spacing: .06em; text-transform: uppercase; }
.km-gsub { font: 800 16px var(--km-ka); fill: #77776f; text-anchor: middle; pointer-events: none; }
.km-grp, .km-node circle, .km-links path { vector-effect: non-scaling-stroke; }
.km-node circle { fill: oklch(var(--km-tl) var(--km-tc) var(--h)); stroke: oklch(calc(var(--km-tl) - .2) var(--km-tc) var(--h)); stroke-width: .7; cursor: pointer; transition: fill .15s; }
[data-mode="sound"] .km-node circle { fill: #f1f1ec; stroke: #c9c9c1; }
.km-node.top circle { stroke: var(--km-ink); stroke-width: 1.6; }
.km-node:hover circle, .km-node.sel circle { fill: var(--km-ink); stroke: var(--km-ink); }
.km-node:hover text, .km-node.sel text { fill: var(--km-paper); }
.km-node:hover use, .km-node.sel use { color: var(--km-paper); }
.km-node text { font-family: var(--km-ka); font-weight: 600; fill: var(--km-ink); text-anchor: middle; dominant-baseline: central; pointer-events: none; }
.km-node use { color: var(--km-ink); pointer-events: none; }
.km-node.rel circle { stroke: var(--km-red); stroke-width: 2.5; }
.dim .km-node:not(.rel):not(.sel) { opacity: .25; }
.km-links path { fill: none; stroke: var(--km-red); stroke-width: 1.8; stroke-dasharray: 5 4; opacity: .9; pointer-events: none; }
.km-links path.hom { stroke-dasharray: none; }

/* zoom buttons */
.km-zoom { position: absolute; left: 16px; bottom: 16px; display: flex; flex-direction: column; gap: 8px; z-index: 3; }
.km-ctl { width: 40px; height: 40px; border-radius: 999px; border: 2px solid var(--km-ln); background: var(--km-paper); color: var(--km-ink);
  font: 500 19px/1 var(--km-ui); cursor: pointer; display: grid; place-items: center; padding: 0; }
.km-ctl:hover { background: var(--km-ink); color: var(--km-paper); border-color: var(--km-ink); }
.km-seg button:focus-visible, .km-ctl:focus-visible, .km-chip:focus-visible, .km-res button:focus-visible, .km-open:focus-visible,
.km-ex-tg:focus-visible, .km-search input:focus-visible, .rp a:focus-visible { outline: 3px solid var(--km-accent); outline-offset: 2px; }

/* explanation box (bottom right) */
.km-explain { position: absolute; right: 16px; bottom: 16px; z-index: 3; max-width: 320px; background: rgb(255 255 255 / .94);
  border: 2px solid var(--km-ln); border-radius: 18px; font-size: 13.5px; line-height: 1.45; color: var(--km-ink); }
.km-explain:not(.open) { border-radius: 999px; }
.km-explain:not(.open) .km-ex-tg { width: 36px; height: 36px; padding: 0; justify-content: center; }
.km-explain:not(.open) .km-ex-i { width: 28px; height: 28px; font-size: 16px; }
.km-ex-tg { display: flex; align-items: center; gap: 8px; width: 100%; border: 0; background: none; color: inherit; cursor: pointer;
  font: 600 13.5px var(--km-ui); padding: 7px 12px 7px 7px; text-align: left; border-radius: 999px; }
.km-ex-i { flex: none; width: 24px; height: 24px; border-radius: 50%; background: var(--km-ink); color: var(--km-paper); display: grid; place-items: center; font: 700 14px/1 var(--km-ui); }
.km-ex-body { padding: 0 14px 12px; display: grid; gap: 7px; }
.km-ex-body p { margin: 0; }
.km-ex-body .row > span { min-width: 0; }
.km-ex-body .row { display: flex; gap: 7px; align-items: center; flex-wrap: nowrap; color: var(--km-muted); font-size: 12.5px; }
.km-ex-body i.c { flex: none; display: inline-block; border-radius: 50%; background: oklch(var(--km-tl) var(--km-tc) 200); border: 1px solid oklch(calc(var(--km-tl) - .2) var(--km-tc) 200); }
.km-ex-body i.ringed { border: 2px solid var(--km-ink); } /* = the black ring of top-500 roots on the map */
.km-ex-body i.ln { width: 22px; height: 0; border-top: 2px dashed var(--km-red); }
.km-ex-body i.ln.solid { border-top-style: solid; margin-left: 6px; }
.km-lg-r { font: 700 17px var(--km-ka); color: var(--km-ink); }
.km-lg-w { font: 400 12px var(--km-ka); color: #8a8a84; margin-left: 6px; }
.km-ex-hint { color: var(--km-muted); font-size: 12.5px; }

/* tooltip */
.km-tip { position: absolute; pointer-events: none; background: var(--km-ink); color: var(--km-paper); padding: 7px 10px; border-radius: 10px;
  font-size: 13px; max-width: 260px; z-index: 7; line-height: 1.35; }
.km-tip b { font: 700 16px var(--km-ka); margin-right: 6px; }
.km-tip small { opacity: .75; font-variant-numeric: tabular-nums; }

/* side panel */
.km-panel { position: absolute; top: 0; right: 0; bottom: 0; width: min(420px, 100%); background: var(--km-paper); border-left: 2px solid var(--km-ln);
  z-index: 5; overflow-y: auto; overscroll-behavior: contain; padding: 20px 22px 32px; box-sizing: border-box; -webkit-overflow-scrolling: touch; }
.km-close { position: absolute; top: 12px; right: 12px; }
.km-hero { display: flex; gap: 14px; align-items: center; padding-right: 44px; }
.km-ic { flex: none; width: 64px; height: 64px; color: var(--km-ink); }
.km-ic svg { width: 64px; height: 64px; display: block; }
.km-hero h2 { font: 800 42px/1.05 var(--km-ka); margin: 0; word-break: break-word; }
.km-var { font: 500 14px var(--km-ka); color: var(--km-muted); margin-top: 4px; }
.km-gloss { font-size: 17px; margin: 14px 0 8px; line-height: 1.4; }
.km-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 14px; }
.km-chip { font: 500 12.5px/1.2 var(--km-ui); border: 1.5px solid var(--km-ln); border-radius: 999px; padding: 4px 10px; background: var(--km-paper);
  color: var(--km-ink); text-decoration: none; display: inline-flex; align-items: center; gap: 4px; }
.km-chip.th { background: oklch(.95 .035 var(--h)); border-color: transparent; }
.km-chip b { font: 700 14px var(--km-ka); }
.km-chip small { color: var(--km-muted); }
button.km-chip, a.km-chip { cursor: pointer; }
button.km-chip:hover, a.km-go:hover { background: var(--km-ink); color: var(--km-paper); border-color: var(--km-ink); }
a.km-go:hover small { color: inherit; }
.km-open { display: inline-flex; align-items: center; gap: 6px; font: 600 14px var(--km-ui); color: var(--km-paper); background: var(--km-ink);
  border: 2px solid var(--km-ink); border-radius: 999px; padding: 9px 16px; text-decoration: none; margin: 2px 0 6px; }
.km-open:hover { background: var(--km-paper); color: var(--km-ink); border-color: var(--km-ln); }
.km-panel h3 { font: 700 12px var(--km-ui); text-transform: uppercase; letter-spacing: .08em; color: var(--km-ink); margin: 22px 0 8px;
  padding-bottom: 5px; border-bottom: 1.5px solid var(--km-ln); display: flex; justify-content: space-between; }
.km-panel h3 span { color: var(--km-muted); font-weight: 500; }
.km-words { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.km-words li { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); gap: 10px; align-items: baseline; }
.km-words li.sub .k { padding-left: 12px; }
.km-words .k { font: 400 15px var(--km-ka); overflow-wrap: anywhere; }
.km-rt { font-weight: 800; }
.km-words .t { color: var(--km-muted); font-size: 13.5px; min-width: 0; }
.km-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #146E32; margin-left: 5px; vertical-align: middle; flex: none; }
.km-chip .km-dot { margin: 0 2px 0 0; }

@media (max-width: 700px) {
  .km-bar { padding: 8px 16px; gap: 8px; }
  .km-seg { width: 100%; }
  .km-seg button { flex: 1 1 auto; padding: 8px 6px; font-size: 13.5px; line-height: 1.1; }
  .km-search { flex: 1 1 0; max-width: none; }
  .km-all { padding: 0 14px; }
  .km-all-t { display: none; }   /* phone: only "ა–ჰ" (full name in aria-label / title) */
  .km-stats { display: none; }
  .km-zoom { left: 12px; bottom: 12px; }
  .km-ctl { width: 38px; height: 38px; }
  .km-explain { right: 12px; bottom: 12px; left: 64px; max-width: none; margin-left: auto; width: max-content; max-width: calc(100% - 76px); }
  .km-explain.open { width: auto; }
  .km-panel { top: auto; height: 62%; width: 100%; border-left: 0; border-top: 2px solid var(--km-ln); border-radius: 20px 20px 0 0;
    box-shadow: 0 -12px 30px rgb(0 0 0 / .12); padding: 18px 16px calc(28px + env(safe-area-inset-bottom, 0px)); }
  .km-hero h2 { font-size: 34px; }
  .km-ic, .km-ic svg { width: 52px; height: 52px; }
}
@media (prefers-reduced-motion: reduce) { .km-node circle { transition: none; } }

/* ---------- root page ---------- */
.rp { display: block; }
.rp-wrap { max-width: 1040px; margin: 0 auto; padding: 18px 16px 56px; box-sizing: border-box; }
.rp-loading { color: var(--km-muted); padding: 48px 0; text-align: center; }
.rp-nav { display: grid; grid-template-columns: 1fr auto 1fr; gap: 10px; align-items: center; margin: 4px 0 24px; }
.rp-nav:last-child { margin: 40px 0 0; padding-top: 18px; border-top: 2px solid var(--km-ln); }
.rp-nl { display: flex; align-items: center; gap: 10px; color: var(--km-ink); text-decoration: none; min-width: 0; }
.rp-nl.next { justify-content: flex-end; text-align: right; }
.rp-nl span { min-width: 0; }
.rp-nl small { display: block; font-size: 12px; color: var(--km-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rp-nl b { font: 700 19px var(--km-ka); }
.rp-nl em { font-style: normal; color: var(--km-muted); font-size: 14px; }
.rp-nl .ar { flex: none; width: 38px; height: 38px; border: 2px solid var(--km-ln); border-radius: 50%; display: grid; place-items: center; font-size: 17px; }
@media (hover: hover) { .rp-nl:hover .ar { background: var(--km-ink); color: var(--km-paper); border-color: var(--km-ink); } }
.rp-all { font: 600 14px var(--km-ui); color: var(--km-ink); border: 2px solid var(--km-ln); border-radius: 999px; padding: 7px 14px; text-decoration: none; white-space: nowrap; }
.rp-all:hover { background: var(--km-ink); color: var(--km-paper); border-color: var(--km-ink); }

.rp-hero { display: grid; grid-template-columns: auto 1fr; gap: 28px; align-items: start; padding: 26px; border: 2px solid var(--km-ln);
  border-radius: 28px; background: #FEF7ED; margin-bottom: 28px; }
.rp-ic { width: 150px; height: 150px; background: var(--km-paper); border: 2px solid var(--km-ln); border-radius: 24px; display: grid; place-items: center; color: var(--km-ink); }
.rp-ic svg { width: 116px; height: 116px; display: block; }
.rp-hd { min-width: 0; }
.rp-hd h1 { font: 800 clamp(48px, 9vw, 84px)/1 var(--km-ka); margin: 0 0 6px; word-break: break-word; letter-spacing: 0; }
.rp-var { margin: 0 0 10px; color: var(--km-muted); font-size: 15px; }
.rp-var b { color: var(--km-ink); font-weight: 600; }
.rp-tr { display: grid; gap: 4px 16px; grid-template-columns: max-content 1fr; align-items: baseline; margin: 12px 0 14px; }
.rp-tr div { display: contents; }
.rp-tr dt { font: 600 12px/1.2 var(--km-ui); text-transform: uppercase; letter-spacing: .07em; color: var(--km-muted); }
.rp-tr dd { margin: 0; font-size: 17px; line-height: 1.45; }
.rp-tr .cur dd { font-weight: 700; font-size: 19px; }
.rp-btn { display: inline-flex; align-items: center; gap: 6px; font: 600 15px var(--km-ui); color: var(--km-paper); background: var(--km-ink);
  border: 2px solid var(--km-ink); border-radius: 999px; padding: 10px 18px; text-decoration: none; }
.rp-btn:hover { background: var(--km-paper); color: var(--km-ink); border-color: var(--km-ln); }
.rp-hero .km-chips { margin: 0 0 16px; }

.rp-group { margin: 30px 0 0; }
.rp-group h2, .rp-rel h2 { font: 700 15px var(--km-ui); text-transform: uppercase; letter-spacing: .07em; margin: 0 0 6px; padding-bottom: 8px;
  border-bottom: 2px solid var(--km-ln); display: flex; gap: 10px; align-items: baseline; }
.rp-group h2 span { color: var(--km-muted); font-weight: 500; }
.rp-words { width: 100%; border-collapse: collapse; font-size: 15px; table-layout: fixed; }
.rp-words th { text-align: left; font: 600 11.5px var(--km-ui); text-transform: uppercase; letter-spacing: .07em; color: var(--km-muted); padding: 8px 10px 6px 0; }
.rp-words th:first-child { width: 30%; }
.rp-words td { padding: 9px 12px 9px 0; border-bottom: 1px solid var(--km-line); vertical-align: top; line-height: 1.4; overflow-wrap: anywhere; }
.rp-words td.cur { color: var(--km-ink); }
.rp-words td:not(.k):not(.cur) { color: #4d4d48; }
.rp-words td.k { font-size: 17px; }
.rp-words tr.sub td.k .kw { padding-left: 14px; position: relative; }
.rp-words tr.sub td.k .kw::before { content: "↳"; position: absolute; left: 0; color: var(--km-faint); font-size: 13px; }
.rp-words .kw { display: inline-block; }
.rp-ms { display: block; font-size: 13px; color: var(--km-muted); margin-top: 2px; }
.rp-ms .km-rt { font-weight: 700; }
.rp-tense { display: inline-block; font: 500 11px var(--km-ui); color: var(--km-muted); border: 1px solid var(--km-line); border-radius: 999px; padding: 1px 7px; margin-top: 3px; }
.rp-words tr:hover td { background: #FAFAF6; }
.rp-rel { margin-top: 34px; }
.rp-rel .km-chips { margin-top: 12px; gap: 8px; }
.rp-rel .km-chip { font-size: 14px; padding: 6px 13px; }
.rp-rel .km-chip b { font-size: 16px; }

.rp-ihead h1 { font: 800 clamp(34px, 6vw, 52px)/1.1 var(--km-ui); margin: 6px 0 8px; }
.rp-lead { font-size: 17px; color: #3f3f3b; max-width: 640px; margin: 0 0 16px; }
.rp-letters { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 18px; }
.rp-letters a { width: 38px; height: 38px; display: grid; place-items: center; border: 2px solid var(--km-ln); border-radius: 50%; color: var(--km-ink);
  text-decoration: none; font: 700 17px var(--km-ka); }
.rp-letters a:hover { background: var(--km-ink); color: var(--km-paper); border-color: var(--km-ink); }
.rp-iletter { scroll-margin-top: 80px; }
.rp-iletter h2 { font: 800 34px var(--km-ka); margin: 26px 0 8px; padding-bottom: 6px; border-bottom: 2px solid var(--km-ln); }
.rp-index { list-style: none; margin: 0; padding: 0; columns: 3 220px; column-gap: 24px; }
.rp-index li { break-inside: avoid; padding: 3px 0; }
.rp-index a { color: var(--km-ink); text-decoration: none; }
.rp-index a b { font: 700 16px var(--km-ka); }
.rp-index a span { color: var(--km-muted); font-size: 14px; }
.rp-index a:hover b { color: var(--km-red); }

@media (max-width: 700px) {
  .rp-hero { grid-template-columns: 1fr; gap: 16px; padding: 18px; border-radius: 22px; }
  .rp-ic { width: 104px; height: 104px; border-radius: 18px; }
  .rp-ic svg { width: 80px; height: 80px; }
  .rp-tr dd { font-size: 16px; }
  .rp-nav { grid-template-columns: 1fr 1fr; }
  .rp-all { grid-column: 1 / -1; grid-row: 2; justify-self: center; }
  .rp-nl em { display: none; }
  .rp-words, .rp-words tbody, .rp-words tr, .rp-words td { display: block; width: auto; }
  .rp-words thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .rp-words tr { padding: 10px 0; border-bottom: 1px solid var(--km-line); }
  .rp-words td { border: 0; padding: 1px 0; }
  .rp-words td.k { padding-bottom: 4px; }
  .rp-words td:not(.k) { display: grid; grid-template-columns: 26px 1fr; gap: 6px; font-size: 14.5px; }
  .rp-words td:not(.k)::before { content: attr(data-l); font: 600 10.5px/1.9 var(--km-ui); text-transform: uppercase; color: var(--km-faint);
    white-space: nowrap; }
  .rp-words tr:hover td { background: none; }
}
