/* Radar Studio · 浅色精密工作台。令牌来自 design/round-01/03；结构是完整的 app shell。 */
:root{
  --canvas:#f6f5f1; --paper:#ffffff; --paper-2:#fbfaf7; --ink:#16181d; --ink-2:#5b606b; --ink-3:#676c77; --ink-4:#8f949e;
  --line:#e8e6df; --line-2:#d9d6cd; --accent:#0f6b4f; --accent-ink:#0b5a42; --accent-soft:#e6f1ec; --accent-soft-2:#cfe4da;
  --hot:#c2410c; --hot-soft:#fdeee6; --warn:#b45309; --warn-soft:#fdf3e0; --bad:#b42318; --bad-soft:#fdeceb; --ok:#15803d;
  --sans:"PingFang SC","Hiragino Sans GB",-apple-system,"Helvetica Neue",sans-serif; --num:"New York",Georgia,"Songti SC",serif; --mono:ui-monospace,"SF Mono",Menlo,monospace;
  --sh-1:0 1px 2px rgba(22,24,29,.05); --sh-2:0 1px 2px rgba(22,24,29,.06),0 12px 32px -16px rgba(22,24,29,.22); --sh-3:0 30px 90px -20px rgba(22,24,29,.35);
  --r:12px; --r-sm:8px; --sidebar:232px; --topbar:64px;
  --ease-in:cubic-bezier(.22,1,.36,1); --ease-slide:cubic-bezier(.25,1,.5,1); --click:linear(0,.3 8%,.76 18%,1.04 30%,1.01 45%,.998 60%,1);
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--canvas);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
button:disabled{cursor:not-allowed;opacity:.45}
svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
h1,h2,h3,h4,p{margin:0}
.spacer{flex:1}
.muted{color:var(--ink-3);font-size:12.5px}
.hint{color:var(--ink-3);font-size:12.5px;line-height:1.6;margin:0 0 10px}
.hint code{background:var(--canvas);padding:0 5px;border-radius:4px;font-family:var(--mono);font-size:11.5px}

