/* Localization & SLAM track. Builds on site.css tokens (light + dark) and theory.css lesson components.
 * Same-origin CSS only (strict CSP): SVG diagrams are styled by class, never by inline style. */

/* ---------- SVG diagrams (lessons) ---------- */
.th-diagram { margin: 18px 0; padding: 10px; background: var(--panel); border: 1px solid var(--rule); border-radius: 8px; }
.th-diagram figcaption { font-size: 14.5px; color: var(--ink-2); margin-top: 8px; line-height: 1.5; }
.th-svg { display: block; width: 100%; height: auto; max-width: 720px; margin: 0 auto; }
.sv-s-ink { stroke: var(--ink); } .sv-s-ink2 { stroke: var(--ink-2); } .sv-s-mute { stroke: var(--rule); }
.sv-s-acc { stroke: var(--cobalt); } .sv-s-ora { stroke: var(--orange); } .sv-s-grn { stroke: var(--green); }
.sv-f-ink { fill: var(--ink); } .sv-f-ink2 { fill: var(--ink-2); } .sv-f-mute { fill: var(--grid); }
.sv-f-acc { fill: var(--cobalt); } .sv-f-ora { fill: var(--orange); } .sv-f-grn { fill: var(--green); }
.sv-nofill { fill: none; }
.sv-s-acc.sv-f-acc, .sv-s-ora.sv-f-ora, .sv-s-grn.sv-f-grn { fill-opacity: .22; }
.sv-dash { stroke-dasharray: 6 4; }
.sv-head { fill: context-stroke; fill: var(--ink-2); }
.sv-t { fill: var(--ink); font-family: var(--font); }
.sv-t-ink2 { fill: var(--ink-2); } .sv-t-acc { fill: var(--cobalt); } .sv-t-ora { fill: var(--orange); } .sv-t-grn { fill: var(--green); }
.sv-b { font-weight: 700; }

/* ---------- lesson extras ---------- */
.sl-notation dt { font-family: var(--mono); font-size: 16px; }
.sl-table { overflow-x: auto; margin: 14px 0; }
.sl-table table { min-width: 0; }
.sl-refs { padding-left: 1.2em; }
.sl-refs li { margin: 8px 0; overflow-wrap: anywhere; }
.th-article .th-lablist em, .sl-item em { color: var(--ink-3); font-style: normal; font-size: .9em; }

/* ---------- track hub ---------- */
.slam-page .track-h1 { font-size: clamp(32px, 5vw, 48px); margin: 4px 0 10px; }
.sl-progress { font-size: 15.5px; color: var(--ink-2); max-width: 760px; }
.sl-how { max-width: 820px; margin: 22px 0 8px; padding: 4px 18px 8px; background: var(--panel); border: 1px solid var(--rule); border-left: 4px solid var(--cobalt); border-radius: 8px; }
.sl-how p { line-height: 1.6; }
.sl-mod { margin: 34px 0 0; padding-top: 22px; border-top: 1px solid var(--rule); scroll-margin-top: 12px; }
.sl-mod-no { font: 700 12.5px var(--font); letter-spacing: .08em; text-transform: uppercase; color: var(--orange); margin: 0; }
.sl-mod h2 { margin: 4px 0 6px; }
.sl-mod-sum { max-width: 760px; color: var(--ink-2); }
.sl-cols { display: grid; gap: 22px; grid-template-columns: minmax(0, 1fr); }
@media (min-width: 860px) { .sl-cols { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }
.sl-cols h3 { font-size: 16px; margin: 6px 0; }
.sl-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 6px; }
.sl-item { display: flex; gap: 10px; align-items: flex-start; padding: 9px 12px; background: var(--panel); border: 1px solid var(--rule); border-radius: 8px; }
.sl-item[data-status="planned"] { opacity: .72; }
.sl-id { font: 700 12.5px var(--mono); color: var(--cobalt); min-width: 3.4em; padding-top: 2px; }
.sl-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.sl-body a { font-weight: 600; }
.sl-plain { font-weight: 600; color: var(--ink-2); }
.sl-tag { font-size: 12.5px; color: var(--ink-3); }

