Files
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

127 lines
5.7 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Topic — Interactive Explainer</title>
<style>
:root{
--bg:#ffffff; --panel:#f5f6f8; --text:#1b1f24; --muted:#6b7280;
--accent:#2563eb; --line:#d8dce3; --warn:#d97706; --warn-bg:#fff7ed;
}
@media (prefers-color-scheme: dark){
:root{
--bg:#0f1115; --panel:#171a21; --text:#e6e8ec; --muted:#9aa3af;
--accent:#5b8cff; --line:#2a2f39; --warn:#f59e0b; --warn-bg:#2a2113;
}
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);
font:16px/1.6 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;}
header{padding:28px 20px 16px;border-bottom:1px solid var(--line);}
header h1{margin:0 0 4px;font-size:24px}
header p{margin:0;color:var(--muted);font-size:14px}
main{max-width:760px;margin:0 auto;padding:20px}
.summary{background:var(--panel);border:1px solid var(--line);border-radius:12px;
padding:16px;margin:16px 0}
.summary h2{margin:0 0 8px;font-size:15px;color:var(--mcent);text-transform:uppercase;
letter-spacing:.04em;color:var(--muted)}
.diagram{margin:16px 0}
.diagram svg{width:100%;height:auto;display:block}
/* Tabs */
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin:18px 0 8px}
.tab{padding:8px 14px;border:1px solid var(--line);background:var(--panel);
color:var(--text);border-radius:8px;cursor:pointer;font-size:14px}
.tab[aria-selected="true"]{border-color:var(--accent);color:var(--accent);font-weight:600}
.panel{display:none;border:1px solid var(--line);border-radius:10px;padding:16px;
background:var(--panel)}
.panel.active{display:block;animation:fade .3s ease}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* Accordion */
details{border:1px solid var(--line);border-radius:10px;padding:0 14px;margin:8px 0;
background:var(--panel)}
details summary{cursor:pointer;padding:12px 0;font-weight:600;list-style:none}
details summary::-webkit-details-marker{display:none}
details[open] summary{color:var(--accent)}
details p{margin:0 0 12px;color:var(--text)}
/* Least-certain callout */
.warn{background:var(--warn-bg);border:1px solid var(--warn);border-radius:10px;
padding:12px 14px;margin:18px 0;color:var(--text)}
.warn b{color:var(--warn)}
footer{color:var(--muted);font-size:13px;padding:16px 20px 40px;
border-top:1px solid var(--line);max-width:760px;margin:0 auto}
a{color:var(--accent)}
</style>
</head>
<body>
<header>
<h1>Topic Title</h1>
<p>One-line plain-language subtitle.</p>
</header>
<main>
<!-- Rung 1: STE100 summary, paste verbatim -->
<section class="summary">
<h2>Rung 1 — Plain summary</h2>
<p>Write 3–8 short sentences here. Active voice. One idea per sentence.
No metaphors. This is the controlled-English core of the explainer.</p>
</section>
<!-- Rung 2: diagram with least-certain flag -->
<section class="diagram">
<h2 style="font-size:15px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em">Rung 2 — Diagram</h2>
<svg viewBox="0 0 680 220" role="img" aria-label="topic diagram">
<rect x="20" y="80" width="150" height="56" rx="10" fill="none"
stroke="var(--accent)" stroke-width="2"/>
<text x="95" y="113" text-anchor="middle" fill="var(--text)">Step A</text>
<line x1="170" y1="108" x2="250" y2="108" stroke="var(--line)" stroke-width="2"/>
<rect x="250" y="80" width="150" height="56" rx="10" fill="none"
stroke="var(--accent)" stroke-width="2"/>
<text x="325" y="113" text-anchor="middle" fill="var(--text)">Step B</text>
<!-- least-certain node: dashed + muted -->
<line x1="400" y1="108" x2="480" y2="108" stroke="var(--line)" stroke-width="2"
stroke-dasharray="6 4"/>
<rect x="480" y="80" width="170" height="56" rx="10" fill="none"
stroke="var(--warn)" stroke-width="2" stroke-dasharray="6 4" opacity="0.85"/>
<text x="565" y="108" text-anchor="middle" fill="var(--warn)">Uncertain</text>
<text x="565" y="156" text-anchor="middle" fill="var(--warn)" font-size="12">⚠ least certain</text>
</svg>
</section>
<!-- Rung 3: interactive tabs -->
<div class="tabs" role="tablist">
<button class="tab" role="tab" aria-selected="true" data-target="p1">Part 1</button>
<button class="tab" role="tab" aria-selected="false" data-target="p2">Part 2</button>
<button class="tab" role="tab" aria-selected="false" data-target="p3">Part 3</button>
</div>
<div class="panel active" id="p1"><p>Expand Part 1 here. Keep it short and factual.</p></div>
<div class="panel" id="p2"><p>Expand Part 2 here.</p></div>
<div class="panel" id="p3"><p>Expand Part 3 here.</p></div>
<!-- Accordion for detail drilling -->
<details>
<summary>Deep dive: how it works</summary>
<p>Put the mechanism breakdown here. One paragraph per <code>details</code>.</p>
</details>
<!-- Least-certain callout (must surface the flagged node) -->
<div class="warn">
<b>⚠ Least certain:</b> State the one assumption or missing measurement here. Link it to
the dashed node in the diagram above.
</div>
</main>
<footer>
Sources / verify: <a href="https://www.asd-ste100.org/assets/files/ASD-STE100_ISSUE9.pdf">ASD-STE100 Issue 9 (PDF)</a>
</footer>
<script>
document.querySelectorAll('.tab').forEach(function(t){
t.addEventListener('click', function(){
document.querySelectorAll('.tab').forEach(function(x){x.setAttribute('aria-selected','false')});
document.querySelectorAll('.panel').forEach(function(p){p.classList.remove('active')});
t.setAttribute('aria-selected','true');
document.getElementById(t.dataset.target).classList.add('active');
});
});
</script>
</body>
</html>