/* ---------- 外壳 ---------- */
.shell{min-height:100vh}
.sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar);background:var(--paper);border-right:1px solid var(--line);padding:22px 16px 0;display:flex;flex-direction:column;z-index:20;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
.brand{display:flex;align-items:center;gap:11px;color:var(--ink);padding:4px 6px}
.brand-mark{width:38px;height:38px;border-radius:11px;background:var(--accent);color:#fff;display:grid;place-items:center;box-shadow:0 4px 10px -4px rgba(15,107,79,.6)}
.brand-mark svg{width:20px;height:20px}
.brand-text{font-weight:700;font-size:16px;letter-spacing:-.01em;line-height:1.1}
.brand-text small{display:block;font-weight:400;font-size:10.5px;letter-spacing:.14em;color:var(--ink-3);margin-top:4px}
.ws-label{margin:22px 6px 8px;font-size:11px;color:var(--ink-3);display:flex;align-items:center;gap:8px}
.pill-mini{font-size:10px;border:1px solid var(--line-2);border-radius:5px;padding:1px 6px;color:var(--ink-2);letter-spacing:.06em}
.main-nav{display:flex;flex-direction:column;gap:3px;position:relative}
.main-nav button{height:42px;padding:0 12px;display:flex;align-items:center;gap:11px;border-radius:9px;font-size:13.5px;color:var(--ink-2);position:relative;z-index:1;text-align:left;transition:color .15s}
.main-nav button.on{color:var(--accent-ink);font-weight:600}
.main-nav button svg{width:18px;height:18px}
.main-nav .nav-count{margin-left:auto;font-style:normal;font-size:11px;color:var(--ink-3);background:var(--canvas);border-radius:99px;padding:1px 7px;min-width:22px;text-align:center;font-variant-numeric:tabular-nums}
.main-nav button.on .nav-count{background:var(--accent-soft-2);color:var(--accent-ink)}
.main-nav .nav-dot{margin-left:auto;width:6px;height:6px;border-radius:50%;background:var(--accent);opacity:0;transition:opacity .2s}
.main-nav button.has-source .nav-dot{opacity:1}
.nav-pill{position:absolute;left:0;top:0;width:100%;height:42px;background:var(--accent-soft);border-radius:9px;transition:transform .26s var(--ease-slide);z-index:0}
.nav-section{margin:22px 12px 8px;font-size:11px;letter-spacing:.08em;color:var(--ink-3)}
.topic-nav{display:flex;flex-direction:column;gap:1px}
.topic-nav button{height:32px;padding:0 12px;display:flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-2);border-radius:7px;transition:background .15s,color .15s}
.topic-nav button i{width:7px;height:7px;border-radius:50%;background:var(--c)}
.topic-nav button.on{background:var(--canvas);color:var(--ink);font-weight:600}
@media (hover:hover){.topic-nav button:hover,.main-nav button:not(.on):hover{color:var(--ink)}}
.side-note{margin:22px 4px 0;padding:14px;background:var(--paper-2);border:1px solid var(--line);border-radius:10px;position:relative}
.side-note svg{width:18px;height:18px;color:var(--accent);margin-bottom:8px}
.side-note strong{display:block;font-size:12.5px;font-weight:600}
.side-note p{font-size:12px;color:var(--ink-3);margin:4px 0 8px;line-height:1.55}
.side-note .link{font-size:12px;color:var(--accent);font-weight:600}
.sidebar-bottom{margin-top:auto;display:flex;align-items:center;gap:8px;padding:12px 0 14px;border-top:1px solid var(--line);position:sticky;bottom:0;background:var(--paper)}
.icon-btn{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;color:var(--ink-2);border:1px solid transparent;transition:background .15s,border-color .15s,transform .12s var(--click)}
@media (hover:hover){.icon-btn:hover{background:var(--canvas);border-color:var(--line)}}
.icon-btn:active{transform:scale(.94)}
.account{display:flex;align-items:center;gap:9px;min-width:0;flex:1;font-size:12.5px}
.account .av{width:32px;height:32px;border-radius:9px;background:var(--accent-soft);color:var(--accent-ink);display:grid;place-items:center;font-weight:700;flex-shrink:0}
.account .who{min-width:0;line-height:1.25}
.account .who b{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.account .who small{color:var(--ink-3);font-size:11px}
.account .link{font-size:12px;color:var(--ink-3);margin-left:auto}
.account .btn{height:32px;padding:0 12px;font-size:12.5px}

.workspace{margin-left:var(--sidebar);min-width:0;display:flex;flex-direction:column;min-height:100vh}
.topbar{height:var(--topbar);display:flex;align-items:center;justify-content:space-between;padding:0 34px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.85);backdrop-filter:blur(8px);position:sticky;top:0;z-index:10}
.crumbs{font-size:13px;color:var(--ink-3);display:flex;gap:8px}
.crumbs strong{color:var(--ink);font-weight:600}
.topbar-actions{display:flex;align-items:center;gap:14px;font-size:12.5px;color:var(--ink-3)}
.sep{width:1px;height:18px;background:var(--line)}
.status{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-2);padding:6px 10px;border-radius:8px;border:1px solid transparent;transition:background .15s,border-color .15s}
@media (hover:hover){.status:hover{background:var(--canvas);border-color:var(--line)}}
.dot{width:7px;height:7px;border-radius:50%;background:var(--ok);display:inline-block}
.dot.pending{background:var(--ink-4)}.dot.bad{background:var(--bad)}.dot.warn{background:var(--warn)}
.main{padding:34px 36px 0;max-width:1560px;width:100%;margin:0 auto;flex:1}
.page-footer{display:flex;gap:18px;align-items:center;padding:26px 36px;margin-top:40px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3)}
.page-footer a{color:var(--ink-3)}
.page-footer span:first-child{font-weight:600;color:var(--ink-2)}

