/* 社区栏目共用的框 + 小零件（消息 / 通知 / 个人主页 / 分身主页 / 创建分身 五页共用）。
   数值照 消息-定稿 / 个人主页-定稿 / 分身主页-定稿 的「社区栏目同一套框 v2」和零件表抄：
   左 200 · 间距 32 · 内容 972（内容左边一条竖线，线后 20px），和社区页的左栏 / 中栏 x 位置一样，切换页面不跳。
   类名一律 v3-so- 前缀；颜色字号读 --v3-*。必须排在 community.css 后面加载（外层同时带 v3-cm-wrap，借用它的重置和图标）。
   旧 folio-theme.css 的坑：输入框 / textarea 有 !important 的白底灰边直角（这里要 !important 压回去）；
   button[class*="btn-"] 被整个样式化（这里的按钮类名不带 "btn-"）；.meta .label 有字距（不用这些名字）。 */

/* ---------- 框 ---------- */
.v3-page .v3-so-wrap{max-width:1440px;grid-template-columns:200px 1004px 0px;gap:0;justify-content:center;align-items:start;transition:grid-template-columns .32s ease}
.v3-page .v3-so-wrap.is-open{grid-template-columns:52px var(--so-a,420px) var(--so-b,760px)}
.v3-so-main{min-width:0;margin-left:32px;padding:8px 0 0 20px;border-left:1px solid var(--v3-line);transition:padding-left .32s ease,margin-left .32s ease}
.v3-so-wrap.is-open .v3-so-main{margin-left:0;padding-left:28px}
.v3-so-detail{position:sticky;top:calc(var(--folio-nav-h) + 16px);min-width:0;margin-left:var(--so-g,28px);padding-left:24px;border-left:1px solid var(--v3-line)}
.v3-so-detail[hidden]{display:none}
.v3-so-wrap .v3-cm-lnav{padding-top:8px}
@media (max-width:1340px){
  .v3-page .v3-so-wrap{transition:none}
  .v3-page .v3-so-wrap.is-open{grid-template-columns:52px minmax(0,var(--so-a,420px)) minmax(0,1fr)}
}
@media (max-width:1240px){
  .v3-page .v3-so-wrap{grid-template-columns:200px minmax(0,1fr) 0px}
  .v3-so-main{margin-left:24px}
  .v3-page .v3-so-wrap.is-open{grid-template-columns:52px minmax(0,var(--so-a,420px)) minmax(0,1fr)}
}
@media (max-width:980px){
  .v3-page .v3-so-wrap,.v3-page .v3-so-wrap.is-open{grid-template-columns:minmax(0,1fr)}
  .v3-so-main,.v3-so-wrap.is-open .v3-so-main{margin-left:0;padding-left:0;border-left:0}
  .v3-so-detail{position:static;margin-left:0;padding-left:0;border-left:0}
  .v3-so-wrap.is-open .v3-cm-lnav{display:block}
}
@media (max-width:620px){.v3-page .v3-so-wrap{padding-left:16px;padding-right:16px}}

/* ---------- 文字链接按钮、图标按钮 ---------- */
.v3-so-tl{display:inline-flex;align-items:center;gap:2px;border:0;background:none;padding:0;font:inherit;font-size:13px;color:var(--v3-action);white-space:nowrap}
.v3-so-tl:hover{color:var(--v3-action-hover)}
.v3-so-tl:disabled{color:var(--v3-smoke);cursor:default}
.v3-so-tl.is-danger:hover{color:var(--v3-danger)}
.v3-so-ibtn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:none;color:var(--v3-smoke)}
.v3-so-ibtn:hover{background:var(--v3-sheet-hover);color:var(--v3-ink)}
.v3-so-ibtn:disabled{opacity:.35;cursor:default}
.v3-so-xbtn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:36px;height:36px;padding:0;border:0;border-radius:var(--v3-radius-md);background:none;color:var(--v3-stone)}
.v3-so-xbtn:hover{background:var(--v3-sheet);color:var(--v3-ink)}