/* ---------- lab pages ---------- */
.slam-viewport { background: var(--panel); border: 1px solid var(--rule); border-radius: 8px; overflow: hidden; }
.slam-viewport canvas { display: block; width: 100%; height: auto; aspect-ratio: 3 / 2; touch-action: manipulation; }
.slam-plot { display: block; width: 100%; height: 190px; margin-top: 8px; background: var(--panel); border: 1px solid var(--rule); border-radius: 8px; }
.slam-legend { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 8px 0; font-size: 13px; color: var(--ink-2); }
.slam-legend .sl-lg { display: inline-flex; align-items: center; gap: 6px; }
.slam-legend .sw { flex: none; width: 14px; height: 4px; border-radius: 2px; display: inline-block; background: var(--ink-3); }
.sw-ink { background: var(--ink); } .sw-acc { background: var(--cobalt); } .sw-ora { background: var(--orange); } .sw-grn { background: var(--green); } .sw-mute { background: var(--ink-3); }
.slam-editor { min-height: 260px; }
.slam-page .stage-panel { background: var(--panel); border: 1px solid var(--rule); border-radius: 8px; padding: 6px 14px 12px; margin-bottom: 10px; }
.slam-page .stage-panel h3 { margin: 8px 0; font-size: 15px; }
.slam-page .ctl { display: block; margin: 10px 0; font-size: 14px; }
.slam-page .ctl span { display: block; margin-bottom: 4px; color: var(--ink-2); }
.slam-page .ctl input[type=range] { width: 100%; }
.slam-page .ctl select { width: 100%; min-height: 38px; font: inherit; background: var(--panel); color: var(--ink); border: 1px solid var(--rule); border-radius: var(--r); }
.slam-page .ctl-toggle { display: flex; align-items: center; gap: 8px; min-height: 36px; }
.slam-page .ctl-toggle span { display: inline; margin: 0; }
.slam-page fieldset.q { border: 1px solid var(--rule); border-radius: 8px; margin: 10px 0; padding: 8px 12px; }
.slam-page fieldset.q legend { font-weight: 600; padding: 0 6px; }
.slam-page .opt { display: flex; gap: 8px; align-items: flex-start; padding: 6px 0; min-height: 36px; cursor: pointer; }
.slam-page .qexp { font-size: 14px; color: var(--ink-2); margin: 6px 0 0; }
.slam-page .run-values { margin-top: 10px; }
.slam-page .check-msg { font-size: 13px; color: var(--ink-2); margin-top: 2px; }
.slam-page pre.solution { white-space: pre-wrap; overflow-x: auto; background: var(--code-bg); border: 1px solid var(--rule); border-radius: 6px; padding: 10px; font: 13px/1.5 var(--mono); }
.slam-page .pass-h { color: var(--green); } .slam-page .fail-h { color: var(--orange); }
.slam-page .ok { color: var(--green); font-weight: 800; } .slam-page .no { color: var(--orange); font-weight: 800; }
.slam-page .hint { margin: 8px 0; padding: 8px 12px; background: var(--cobalt-2); border-radius: 8px; font-size: 14.5px; }
.slam-page .lab-about pre.math { overflow-x: auto; }

/* ---------- ROS 2 project pages ---------- */
.sl-ros .sl-callout { padding: 12px 16px; background: var(--orange-2); border-left: 4px solid var(--orange); border-radius: 8px; margin: 14px 0; }
.sl-ros pre.cmd { overflow-x: auto; background: var(--code-bg); border: 1px solid var(--rule); border-radius: 6px; padding: 10px 12px; font: 13.5px/1.5 var(--mono); }
.sl-ros .sl-tool { background: var(--panel); border: 1px solid var(--rule); border-radius: 8px; padding: 8px 16px 14px; margin: 16px 0; }
.sl-ros .sl-tool textarea { width: 100%; min-height: 150px; font: 13px/1.5 var(--mono); background: var(--code-bg); color: var(--ink); border: 1px solid var(--rule); border-radius: 6px; padding: 8px; }
.sl-ros .sl-tool output { display: block; margin-top: 8px; white-space: pre-wrap; font-size: 14px; }
.sl-ros .sl-tool label { display: block; margin: 8px 0 2px; font-size: 14px; }
.sl-ros .sl-tool input[type="text"], .sl-ros .sl-tool input[type="number"] { width: 100%; max-width: 360px; padding: 6px 8px; font: 14px var(--mono); background: var(--code-bg); color: var(--ink); border: 1px solid var(--rule); border-radius: 6px; }
.sl-ros .sl-tool .tool-out { list-style: none; padding: 0; margin: 12px 0 0; }
.sl-ros .sl-tool .tool-out li { padding: 8px 10px; margin: 6px 0; border-left: 4px solid var(--rule); background: var(--code-bg); border-radius: 4px; overflow-wrap: anywhere; }
.sl-ros .sl-tool .tool-error { border-left-color: var(--orange); }
.sl-ros .sl-tool .tool-warn { border-left-color: var(--gold, #B8860B); }
.sl-ros .sl-tool .tool-ok { border-left-color: var(--green, #1F7A4D); }
.sl-ros details.sl-solution { margin: 14px 0; padding: 10px 14px; border: 1px solid var(--rule); border-radius: 8px; }
.sl-ros details.sl-solution summary { cursor: pointer; font-weight: 600; }

/* resources: hub link and the survey page (the entry cards reuse the pr-res rules of probability.css) */
.sl-reslink { margin: 6px 0 18px; max-width: 820px; }
.sl-reslink .btn { white-space: normal; }
.sl-reslink-note { margin-left: 8px; font-size: 14.5px; color: var(--ink-2); }
.pr-tag.sl-form { border-color: var(--cobalt); }
.sl-findings { max-width: 820px; margin: 8px 0 0; padding-left: 1.2em; }
.sl-findings li { margin: 8px 0; line-height: 1.6; }