/* ---------- 页头与统计 ---------- */
.tab{display:none}.tab.on{display:block;animation:tab-in .35s var(--ease-in)}
@keyframes tab-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:26px}
.eyebrow{display:flex;align-items:center;gap:7px;font-size:11px;letter-spacing:.12em;color:var(--ink-3);margin-bottom:10px;font-weight:600}
.eyebrow i{width:5px;height:5px;border-radius:50%;background:var(--accent)}
.page-heading h1{font-size:28px;font-weight:700;letter-spacing:-.02em;line-height:1.25}
.page-heading h1 em{font-style:normal;color:var(--ink-3);font-weight:500}
.page-heading p{color:var(--ink-3);font-size:13.5px;margin-top:8px;max-width:640px}
.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:30px}
.stat{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px 14px;min-width:0;box-shadow:var(--sh-1);opacity:0;transform:translateY(8px);animation:rise .5s var(--ease-in) forwards}
.stat:nth-child(2){animation-delay:.05s}.stat:nth-child(3){animation-delay:.1s}.stat:nth-child(4){animation-delay:.15s}.stat:nth-child(5){animation-delay:.2s}.stat:nth-child(6){animation-delay:.25s}
@keyframes rise{to{opacity:1;transform:none}}
.stat .cap{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--ink-3)}
.stat .cap svg{width:16px;height:16px}
.stat .ico{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:var(--canvas);color:var(--ink-2)}
.stat .ico.accent{background:var(--accent-soft);color:var(--accent-ink)}.stat .ico.hot{background:var(--hot-soft);color:var(--hot)}.stat .ico.warn{background:var(--warn-soft);color:var(--warn)}
.stat .val{font-family:var(--num);font-size:32px;font-weight:500;letter-spacing:-.02em;line-height:1.2;margin-top:8px;font-variant-numeric:tabular-nums}
.stat .val small{font-family:var(--sans);font-size:11px;color:var(--ink-3);margin-left:6px;font-weight:400}
.stat .foot{font-size:11.5px;color:var(--ink-3);margin-top:4px}
.stat .foot.hot{color:var(--hot)}
.stat .foot.link{color:var(--accent);font-weight:600;cursor:pointer}