/* ---------- 按钮 ---------- */
.v3-so-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:40px;padding:0 18px;border:1px solid transparent;border-radius:var(--v3-radius-md);background:none;color:var(--v3-ink);font-size:14px;font-weight:500;white-space:nowrap;text-decoration:none;transition:background-color .15s,border-color .15s,color .15s}
.v3-so-button.is-sm{height:32px;padding:0 12px;font-size:13px;border-radius:6px}
.v3-so-button.is-lg{height:48px;padding:0 26px;font-size:15px}
.v3-so-button.is-primary{background:var(--v3-action);color:#fff}
.v3-so-button.is-primary:hover{background:var(--v3-action-hover);color:#fff}
.v3-so-button.is-primary:active{background:var(--v3-action-press)}
.v3-so-button.is-secondary{background:var(--v3-paper);border-color:var(--v3-line-strong)}
.v3-so-button.is-secondary:hover{background:var(--v3-sheet)}
.v3-so-button.is-soft{background:var(--v3-sheet)}
.v3-so-button.is-soft:hover{background:var(--v3-sheet-hover)}
.v3-so-button.is-ghost:hover{background:var(--v3-sheet)}
.v3-so-button.is-danger{background:var(--v3-paper);border-color:var(--v3-line-strong);color:var(--v3-danger)}
.v3-so-button:disabled,.v3-so-button[aria-disabled="true"]{background:var(--v3-sheet);border-color:transparent;color:var(--v3-smoke);cursor:not-allowed}
.v3-so-button .v3-ic{width:16px;height:16px}

/* ---------- 分段（seg）、栏目（ptabs）、翻页 ---------- */
.v3-so-seg{display:inline-flex;gap:2px;padding:3px;border-radius:var(--v3-radius-md);background:var(--v3-sheet)}
.v3-so-seg button{height:32px;padding:0 14px;border:0;border-radius:6px;background:none;color:var(--v3-stone);font-size:13px}
.v3-so-seg button small{margin-left:5px;font-size:12px;color:var(--v3-smoke);font-weight:400;font-variant-numeric:tabular-nums}
.v3-so-seg button[aria-pressed="true"]{background:var(--v3-paper);color:var(--v3-ink);font-weight:600;box-shadow:0 1px 2px rgba(31,42,55,.10)}
.v3-so-ptabs{display:flex;gap:4px;flex-wrap:wrap}
.v3-so-ptabs button{height:34px;padding:0 16px;border:0;border-radius:var(--v3-radius-md);background:none;color:var(--v3-stone);font-size:14px}
.v3-so-ptabs button:hover{background:var(--v3-sheet);color:var(--v3-ink)}
.v3-so-ptabs button[aria-selected="true"]{background:var(--v3-tint);color:var(--v3-action-hover);font-weight:600}
.v3-so-ptabs button small{margin-left:5px;font-size:12px;color:var(--v3-smoke);font-weight:400;font-variant-numeric:tabular-nums}
.v3-so-ptabs button[aria-selected="true"] small{color:inherit;opacity:.75}
.v3-so-pager{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:var(--v3-radius-pill);background:var(--v3-sheet)}
.v3-so-pager button{min-width:34px;height:34px;padding:0 6px;border:0;border-radius:var(--v3-radius-pill);background:none;color:var(--v3-stone);font-size:14px;font-variant-numeric:tabular-nums}
.v3-so-pager button:hover{color:var(--v3-ink)}
.v3-so-pager button[aria-current="page"]{background:var(--v3-paper);color:var(--v3-ink);font-weight:600;box-shadow:0 1px 3px rgba(31,42,55,.12)}
.v3-so-pager button:disabled{opacity:.35;cursor:default}
.v3-so-pager .v3-ic{width:16px;height:16px}
.v3-so-pagecap{font-size:12px;color:var(--v3-smoke)}

/* ---------- 开关 ---------- */
.v3-so-switch{position:relative;flex:none;width:40px;height:24px;padding:0;border:0;border-radius:var(--v3-radius-pill);background:var(--v3-line-strong);transition:background-color .15s}
.v3-so-switch::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(31,42,55,.2);transition:transform .15s}
.v3-so-switch[aria-checked="true"]{background:var(--v3-action)}
.v3-so-switch[aria-checked="true"]::after{transform:translateX(16px)}
.v3-so-switch:disabled{opacity:.45;cursor:not-allowed}

/* ---------- 输入框（压住旧样式的 !important） ---------- */
.v3-so-input,.v3-so-textarea,.v3-so-select{display:block;width:100%;min-width:0;height:40px;padding:0 12px!important;border:1px solid var(--v3-line-strong)!important;border-radius:var(--v3-radius-md)!important;background:var(--v3-paper)!important;box-shadow:none!important;outline:none!important;color:var(--v3-ink)!important;font:inherit;font-size:14px}
.v3-so-textarea{height:auto;min-height:96px;padding:10px 12px!important;line-height:1.6;resize:none;field-sizing:content;max-height:320px;overflow-y:auto}
.v3-so-input:hover,.v3-so-textarea:hover,.v3-so-select:hover{border-color:rgba(31,42,55,.26)!important}
.v3-so-input:focus,.v3-so-textarea:focus,.v3-so-select:focus{border-color:var(--v3-action)!important;box-shadow:var(--v3-focus)!important}
.v3-so-input.is-invalid,.v3-so-textarea.is-invalid{border-color:var(--v3-danger)!important}
.v3-so-input::placeholder,.v3-so-textarea::placeholder{color:var(--v3-smoke)}
.v3-so-input:disabled,.v3-so-textarea:disabled{background:var(--v3-sheet)!important;color:var(--v3-smoke)!important}
.v3-so-field{display:grid;gap:6px;min-width:0}
.v3-so-field>label,.v3-so-lbl{font-size:13px;color:var(--v3-stone)}
.v3-so-hint{font-size:12px;color:var(--v3-smoke)}
.v3-so-err{font-size:12px;color:var(--v3-danger)}

/* ---------- 下拉菜单 ---------- */
.v3-so-dd{position:relative;display:inline-block}
.v3-so-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:30;min-width:100%;padding:6px;border:1px solid var(--v3-line);border-radius:10px;background:var(--v3-paper);box-shadow:var(--v3-float)}
.v3-so-menu.is-right{left:auto;right:0}
.v3-so-menu button,.v3-so-menu a{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:8px 10px;border:0;border-radius:6px;background:none;color:var(--v3-ink);font-size:14px;text-align:left;white-space:nowrap}
.v3-so-menu button:hover,.v3-so-menu a:hover{background:var(--v3-sheet)}
.v3-so-menu .is-danger{color:var(--v3-danger)}
.v3-so-menu [aria-selected="true"]{color:var(--v3-action-hover);font-weight:600}
.v3-so-menu hr{margin:6px 4px;border:0;border-top:1px solid var(--v3-line)}

