:root{--bg:#fbfbfd;--surface:#ffffff;--surface2:#f3f4f7;--text:#1a1d24;--muted:#6b7280;--accent:#3b5bff;--good:#128a5b;--warn:#b45309;--bad:#d33a3a;--border:#e7e9ef;--shadow:0 1px 2px rgba(15,23,42,.06),0 1px 3px rgba(15,23,42,.04);--shadow-lg:0 8px 28px rgba(15,23,42,.10)}
*{box-sizing:border-box}
body{margin:0;font:15px/1.6 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",sans-serif;background:var(--bg);color:var(--text);min-height:100vh;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:1100px;margin:0 auto;padding:32px 24px 80px}
header{border-bottom:1px solid var(--border);padding-bottom:18px;margin-bottom:32px;display:flex;justify-content:space-between;align-items:baseline;gap:24px;flex-wrap:wrap}
header h1{margin:0;font-size:24px;letter-spacing:-.5px}
header .sub{color:var(--muted);font-size:13px}
.nav-back{font-size:13px;color:var(--muted)}
h1,h2,h3{letter-spacing:-.3px}
h2{margin-top:36px;font-size:20px;border-bottom:1px solid var(--border);padding-bottom:8px}
h3{margin-top:24px;font-size:16px;color:var(--accent)}
code,pre{font-family:"SF Mono",Menlo,Consolas,monospace;font-size:13px}
code{background:var(--surface2);padding:2px 6px;border-radius:5px;color:#3a3f4b}
pre{background:var(--surface2);padding:14px;border-radius:6px;overflow-x:auto;border:1px solid var(--border)}
pre code{background:none;padding:0}
table{border-collapse:separate;border-spacing:0;width:auto;max-width:100%;margin:16px 0 22px;font-size:14px;background:var(--surface);border:1px solid var(--border);border-radius:8px;overflow:hidden}
th,td{padding:8px 13px;text-align:left;border-bottom:1px solid var(--border);vertical-align:top}
tr:last-child td{border-bottom:none}
td{font-variant-numeric:tabular-nums}
th{background:var(--surface2);font-weight:600;color:var(--muted);font-size:11.5px;text-transform:uppercase;letter-spacing:.5px}
tr:hover td{background:#f9fafc}
blockquote{margin:14px 0;padding:10px 16px;border-left:3px solid var(--accent);background:var(--surface2);color:#454b57;border-radius:0 6px 6px 0}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px;margin-top:20px}
.card{background:var(--surface);border:1px solid #e2e5ec;border-radius:10px;padding:16px 18px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 8px 24px rgba(16,24,40,.045);transition:box-shadow .14s,transform .14s,border-color .14s}
.card:hover{box-shadow:0 2px 4px rgba(16,24,40,.05),0 14px 34px rgba(16,24,40,.075);transform:translateY(-2px);border-color:#cfd5e2}
.card a{color:inherit;display:block}
.card .ticker{font-size:20px;font-weight:700;letter-spacing:-.3px}
.card .name{color:var(--muted);font-size:13px;margin-top:2px}
.card .tags{margin-top:10px;display:flex;flex-wrap:wrap;gap:5px;max-height:56px;overflow:hidden}
.tag{font-size:11px;background:var(--surface2);color:var(--muted);padding:2px 8px;border-radius:6px;border:1px solid var(--border)}
.meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:18px 0}
.meta-item{background:var(--surface);border:1px solid var(--border);padding:12px 14px;border-radius:8px;box-shadow:var(--shadow)}
.meta-item .k{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.5px}
.meta-item .v{margin-top:4px;font-weight:600}
.toc{background:var(--surface);border:1px solid var(--border);padding:14px 16px;border-radius:10px;margin:24px 0;box-shadow:var(--shadow)}
.toc strong{display:block;margin-bottom:8px;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.5px}
.toc ul{margin:0;padding-left:0;list-style:none}
.toc li a{display:block;padding:4px 0;color:var(--muted);font-size:12.5px;line-height:1.35}
.toc li a:hover{color:var(--accent);text-decoration:none}
.section{margin-top:48px;padding-top:24px;border-top:1px solid var(--border)}
.section-anchor{color:var(--muted);font-size:12px;font-weight:400;margin-left:8px}
footer{margin-top:64px;padding-top:24px;border-top:1px solid var(--border);color:var(--muted);font-size:12px;text-align:center}
/* one-line meta strip (replaces the tall meta-grid) */
.meta-strip{color:var(--text);font-size:13px;margin:16px 0 4px}
.meta-strip .mk{text-transform:uppercase;letter-spacing:.5px;font-size:10px;color:var(--muted);margin-right:3px}
/* sticky TOC sidebar so the buy point surfaces immediately */
.layout{display:flex;gap:36px;align-items:flex-start;margin-top:18px}
.layout .toc{position:sticky;top:20px;flex:0 0 210px;margin:0;max-height:calc(100vh - 40px);overflow:auto}
.layout .content{flex:1;min-width:0}
.content > .section:first-child{margin-top:0;border-top:none;padding-top:0}
/* editorial width discipline: prose reads at ~82ch; only tables + the decision
   card span the full rail (long full-width lines read as an undesigned dump) */
.content>.section>p,.content>.section>ul,.content>.section>ol,.content>.section>blockquote,.content>.section>h2,.content>.section>h3{max-width:82ch}
@media(max-width:860px){.wrap{padding:20px 16px 56px}.layout{display:block}.layout .toc{position:static;max-height:128px;overflow:auto;margin:0 0 16px;padding:10px 12px;background:var(--surface2);border:1px solid var(--border);border-radius:10px;scrollbar-width:none;-webkit-mask-image:linear-gradient(to bottom,#000 78%,transparent 100%);mask-image:linear-gradient(to bottom,#000 78%,transparent 100%)}.layout .toc::-webkit-scrollbar{display:none}.section{margin-top:30px;padding-top:18px}table{display:block;overflow-x:auto;max-width:100%}}
/* decision card — the buy point gets top billing */
.decision-card{background:linear-gradient(180deg,#f5f8ff,#ffffff);border:1px solid rgba(59,91,255,.22);border-left:6px solid var(--accent);border-radius:12px;padding:18px 20px;margin:16px 0 26px;box-shadow:0 14px 38px rgba(59,91,255,.10),0 8px 24px rgba(16,24,40,.06)}
.decision-card h2{margin:0 0 12px;border:none;padding:0 4px;font-size:18px;line-height:1.25;color:#172033;letter-spacing:-.01em;font-weight:700}
.decision-card ul{margin:0;padding:0;list-style:none}
/* scannable decision module: zebra rows + a strong fixed-width label rail */
.decision-card li{padding:11px 12px;line-height:1.65;font-size:14.5px;border-radius:8px}
.decision-card li:nth-child(even){background:rgba(15,23,42,.028)}
.decision-card li>strong:first-child{display:block;margin:0 0 3px;color:var(--accent);font-weight:700;font-size:12.5px;letter-spacing:.04em}
/* price strip — de-gray the current-price line at the top of 00 */
#00_summary>blockquote:first-of-type{color:var(--text);background:#eafaf2;border-left:3px solid var(--good);font-size:13.5px;font-weight:500}
/* buy-ladder semantic row tints (new emoji-marked tables) */
tr.row-floor td{background:rgba(211,58,58,.09)!important}
tr.row-buy td{background:rgba(18,138,91,.11)!important}
tr.row-now td{background:rgba(59,91,255,.09)!important}
tr.row-trim td{background:rgba(180,83,9,.10)!important}
tr.row-nochase td{background:rgba(15,23,42,.04)!important;color:var(--muted)}
/* non-color signal too (color-blind safe): a semantic left border on the first cell */
tr.row-floor td:first-child{border-left:3px solid var(--bad)}
tr.row-buy td:first-child{border-left:3px solid var(--good)}
tr.row-now td:first-child{border-left:3px solid var(--accent)}
tr.row-trim td:first-child{border-left:3px solid var(--warn)}
tr.row-nochase td:first-child{border-left:3px solid var(--muted)}
tr.row-buy td:first-child,tr.row-floor td:first-child{font-weight:700}
/* archived (hidden) policy note (from stock.config.toml) */
.watch-note{margin:8px 0 0;padding:7px 12px;border-radius:8px;font-size:12px}
.watch-note.archived{background:var(--surface2);border-color:var(--border);color:var(--muted)}
/* ── dashboard tables: wide board scrolls with a pinned ticker column; phone collapses each row into a labelled card ── */
.dashboard table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
.dashboard table th:first-child,.dashboard table td:first-child{position:sticky;left:0;background:var(--surface);z-index:1}
.dashboard table th:first-child{background:var(--surface2)}
.dashboard table tr:hover td:first-child{background:#f9fafc}
/* desktop: fill the rail and give 详情 the slack — keep Ticker/R:R/主锚法 narrow */
@media(min-width:861px){
  .dashboard table{display:table;width:100%;table-layout:auto}
  .dashboard th:nth-child(1),.dashboard td:nth-child(1){width:54px}
  .dashboard th:nth-child(2),.dashboard td:nth-child(2){width:82px;white-space:normal}
  .dashboard th:nth-child(3),.dashboard td:nth-child(3){width:220px}
}
.export-btn{position:fixed;right:16px;bottom:16px;z-index:50;display:inline-flex;align-items:center;gap:6px;background:var(--accent);color:#fff;border:none;border-radius:24px;padding:11px 18px;font:600 14px/1 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",sans-serif;box-shadow:0 6px 20px rgba(59,91,255,.35);cursor:pointer}
.export-btn:hover{background:#2f49d8}
.export-btn:active{transform:translateY(1px)}
.export-btn:disabled{opacity:.6;cursor:default}
@media(max-width:640px){
  .dashboard table,.dashboard thead,.dashboard tbody,.dashboard td{display:block;width:100%}
  .dashboard table{border:none;background:none;overflow:visible;margin:14px 0}
  .dashboard thead{position:absolute;left:-9999px}
  .dashboard tr{display:flex;flex-direction:column;width:100%;margin:0 0 14px;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--surface);box-shadow:var(--shadow)}
  .dashboard td{display:flex;flex-direction:column;gap:3px;padding:8px 13px;text-align:left;position:static;border-bottom:1px solid var(--border);line-height:1.5}
  .dashboard td:last-child{border-bottom:none}
  .dashboard td::before{content:attr(data-label);font-weight:700;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.4px;line-height:1.3}
  .dashboard td br{content:"";display:block;margin:1px 0}
  /* card header = the Ticker cell, pulled to the top regardless of its column position */
  .dashboard td[data-label="Ticker"]{order:-1;background:var(--surface2);font-size:17px;font-weight:700}
  .dashboard td[data-label="Ticker"]::before{display:none}
  .dashboard td[data-label="Ticker"] a{font-size:17px}
}
/* during PNG capture: force the full desktop table regardless of viewport */
body.exporting{background:#fff}
body.exporting .export-btn{display:none}
body.exporting .nav-back{display:none}
body.exporting .dashboard table{display:table;width:auto;overflow:visible;border-collapse:separate;border:1px solid var(--border);background:var(--surface);border-radius:8px}
body.exporting .dashboard thead{display:table-header-group;position:static;left:auto}
body.exporting .dashboard tbody{display:table-row-group}
body.exporting .dashboard tr{display:table-row;margin:0;border:none;border-radius:0;box-shadow:none;background:none}
body.exporting .dashboard td{display:table-cell;text-align:left;position:static;padding:8px 13px;border-bottom:1px solid var(--border)}
body.exporting .dashboard th:first-child,body.exporting .dashboard td:first-child{position:static;font-size:14px}
body.exporting .dashboard td[data-label="Ticker"]{order:0;background:var(--surface);font-size:14px}
body.exporting .dashboard td::before{display:none;content:""}
/* ════ 2-row decision board (.board2): row1 = aligned decision columns, row2 = full-span detail strip. Scoped .dashboard .board2 to override the generic .dashboard table rules. ════ */
.dashboard .board2{display:table;width:100%;max-width:none;border-collapse:collapse;table-layout:fixed;background:var(--surface);border:1px solid var(--border);border-radius:8px;overflow:hidden;font-size:13.5px;margin:16px 0}
.dashboard .board2 thead{display:table-header-group;position:static;left:auto}
.dashboard .board2 thead th:nth-child(1){width:7%}
.dashboard .board2 thead th:nth-child(2){width:7%}
.dashboard .board2 thead th:nth-child(3){width:16%}
.dashboard .board2 thead th:nth-child(4){width:17%}
.dashboard .board2 thead th:nth-child(5){width:14%}
.dashboard .board2 thead th:nth-child(6){width:14%}
.dashboard .board2 thead th:nth-child(7){width:25%}
.dashboard .board2 tr.num td{overflow:hidden;text-overflow:ellipsis}
.dashboard .board2 tbody{display:table-row-group}
.dashboard .board2 tr{display:table-row}
.dashboard .board2 th,.dashboard .board2 td{position:static;width:auto}
.dashboard .board2 thead th{background:var(--surface2);color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;font-weight:600;text-align:left;padding:7px 11px;white-space:nowrap;border-bottom:1px solid var(--border)}
.dashboard .board2 tbody.stock{display:table-row-group}
.dashboard .board2 tbody.stock:hover{background:#f9fafc}
.dashboard .board2 tr.num td{padding:12px 11px 3px;vertical-align:baseline;font-variant-numeric:tabular-nums;white-space:nowrap;background:none;border-bottom:none}
.dashboard .board2 tr.num td.c-tkr{font-size:15px;font-weight:700}
.dashboard .board2 tr.num td.c-tkr a{color:var(--accent);text-decoration:none}
.dashboard .board2 tr.num td.c-buy{color:var(--good);font-weight:600}
.dashboard .board2 tr.num td.c-floor{color:var(--bad)}
.dashboard .board2 tr.num td.c-pos{font-weight:600;color:#172033}
.dashboard .board2 tr.num td{border-bottom:none}
.dashboard .board2 tr.det td{padding:9px 14px 12px;color:#515661;font-size:12px;line-height:1.5;border-bottom:2px solid #cdd3e0;background:#f5f6f9;white-space:normal}
.dashboard .board2 tbody.stock:last-of-type tr.det td{border-bottom:none}
.dashboard .board2 tr.det strong{color:var(--muted);font-weight:700;font-size:10px;text-transform:uppercase;letter-spacing:.3px;margin-right:1px}
@media(max-width:640px){
  .dashboard .board2{display:block;border:none;background:none;margin:14px 0}
  .dashboard .board2 thead{display:none}
  .dashboard .board2 tbody.stock{display:block;border:1px solid var(--border);border-radius:10px;margin:0 0 12px;background:var(--surface);box-shadow:var(--shadow);overflow:hidden}
  .dashboard .board2 tr.num{display:grid;grid-template-columns:1fr 1fr;gap:0}
  .dashboard .board2 tr.num td{display:flex;flex-direction:column;gap:1px;padding:7px 12px;border-bottom:1px solid var(--border);white-space:normal}
  .dashboard .board2 tr.num td::before{content:attr(data-label);font-size:9px;color:var(--muted);text-transform:uppercase;font-weight:700;letter-spacing:.3px}
  .dashboard .board2 tr.num td.c-tkr{grid-column:1 / -1;background:var(--surface2);font-size:17px;flex-direction:row;align-items:center;gap:8px}
  .dashboard .board2 tr.num td.c-tkr::before{display:none}
  .dashboard .board2 tr.det{display:block}
  .dashboard .board2 tr.det td{display:block;padding:9px 12px;line-height:1.5;border-bottom:none}
}
body.exporting .dashboard .board2{display:table;background:var(--surface)}
body.exporting .dashboard .board2 thead{display:table-header-group}
body.exporting .dashboard .board2 tbody.stock{display:table-row-group}
body.exporting .dashboard .board2 tr.num{display:table-row}
body.exporting .dashboard .board2 tr.num td{display:table-cell}
body.exporting .dashboard .board2 tr.num td::before{display:none;content:""}
body.exporting .dashboard .board2 tr.det td{display:table-cell}