/* ---------- 内容栅格与区块 ---------- */
.content-grid{display:grid;grid-template-columns:minmax(0,1fr) 352px;gap:24px;align-items:start}
.content-grid>*{min-width:0} /* 网格子项默认按内容最小宽度撑开，手机上会把整页撑宽 */
.content-grid.even,.studio-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
@media (max-width:1180px){.content-grid,.content-grid.even,.studio-grid{grid-template-columns:1fr}}
.section-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 16px}
.section-heading h2{display:flex;align-items:center;gap:8px;font-size:15.5px;font-weight:650;letter-spacing:-.01em}
.section-heading h2 svg{color:var(--hot)}
.count{font-size:11px;font-weight:600;color:var(--ink-2);background:var(--canvas);border:1px solid var(--line);border-radius:99px;padding:1px 8px;font-variant-numeric:tabular-nums}
.text-btn{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-2);padding:6px 9px;border-radius:7px;transition:background .15s,color .15s}
.text-btn svg{width:14px;height:14px}
@media (hover:hover){.text-btn:hover{background:var(--canvas);color:var(--ink)}}
.banner{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:11px 14px;background:var(--accent-soft);border:1px solid var(--accent-soft-2);border-radius:10px;margin-bottom:14px;font-size:12.5px;color:var(--accent-ink)}
.banner .src{display:inline-flex;align-items:center;gap:6px}
.banner .src i{width:7px;height:7px;border-radius:50%;background:var(--accent-ink)}
.banner .src.bad i{background:var(--bad)}.banner .src.retained i{background:var(--warn)}
.banner .src.off{color:var(--ink-3)}.banner .src.off i{background:var(--ink-4)}
.banner .when{margin-left:auto;color:var(--ink-3)}
.region-tabs{display:inline-flex;gap:6px;position:relative;margin-bottom:14px}
.region-tabs button{display:inline-flex;align-items:center;gap:7px;padding:7px 13px;border-radius:8px;border:1px solid var(--line);font-size:12.5px;color:var(--ink-2);background:var(--paper);position:relative;z-index:1;transition:color .2s,border-color .2s}
.region-tabs button svg{width:14px;height:14px}
.region-tabs button b{font-weight:600;color:var(--ink-3);font-size:11px}
.region-tabs button.on{color:var(--accent-ink);border-color:var(--accent-soft-2)}
.region-tabs button.on b{color:var(--accent-ink)}
.region-tabs .pill{position:absolute;top:0;left:0;height:100%;background:var(--accent-soft);border-radius:8px;transition:transform .24s var(--ease-slide),width .24s var(--ease-slide);z-index:0}
.cat-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:14px;position:relative;overflow:auto;scrollbar-width:none}
.cat-tabs button{padding:0 12px 10px;height:32px;font-size:13px;color:var(--ink-3);white-space:nowrap;transition:color .15s}
.cat-tabs button.on{color:var(--ink);font-weight:600}
.cat-tabs .underline{position:absolute;bottom:-1px;left:0;height:2px;background:var(--accent);transition:transform .24s var(--ease-slide),width .24s var(--ease-slide)}
.filter-bar,.results-bar{display:flex;gap:9px;align-items:center;margin-bottom:12px}
.results-bar{justify-content:space-between;margin-bottom:14px}
.search,.select{display:flex;align-items:center;gap:8px;height:38px;padding:0 12px;border:1px solid var(--line);border-radius:9px;background:var(--paper);color:var(--ink-3);font-size:13px;transition:border-color .15s,box-shadow .15s}
.search{flex:1}
.search:focus-within,.select:focus-within{border-color:var(--accent-soft-2);box-shadow:0 0 0 3px var(--accent-soft)}
.search svg,.select svg{width:15px;height:15px}
.search input,.select select,.select input{border:0;outline:none;background:transparent;font:inherit;color:var(--ink);flex:1;min-width:0}
.select.plain{border-color:transparent;background:transparent;padding-left:6px;height:30px}
.select.plain select{color:var(--ink-2)}