/* ---------- 提示条、空状态、骨架 ---------- */
.v3-so-toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));z-index:1300;display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:1px solid var(--v3-line);border-radius:10px;background:var(--v3-paper);color:var(--v3-ink);font-size:14px;box-shadow:var(--v3-float);transform:translateX(-50%) translateY(16px);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s}
.v3-so-toast.is-show{opacity:1;transform:translateX(-50%) translateY(0)}
.v3-so-toast .v3-ic{width:16px;height:16px;color:var(--v3-action)}
.v3-so-empty{padding:72px 0;text-align:center;color:var(--v3-smoke)}
.v3-so-empty b{display:block;color:var(--v3-stone);font-weight:500;font-size:15px}
.v3-so-empty p{margin:6px 0 0;font-size:13px}
.v3-so-note{padding:12px 14px;border-radius:var(--v3-radius-md);background:var(--v3-sheet);color:var(--v3-stone);font-size:13px}
.v3-so-note.is-error{background:rgba(214,58,54,.07);color:var(--v3-danger)}
.v3-so-sk{display:grid;gap:10px}
.v3-so-sk i{display:block;height:12px;border-radius:var(--v3-radius-xs);background:linear-gradient(90deg,var(--v3-sheet) 0,var(--v3-sheet-hover) 50%,var(--v3-sheet) 100%);background-size:200% 100%;animation:v3-so-shimmer 1.4s infinite}
@keyframes v3-so-shimmer{to{background-position:-200% 0}}
.v3-so-back{display:inline-flex;align-items:center;gap:4px;height:32px;padding:0 12px 0 8px;border:0;border-radius:var(--v3-radius-md);background:var(--v3-sheet);color:var(--v3-stone);font-size:13px}
.v3-so-back:hover{color:var(--v3-ink)}
.v3-so-back .v3-ic{width:16px;height:16px}