/* ---------- 帖子卡片 ---------- */
.feed{display:flex;flex-direction:column;gap:12px}
.post{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px 0;box-shadow:var(--sh-1);transition:border-color .16s,box-shadow .16s,transform .16s var(--ease-in);opacity:0;transform:translateY(8px);animation:rise .45s var(--ease-in) forwards}
.post:nth-child(2){animation-delay:.04s}.post:nth-child(3){animation-delay:.08s}.post:nth-child(4){animation-delay:.12s}.post:nth-child(5){animation-delay:.16s}.post:nth-child(n+6){animation-delay:.2s}
.feed.settled .post{animation:none;opacity:1;transform:none}
@media (hover:hover){.post:hover{border-color:var(--line-2);box-shadow:var(--sh-2);transform:translateY(-1px)}}
.post.selected{border-color:var(--accent-soft-2);box-shadow:0 0 0 3px var(--accent-soft)}
.post .top{display:flex;align-items:center;gap:10px}
.av{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;font-weight:700;font-size:14px;flex-shrink:0;background:var(--canvas);color:var(--ink-2)}
.av.c1{background:#e6f1ec;color:#2f7d6d}.av.c2{background:#e8eef9;color:#3b6fb6}.av.c3{background:#e9f4e6;color:#4f9a4a}.av.c4{background:#fbe9ef;color:#c7557a}.av.c5{background:#fbf2df;color:#9a6e15}.av.c6{background:#eee9fb;color:#7c5fc4}
.post .who{display:flex;flex-direction:column;min-width:0;line-height:1.3}
.post .who b{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.post .who span{font-size:11.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.post .top .right{margin-left:auto;display:flex;align-items:center;gap:6px}
.chip{font-size:11px;padding:2px 8px;border-radius:99px;border:1px solid var(--line);color:var(--ink-2);background:var(--paper-2)}
.chip.cat{border-color:transparent}
.chip.hot{background:var(--hot-soft);color:var(--hot);border-color:transparent;font-weight:600}
.chip.retained{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.fav{color:var(--ink-3);width:30px;height:30px;border-radius:8px;display:grid;place-items:center;transition:color .15s,background .15s,transform .14s var(--click)}
.fav svg{width:16px;height:16px}
.fav.on{color:var(--hot)}.fav.on svg{fill:var(--hot)}
.fav:active{transform:scale(.88)}
@media (hover:hover){.fav:hover{background:var(--canvas);color:var(--ink)}}
.post .body{padding:12px 0 0}
.post .body h3{font-size:15px;font-weight:600;line-height:1.65;letter-spacing:-.005em}
.post .body p{font-size:15px;line-height:1.75;color:var(--ink-2);margin-top:4px;white-space:pre-wrap;word-break:break-word}
.post .bottom{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:14px 0 0;padding:12px 0 14px;border-top:1px solid var(--canvas)}
.metrics{display:flex;align-items:center;gap:14px;color:var(--ink-3);font-size:12px;font-variant-numeric:tabular-nums;flex-wrap:wrap}
.metrics .views{color:var(--hot);font-weight:600;font-family:var(--num);font-size:15px}
.metrics .spark{width:64px;height:16px}
.metrics .spark polyline{fill:none;stroke:var(--accent);stroke-width:1.4}
.metrics .src{color:var(--ink-3)}
.post .acts{display:flex;gap:6px;align-items:center}

/* ---------- 按钮 ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:36px;padding:0 14px;border-radius:9px;font-size:13px;font-weight:600;border:1px solid transparent;white-space:nowrap;transition:transform .14s var(--click),background .15s,border-color .15s,box-shadow .15s}
.btn svg{width:15px;height:15px}
.btn:active:not(:disabled){transform:scale(.97)}
.btn.primary{background:var(--accent);color:#fff;box-shadow:0 2px 6px -2px rgba(15,107,79,.5)}
@media (hover:hover){.btn.primary:hover:not(:disabled){background:var(--accent-ink)}}
.btn.light{background:var(--paper);border-color:var(--line);color:var(--ink);box-shadow:var(--sh-1)}
@media (hover:hover){.btn.light:hover:not(:disabled){border-color:var(--line-2);background:var(--paper-2)}}
.btn.danger{background:var(--bad-soft);color:var(--bad)}
.btn.sm{height:30px;padding:0 10px;font-size:12px;border-radius:7px}
.btn.wide{width:100%}
.row{display:flex;gap:8px;align-items:center;margin-top:12px}
.row.wrap{flex-wrap:wrap}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}

/* ---------- 卡片与表单 ---------- */
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:18px;box-shadow:var(--sh-1);margin-bottom:16px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.card-head h3{display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:650}
.card-head h3 svg{width:16px;height:16px;color:var(--accent)}
.badge{font-size:9.5px;letter-spacing:.14em;color:var(--ink-3);border:1px solid var(--line);border-radius:5px;padding:2px 6px}
.field{display:block;margin:10px 0 0}
.field>span{display:block;font-size:12px;color:var(--ink-3);margin-bottom:5px}
.field input,.field textarea,.field select,.title-input,#ed-sendat,#buffer-key{width:100%;font:inherit;font-size:13.5px;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:9px;padding:9px 11px;outline:none;transition:border-color .15s,box-shadow .15s}
.field textarea{resize:vertical;line-height:1.6}
.field input:focus,.field textarea:focus,.field select:focus,.title-input:focus,#buffer-key:focus{border-color:var(--accent-soft-2);box-shadow:0 0 0 3px var(--accent-soft)}
.field .big{font-family:var(--num);font-size:26px;display:block;line-height:1.3}
#ed-sendat{width:auto}
#buffer-key{width:240px}
.check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-2);margin:10px 0 0}
.mini-list{display:flex;flex-direction:column;gap:6px;font-size:13px}
.mini-list .item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:9px;border:1px solid var(--line);background:var(--paper-2)}
.mini-list .item .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mini-list .item button{font-size:12px;color:var(--ink-2);padding:3px 8px;border-radius:6px;border:1px solid var(--line);background:var(--paper)}
.quick-source{min-height:56px}
.quick-source .q{padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--paper-2);font-size:13px;line-height:1.6}
.quick-source .q b{display:block;font-size:12px;color:var(--ink-3);margin-bottom:4px}
.quick-source .q .btn{margin-top:10px}

/* ---------- 工作室 ---------- */
.rail{display:grid;grid-template-columns:repeat(4,1fr);position:relative;margin:0 0 22px;max-width:720px}
.rail::before{content:"";position:absolute;left:12.5%;right:12.5%;top:9px;height:2px;background:var(--line)}
.rail .bar{position:absolute;left:12.5%;top:9px;height:2px;background:var(--accent);width:0;transition:width .5s var(--ease-slide)}
.rail div{text-align:center;font-size:12px;color:var(--ink-3);position:relative}
.rail div::before{content:"";display:block;width:10px;height:10px;border-radius:50%;background:var(--paper);border:2px solid var(--line-2);margin:4px auto 8px;transition:background .3s,border-color .3s,transform .3s var(--click)}
.rail div.done{color:var(--ink)}.rail div.done::before{background:var(--accent);border-color:var(--accent);transform:scale(1.15)}
.source-box{padding:12px 14px;border:1px dashed var(--line-2);border-radius:10px;background:var(--paper-2);font-size:14.5px;line-height:1.65;white-space:pre-wrap;min-height:72px}
.source-box.has{border-style:solid;border-color:var(--line);color:var(--ink)}
.source-box.hit{animation:hit .6s var(--ease-in)}
@keyframes hit{0%{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}100%{box-shadow:none}}
.cands{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.cand{display:block;width:100%;text-align:left;font:inherit;padding:12px 14px;border-radius:10px;border:1px solid var(--line);background:var(--paper);cursor:pointer;opacity:0;transform:translateY(12px);transition:border-color .15s,box-shadow .18s,transform .18s var(--ease-in)}
.cand.in{animation:deal .45s var(--ease-in) forwards}
@keyframes deal{to{opacity:1;transform:none}}
@media (hover:hover){.cand:hover{box-shadow:var(--sh-2);transform:translateY(-1px)}}
.cand.on{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.cand .h{display:flex;align-items:center;gap:8px;font-weight:600;font-size:13.5px}
.cand .h .chip{margin-left:auto}
.cand .angle{font-size:12.5px;color:var(--ink-3);margin-top:4px;line-height:1.55}
.counter{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.counter b{font-family:var(--num);font-size:15px;color:var(--ink);font-weight:500}
.counter.over b{color:var(--bad)}
.ring{width:26px;height:26px;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:3.5}.ring .t{stroke:var(--line)}.ring .a{stroke:var(--accent);stroke-dasharray:94;stroke-dashoffset:94;transition:stroke-dashoffset .5s var(--ease-in),stroke .3s}
.counter.over .ring .a{stroke:var(--bad)}
.title-input{margin-bottom:8px;font-weight:600}
.editor-box{border:1px solid var(--line);border-radius:10px;background:#fefefd;transition:border-color .15s,box-shadow .15s}
.editor-box:focus-within{border-color:var(--accent-soft-2);box-shadow:0 0 0 3px var(--accent-soft)}
.editor-box textarea{display:block;width:100%;border:0;outline:none;background:transparent;font:inherit;font-size:14.5px;line-height:1.85;padding:13px 14px;resize:vertical;color:var(--ink)}
.problems{font-size:12.5px;color:var(--bad);margin-top:8px;min-height:18px}
.editor-foot{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px;padding-top:12px;border-top:1px solid var(--line)}
.preview-wrap{margin-top:14px}
.preview-head{font-size:11px;letter-spacing:.1em;color:var(--ink-3);margin-bottom:6px}
.preview{padding:14px 16px;border-radius:10px;background:var(--canvas);white-space:pre-wrap;line-height:1.75;font-size:15px;min-height:56px;color:var(--ink-2)}

/* ---------- 任务 ---------- */
.status-box{font-size:13px;color:var(--ink-2);margin-top:12px;line-height:1.65;white-space:pre-wrap}
.status-box .item{margin-top:6px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;margin:12px 0;font-size:13px}
.kv dt{color:var(--ink-3)}.kv dd{margin:0;font-weight:600;font-variant-numeric:tabular-nums}
.switch{display:inline-flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;user-select:none}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch i{width:38px;height:22px;border-radius:99px;background:var(--line-2);position:relative;transition:background .2s}
.switch i::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);transition:transform .22s var(--click)}
.switch input:checked+i{background:var(--accent)}.switch input:checked+i::after{transform:translateX(16px)}
.runs{display:flex;flex-direction:column;gap:10px;font-size:13px}
.run{padding:12px 14px;border-radius:10px;border:1px solid var(--line);background:var(--paper-2)}
.run .head{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:12.5px}
.run .cands3{display:grid;gap:6px;margin-top:8px}
.run .c{padding:8px 10px;border-radius:8px;background:var(--paper);border:1px solid var(--line);font-size:13.5px;line-height:1.65;white-space:pre-wrap}
.run .c.pick{border-color:var(--accent-soft-2);box-shadow:inset 3px 0 0 var(--accent)}
.help-steps{display:flex;flex-direction:column;gap:18px}
.help-steps>div{display:flex;gap:14px;align-items:flex-start}
.help-steps b{width:28px;height:28px;border-radius:8px;background:var(--accent-soft);color:var(--accent-ink);display:grid;place-items:center;font-family:var(--num);flex-shrink:0}
.help-steps strong{display:block;font-size:14px;margin-bottom:2px}
.help-steps p{font-size:13px;color:var(--ink-3);line-height:1.6}

/* ---------- 首页右栏工作室、展开原文、底部导航 ---------- */
.personas-peek{margin-top:12px;font-size:12.5px;color:var(--ink-3)}
.personas-peek summary{cursor:pointer;color:var(--accent);font-weight:600}
.personas-peek .pp{padding:8px 0;border-top:1px solid var(--line)}
.personas-peek .pp b{display:block;color:var(--ink);font-size:13px}
.personas-peek .pp span{display:block;line-height:1.55}
.post .body p.clamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.post .expand{margin-top:4px;padding:2px 0;font-size:12.5px;color:var(--accent);font-weight:600}
.mobile-nav{display:none}

/* ---------- 焦点 ---------- */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
.switch input:focus-visible+i{box-shadow:0 0 0 3px var(--accent-soft),0 0 0 4px var(--accent)}
select.inline{font:inherit;font-size:12.5px;border:1px solid var(--line);border-radius:7px;padding:3px 6px;background:var(--paper);color:var(--ink);max-width:100%}

/* ---------- 弹窗、提示 ---------- */
.modal{border:1px solid var(--line);border-radius:16px;padding:0;width:min(560px,calc(100% - 32px));background:var(--paper);color:var(--ink);box-shadow:var(--sh-3);max-height:87vh;overflow:auto}
.modal::backdrop{background:rgba(22,24,29,.35);backdrop-filter:blur(3px)}
.modal[open]{animation:modal-in .28s var(--ease-in)}
@keyframes modal-in{from{opacity:0;transform:scale(.96) translateY(6px)}to{opacity:1;transform:none}}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px 12px;border-bottom:1px solid var(--line)}
.modal-head h3{font-size:16px;font-weight:650}
.modal-body{padding:18px 22px 22px}
.modal-body h4{font-size:12px;letter-spacing:.08em;color:var(--ink-3);margin:16px 0 8px;font-weight:600}
.modal-body h4:first-child{margin-top:0}
.notice{margin:16px 36px 0;padding:10px 14px;border-radius:10px;font-size:13px;background:var(--warn-soft);color:var(--warn);border:1px solid #f3dfb8}
.notice.ok{background:var(--accent-soft);color:var(--accent-ink);border-color:var(--accent-soft-2)}
.notice.bad{background:var(--bad-soft);color:var(--bad);border-color:#f5c9c5}
.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,16px);opacity:0;background:var(--ink);color:#fff;padding:10px 16px;border-radius:10px;font-size:13px;box-shadow:var(--sh-3);transition:transform .26s var(--ease-in),opacity .26s;pointer-events:none;z-index:50}
.toast.on{transform:translate(-50%,0);opacity:1}
.empty{padding:44px 24px;text-align:center;color:var(--ink-3);border:1px dashed var(--line-2);border-radius:var(--r);background:var(--paper-2);font-size:13.5px}
.empty h3{font-size:15px;color:var(--ink);margin-bottom:6px}
.skeleton{height:118px;border-radius:var(--r);background:linear-gradient(90deg,var(--paper) 25%,var(--paper-2) 37%,var(--paper) 63%);background-size:400% 100%;animation:shimmer 1.3s linear infinite;border:1px solid var(--line)}
@keyframes shimmer{from{background-position:100% 0}to{background-position:0 0}}

@media (max-width:980px){
  .sidebar{width:70px;padding:16px 10px}.brand-text,.ws-label,.nav-section,.topic-nav,.side-note,.account .who,.main-nav button span,.main-nav .nav-count{display:none}
  .workspace{margin-left:70px}.main{padding:22px 18px 0}.stats{grid-template-columns:repeat(2,1fr)}.filter-bar,.results-bar{flex-wrap:wrap}.two{grid-template-columns:1fr}.sidebar-bottom .btn,.sidebar-bottom .link{display:none}.notice{margin:12px 18px 0}.main-nav button{justify-content:center;padding:0}
}
@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}
@media (prefers-reduced-motion:reduce){
  .stat,.post,.cand,.tab.on,.modal[open]{animation:none;opacity:1;transform:none}
  .skeleton{animation:none}
  .nav-pill,.region-tabs .pill,.cat-tabs .underline,.rail .bar,.rail div::before,.ring .a,.switch i::after,.toast,.fav,.btn,.icon-btn,.post,.cand{transition:none}
}

/* 顶栏账号入口：只在侧栏收起（≤980px）时出现，保证平板和手机也能登录 */
.account-top{display:none;margin-left:auto;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-2)}
.account-top .btn{height:32px;padding:0 12px;font-size:12.5px}
@media (max-width:980px){.account-top{display:flex}.topbar-actions{margin-left:14px}}