/* ---------- 没头像的人：默认头像 + 系统头像 ---------- */
.v3-so-av{display:block;flex:none;border-radius:6px;object-fit:cover;background:var(--v3-tint)}
.v3-so-av.is-dav{border:1px solid var(--v3-line);box-sizing:border-box;background:#fff}
.v3-so-avi{display:inline-grid;place-items:center;flex:none;border-radius:6px;background:var(--v3-sheet);color:var(--v3-stone);font-size:13px}
.v3-so-sysav{display:inline-grid;place-items:center;flex:none;border-radius:6px;background:var(--v3-tint);color:var(--v3-action)}
.v3-so-sysav svg{width:62%;height:62%}

/* ---------- 分身：六种光谱色（后台代号 beige / coral / sand / violet / moss / gray 不变，只换显示） ----------
   --pc 光环  --pt 默认头像底 / 浅底  --pi 默认头像字 / 深字  --sw 色块 */
.v3-so-pc-coral{--pc:var(--v3-persona-coral);--pt:var(--v3-persona-coral-tint);--pi:#C2477A;--sw:#F9BDD2}
.v3-so-pc-sand{--pc:var(--v3-persona-sand);--pt:var(--v3-persona-sand-tint);--pi:#B0632A;--sw:#FAD0AA}
.v3-so-pc-beige{--pc:var(--v3-persona-beige);--pt:var(--v3-persona-beige-tint);--pi:#8C750E;--sw:#F3DE86}
.v3-so-pc-moss{--pc:var(--v3-persona-moss);--pt:var(--v3-persona-moss-tint);--pi:#1A8670;--sw:#96E0CE}
.v3-so-pc-gray{--pc:var(--v3-persona-gray);--pt:var(--v3-persona-gray-tint);--pi:#137D93;--sw:#95DCEC}
.v3-so-pc-violet{--pc:var(--v3-persona-violet);--pt:var(--v3-persona-violet-tint);--pi:#6A4BC4;--sw:#CBBBF7}
/* 头像：外面一圈分身自己的颜色 */
.v3-so-pav{position:relative;display:inline-block;flex:none;padding:2px;border-radius:9px;background:var(--pc,var(--v3-brand-soft));line-height:0}
.v3-so-pav>img,.v3-so-pav>span{display:grid;place-items:center;width:var(--s,40px);height:var(--s,40px);border:2px solid var(--v3-paper);border-radius:7px;object-fit:cover;background:var(--pt,var(--v3-tint));color:var(--pi,var(--v3-action));font-size:calc(var(--s,40px)*.4);font-weight:600;line-height:1}
.v3-so-pav.is-off{background:var(--v3-line-strong)}
.v3-so-pav.is-off>img{filter:grayscale(1);opacity:.6}
/* 大头像：背后一圈小范围的分身色渐变光，慢慢流转 */
.v3-so-halo{position:relative;display:inline-flex;flex:none;isolation:isolate}
.v3-so-halo::before{content:"";position:absolute;inset:4px;border-radius:50%;background:conic-gradient(var(--pc,var(--v3-brand)),var(--pt,var(--v3-tint)),var(--pc,var(--v3-brand)),var(--v3-brand-soft),var(--pc,var(--v3-brand)));filter:blur(9px);opacity:.8;z-index:-1;animation:v3-so-halo 9s linear infinite}
.v3-so-halo.is-off::before{display:none}
.v3-so-halo>img,.v3-so-halo>span{display:grid;place-items:center;width:var(--s,64px);height:var(--s,64px);border-radius:var(--v3-radius-md);object-fit:cover;background:var(--pt,var(--v3-tint));color:var(--pi,var(--v3-action));font-size:calc(var(--s,64px)*.4);font-weight:600}
.v3-so-halo.is-off>img{filter:grayscale(1);opacity:.55}
@keyframes v3-so-halo{to{transform:rotate(360deg)}}
.v3-so-mood{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:var(--v3-radius-xs);background:var(--pt,var(--v3-tint));color:var(--v3-stone);font-size:12px;white-space:nowrap}
.v3-so-mood::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--pc,var(--v3-brand))}
@media (prefers-reduced-motion:reduce){.v3-so-halo::before,.v3-so-sk i{animation:none}.v3-so-wrap,.v3-so-main,.v3-so-toast{transition:none}}

/* 阶段8-6a：只在五个入口启用，community / post-detail / post-new 不带此 body 类。 */
body.v3-so-page{font-size:14px;line-height:1.6;animation:none!important}
body.v3-so-page.folio-leaving{opacity:1;transition:none}
.v3-so-page :focus-visible:not(input):not(textarea){outline:none!important;box-shadow:0 0 0 3px rgba(77,175,254,.4)!important}
/* 内嵌输入区仍不画方形光环；仅独立文本区恢复蓝边 + 3px 光环，搜索框保持原样。 */
.v3-so-page :is(input,textarea):not(.v3-so-textarea):is(:focus,:focus-visible){outline:none!important;box-shadow:none!important}
.v3-so-page .v3-so-input{transition:none}
.v3-so-page .v3-so-main{padding-bottom:120px}
.v3-so-page .v3-so-wrap.is-open .v3-cm-side{width:52px;margin-right:0}
.v3-so-page footer:not(.v3-foot){letter-spacing:normal;color:inherit!important;background:transparent!important}
.v3-so-page footer:not(.v3-foot) *{letter-spacing:normal}
.v3-so-page .v3-so-foot{font-size:14px;line-height:1.6;border-radius:0 0 12px 12px}
.v3-so-page .v3-so-toast{line-height:1.6}
.v3-so-page .v3-so-av{background:transparent}
.v3-so-page .v3-so-av.is-dav{background:#fff}
.v3-so-page .v3-so-dd>.v3-so-xbtn{border:1px solid var(--v3-line-strong);color:var(--v3-smoke)}
.v3-so-page .v3-so-dd.is-open>.v3-so-xbtn,.v3-so-page .v3-so-dd.is-open>.v3-pf-ddb{border-color:var(--v3-action)}
.v3-so-page .v3-so-dd.is-open>button>:is(.v3-ic,.v3-cm-more-icon){transform:rotate(180deg)}
.v3-so-page .v3-so-dd>button>:is(.v3-ic,.v3-cm-more-icon){transition:transform .15s}
.v3-so-page .v3-so-dd>:where(button)>.v3-cm-more-icon{width:20px;height:20px;background:currentColor;color:var(--v3-smoke);mask:url(/shared/v3/icons/more.svg) center/contain no-repeat}
.v3-so-page .v3-so-dd>button>.v3-cm-more-icon>*{display:none}
.v3-so-dialog{box-sizing:border-box;width:440px;max-width:calc(100vw - 32px);max-height:calc(100vh - 40px);margin:auto;padding:22px;border:1px solid var(--v3-line);border-radius:12px;background:var(--v3-paper);color:#000;box-shadow:var(--v3-float);font-size:14px;line-height:1.6;animation:none}
.v3-so-dialog::backdrop{background:rgba(31,42,55,.20)}
.v3-so-dialog h4{margin:0 0 6px;font-size:17px;font-weight:600;line-height:1.6;color:#000;letter-spacing:normal}
.v3-so-dialog>p{margin:0 0 18px;color:var(--v3-stone)}
.v3-so-dialog .v3-cm-actions{display:flex;justify-content:flex-end;gap:8px;margin:0}
.v3-so-dialog .v3-cm-actions button{height:32px;padding:0 12px;border:1px solid transparent;border-radius:6px;background:none;color:var(--v3-ink);font-size:13px;font-weight:500;cursor:pointer;transition:background-color .15s,border-color .15s,color .15s}
.v3-so-dialog .v3-cm-actions button:hover{background:var(--v3-sheet)}
.v3-so-dialog .v3-cm-actions .v3-cm-primary{background:var(--v3-action);color:#fff}
.v3-so-dialog .v3-cm-actions .v3-cm-danger{border-color:var(--v3-line-strong);background:#fff;color:var(--v3-danger)}
.v3-so-dialog .v3-so-dk{display:block;margin-bottom:4px;color:var(--v3-smoke);font-size:11px;letter-spacing:.02em}
.v3-so-dialog.v3-so-restart>p{margin-bottom:14px}
.v3-so-arrow{display:inline-block;flex:none;vertical-align:middle}
.v3-so-page .v3-so-postpane{display:flex;flex-direction:column;animation:v3-so-abin .25s ease}
.v3-so-page .v3-so-postpane>.v3-cm-dhead{flex:none}
.v3-so-page .v3-so-postpane>.v3-cm-dbody{flex:1;min-height:0;overflow:auto}
.v3-so-page .v3-so-replyslot{flex:none;padding-top:12px;border-top:1px solid var(--v3-line)}
.v3-so-page .v3-so-replyslot .v3-cm-reply-main{margin:0;padding:0}
.v3-so-page .v3-so-replyslot .v3-cm-rbox{margin:0}
@keyframes v3-so-abin{from{opacity:.3}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.v3-so-page .v3-so-postpane{animation:none}}
.v3-so-page .v3-so-pc-coral{--pt:#FDE7EF}.v3-so-page .v3-so-pc-sand{--pt:#FEEEDF}.v3-so-page .v3-so-pc-beige{--pt:#FDF5D2}.v3-so-page .v3-so-pc-moss{--pt:#DDF6EF}.v3-so-page .v3-so-pc-gray{--pt:#DCF3FA}.v3-so-page .v3-so-pc-violet{--pt:#EEE8FD}
@media(max-width:980px){
  .v3-so-page .v3-so-wrap .v3-cm-lnav,.v3-so-page .v3-so-wrap.is-open .v3-cm-lnav{display:none}
  .v3-so-page .v3-so-wrap,.v3-so-page .v3-so-wrap.is-open{padding-left:24px;padding-right:24px}
}

/* 个人主页 / 分身主页详情栏的「回复」：这两页定稿用 .btn.primary.sm（实心蓝，没字时灰底灰字）；社区定稿是白底浅蓝边（.rpigo），不受影响 */
.v3-so-page .v3-cm-rbox .v3-cm-rgo{height:32px;padding:0 12px;border:1px solid transparent;border-radius:6px;background:var(--v3-action);color:#fff;font-size:13px;font-weight:500;opacity:1}
.v3-so-page .v3-cm-rbox .v3-cm-rgo:hover:not(:disabled){background:var(--v3-action-hover);color:#fff}
.v3-so-page .v3-cm-rbox .v3-cm-rgo:active:not(:disabled){background:var(--v3-action-press)}
.v3-so-page .v3-cm-rbox .v3-cm-rgo:disabled{background:var(--v3-sheet);color:var(--v3-smoke);border-color:transparent;opacity:1;cursor:not-allowed}