/* ---------- 矮屏幕：侧栏收紧，帮助卡让位给账号区 ---------- */
@media (max-height:820px) and (min-width:981px){
  .side-note{display:none}.ws-label{margin-top:14px}.nav-section{margin-top:14px}.topic-nav button{height:29px}.main-nav button{height:38px}.nav-pill{height:38px}
}

/* ---------- 手机（放在最后，覆盖上面的窄屏规则） ---------- */
@media (max-width:640px){
  .sidebar{display:none}.workspace{margin-left:0}.main{padding:18px 14px 90px}.notice{margin:12px 14px 0}.topbar{padding:0 14px;height:52px}.topbar-actions{display:none}.page-footer{display:none}
  .filter-bar .search{flex-basis:100%}.cat-tabs{margin-left:-14px;margin-right:-14px;padding:0 14px}.banner .when{margin-left:0;flex-basis:100%}
  .post .bottom{flex-wrap:wrap}.post .acts{margin-left:auto}.editor-foot #ed-sendat{flex:1}
  .mobile-nav{position:fixed;left:0;right:0;bottom:0;display:grid;grid-template-columns:repeat(5,1fr);background:rgba(255,255,255,.92);backdrop-filter:blur(10px);border-top:1px solid var(--line);z-index:30;padding:6px 4px calc(6px + env(safe-area-inset-bottom))}
  .mobile-nav button{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;color:var(--ink-3);padding:4px 0;border-radius:8px}
  .mobile-nav button.on{color:var(--accent-ink);background:var(--accent-soft)}
  .page-heading{flex-direction:column}.page-heading h1{font-size:22px}.stats{grid-template-columns:repeat(2,1fr)}
}
