.v3-cmp-mono{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-size:12px}
.v3-cmp-dialog.v3-cmp-sf .v3-cmp-sfp,.v3-cmp-lf .v3-cmp-sfp{margin:16px 0 8px;color:var(--v3-ink);font-size:14px;font-weight:500}
.v3-cmp-sfprom{display:flex;align-items:center;gap:0;font-size:13px;color:var(--v3-stone)}
.v3-cmp-sfprom span{margin-right:12px}
.v3-cmp-sfprom b{font-weight:500;color:var(--v3-action);padding:0 12px;border-left:1px solid rgba(22,119,210,.25);line-height:13px}
.v3-cmp-sfprom span+b{border-left:0;padding-left:0}
.v3-cmp-sfback{border:0;background:none;color:var(--v3-stone);font-size:14px;cursor:pointer;padding:0;height:32px}
.v3-cmp-sfback:hover{color:var(--v3-ink)}
/* 按住确认：一圈光沿边走满 */
.v3-cmp-sfhold{position:relative;height:44px;min-width:188px;padding:0 24px;border-radius:var(--v3-radius-md);border:1px solid rgba(22,119,210,.22);background:var(--v3-tint);color:var(--v3-action);font-size:14px;font-weight:500;cursor:pointer;user-select:none;-webkit-user-select:none;touch-action:none;transition:background-color .3s,color .3s,border-color .3s}
.v3-cmp-sfhold::before{content:'';position:absolute;inset:-3px;border-radius:calc(var(--v3-radius-md) + 3px);padding:2px;background:conic-gradient(from 0deg,var(--v3-action) calc(var(--v3-cmp-p,0) * 360deg),transparent 0);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);pointer-events:none}
.v3-cmp-sfhold.v3-cmp-holding::before{filter:drop-shadow(0 0 5px rgba(77,175,254,.7))}
.v3-cmp-sfhold:hover:not(:disabled){border-color:rgba(22,119,210,.4)}
.v3-cmp-sfhold:disabled{opacity:.45;cursor:default}
.v3-cmp-sfhold.v3-cmp-ok{background:var(--v3-action);color:#fff;border-color:var(--v3-action)}
.v3-cmp-sfhold.v3-cmp-ok::before{opacity:0;transition:opacity .4s}
@keyframes sffade{from{opacity:0}to{opacity:1}}
html.v3-cmp-lf-on{overflow:hidden}
.v3-cmp-lf{font-family:var(--v3-font);font-size:14px;line-height:1.6;color:var(--v3-ink);position:fixed;inset:0;z-index:300;display:flex;flex-direction:column;background:radial-gradient(55% 48% at 50% 40%,rgba(182,219,254,.55),rgba(238,246,255,0) 70%),rgba(250,252,255,.86);-webkit-backdrop-filter:blur(22px) saturate(1.15);backdrop-filter:blur(22px) saturate(1.15);animation:lfin .5s ease}
@keyframes lfin{from{opacity:0}to{opacity:1}}
.v3-cmp-lf::before{content:'';position:absolute;inset:0;background:radial-gradient(30% 26% at 30% 70%,rgba(77,175,254,.12),transparent 70%),radial-gradient(28% 24% at 72% 26%,rgba(126,194,253,.14),transparent 70%);animation:lfdrift 14s ease-in-out infinite alternate;pointer-events:none}
@keyframes lfdrift{to{transform:translate(2%,-2%) scale(1.04)}}
.v3-cmp-lftop{position:relative;display:flex;align-items:center;gap:24px;padding:20px 28px}
.v3-cmp-lfts{font-size:11px;line-height:1.6;color:var(--v3-smoke)}
.v3-cmp-lfstage{position:relative;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;padding:0 24px 8vh;cursor:pointer}
.v3-cmp-lfall li{display:flex;gap:10px;font-size:13px;line-height:20px;color:var(--v3-stone)}
.v3-cmp-sfhold.v3-cmp-nudge::before{background:conic-gradient(from 0deg,var(--v3-brand) 25%,transparent 0);animation:nudge 1.2s linear}
@keyframes nudge{to{transform:rotate(360deg)}}
.v3-cmp-lf.v3-cmp-lf2{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;animation:none;overflow:hidden}
.v3-cmp-lf.v3-cmp-lf2::before{display:none}
/* 云：从四周飘向中间，叠成光场 */
.v3-cmp-lfclouds{position:absolute;inset:0;pointer-events:none;z-index:0}
.v3-cmp-lfclouds i{position:absolute;left:50%;top:46%;width:var(--v3-cmp-s);height:calc(var(--v3-cmp-s) * .72);margin:calc(var(--v3-cmp-s) * -.36) 0 0 calc(var(--v3-cmp-s) * -.5);border-radius:50%;background:radial-gradient(closest-side,rgba(var(--v3-cmp-c),.62),rgba(var(--v3-cmp-c),.22) 58%,rgba(var(--v3-cmp-c),0));filter:blur(26px);opacity:0;transform:translate(var(--v3-cmp-fx),var(--v3-cmp-fy)) scale(.45);animation:cloudin 1.7s cubic-bezier(.2,.7,.15,1) var(--v3-cmp-d) forwards,clouddrift 11s ease-in-out calc(var(--v3-cmp-d) + 1.7s) infinite alternate}
@keyframes cloudin{to{opacity:var(--v3-cmp-a);transform:translate(var(--v3-cmp-tx),var(--v3-cmp-ty)) scale(1)}}
@keyframes clouddrift{from{opacity:var(--v3-cmp-a);transform:translate(var(--v3-cmp-tx),var(--v3-cmp-ty)) scale(1)}to{opacity:var(--v3-cmp-a);transform:translate(calc(var(--v3-cmp-tx) + 2.5vw),calc(var(--v3-cmp-ty) - 2vh)) scale(1.08)}}
.v3-cmp-lfveil{position:absolute;inset:0;z-index:0;background:rgba(250,252,255,.72);-webkit-backdrop-filter:blur(22px) saturate(1.15);backdrop-filter:blur(22px) saturate(1.15);opacity:0;animation:veilin 1.4s cubic-bezier(.3,.6,.2,1) .1s forwards}
@keyframes veilin{to{opacity:1}}
.v3-cmp-lf2 .v3-cmp-lfclouds{z-index:1}
.v3-cmp-lf2 .v3-cmp-lftop,.v3-cmp-lf2 .v3-cmp-lfstage,.v3-cmp-lflines{position:relative;z-index:2}
.v3-cmp-lf2 .v3-cmp-lftop{opacity:0;animation:sffade .6s ease .9s forwards}
.v3-cmp-lflines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}
.v3-cmp-lflines path{fill:none;stroke:rgba(77,175,254,.6);stroke-width:1;stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset .5s cubic-bezier(.2,.8,.2,1)}
.v3-cmp-lflines circle{fill:var(--v3-brand);opacity:0;filter:drop-shadow(0 0 4px rgba(77,175,254,.9));transition:opacity .3s .35s}
.v3-cmp-lflines g.v3-cmp-on path{stroke-dashoffset:0}
.v3-cmp-lflines g.v3-cmp-on circle{opacity:1}
/* 舞台 */
.v3-cmp-lf2 .v3-cmp-lfstage{gap:22px;cursor:pointer}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lfstage{cursor:default}
.v3-cmp-lfintro{margin:0;text-align:center;font-size:15px;line-height:1.7;color:var(--v3-stone);opacity:0;animation:lfrin .9s cubic-bezier(.2,.8,.2,1) 1.1s both}
@keyframes lfrin{from{opacity:0;filter:blur(6px);transform:translateY(8px)}to{opacity:1;filter:none;transform:none}}
.v3-cmp-lfintro span{display:block;margin-top:2px;font-size:12px;color:var(--v3-action);letter-spacing:.12em}
.v3-cmp-lfcore{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:0 88px;width:min(1200px,100%)}
.v3-cmp-lfcol{list-style:none;margin:0;padding:0;display:grid;gap:34px}
.v3-cmp-lfcol li{position:relative;display:flex;align-items:baseline;gap:12px;font-size:15px;line-height:22px;color:var(--v3-ink);opacity:0;transform:translateY(4px);transition:color .5s}
.v3-cmp-lfcol.v3-cmp-l li{flex-direction:row-reverse;text-align:right}
.v3-cmp-lfcol li i{font-style:normal;font-size:12px;color:var(--v3-action);flex:none;letter-spacing:.04em}
.v3-cmp-lfcol li.v3-cmp-in{opacity:1;transform:none;animation:lfslot .7s cubic-bezier(.2,.8,.2,1)}
.v3-cmp-lfcol li.v3-cmp-in:not(.v3-cmp-cur){color:var(--v3-stone)}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lfcol li.v3-cmp-in{color:var(--v3-ink)}
.v3-cmp-lfcol li.v3-cmp-cur span{text-shadow:0 0 14px rgba(77,175,254,.35)}
@keyframes lfslot{from{opacity:0;filter:blur(4px);transform:translateY(4px)}to{opacity:1;filter:none;transform:none}}
.v3-cmp-lffly{position:absolute;left:0;top:0;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:#fff;box-shadow:0 0 6px #fff,0 0 16px 4px rgba(77,175,254,.9);pointer-events:none;z-index:4}
/* logo */
.v3-cmp-lgw{position:relative;width:min(400px,32vw);aspect-ratio:838/584;will-change:transform;outline:none}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lgw{cursor:pointer}
.v3-cmp-lgw .v3-cmp-lg{position:relative;width:100%;height:100%;overflow:visible;display:block}
.v3-cmp-lghalo{position:absolute;inset:-30% -18%;border-radius:50%;background:radial-gradient(closest-side,rgba(126,194,253,.36),rgba(182,219,254,.14) 55%,transparent 78%);filter:blur(8px);pointer-events:none;opacity:0;transition:opacity 1s ease}
.v3-cmp-lf2.v3-cmp-line .v3-cmp-lghalo{opacity:1}
.v3-cmp-lgM{opacity:0;filter:drop-shadow(0 0 5px rgba(255,255,255,.9)) drop-shadow(0 0 10px rgba(77,175,254,.9)) drop-shadow(0 0 24px rgba(77,175,254,.5));transition:opacity .35s ease}
.v3-cmp-lf2.v3-cmp-line .v3-cmp-lgM{opacity:1}
.v3-cmp-lf2.v3-cmp-formed .v3-cmp-lgM{opacity:0}
.v3-cmp-lgstr{opacity:0;transition:opacity .35s ease;filter:drop-shadow(0 10px 24px rgba(77,175,254,.25))}
.v3-cmp-lf2.v3-cmp-formed .v3-cmp-lgstr{opacity:1}
.v3-cmp-lgrh{fill:#fff;opacity:0;filter:drop-shadow(0 0 6px #fff) drop-shadow(0 0 18px rgba(77,175,254,1));transition:opacity .25s}
.v3-cmp-lgfill{fill:none;stroke:#fff;stroke-width:11;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1000;stroke-dashoffset:1000;filter:drop-shadow(0 0 8px rgba(77,175,254,1)) drop-shadow(0 0 16px rgba(77,175,254,.6))}
.v3-cmp-lgsta circle{fill:rgba(255,255,255,.8);stroke:rgba(22,119,210,.28);stroke-width:3;opacity:0;transition:opacity .4s,fill .5s,stroke .5s,stroke-width .5s}
.v3-cmp-lf2.v3-cmp-woven .v3-cmp-lgsta circle{opacity:1}
.v3-cmp-lgsta circle.v3-cmp-on{fill:#fff;stroke:var(--v3-brand);stroke-width:6;filter:drop-shadow(0 0 7px rgba(77,175,254,1))}
.v3-cmp-lgc{fill:none;stroke-linecap:round}
.v3-cmp-lgc.v3-cmp-c1{stroke:#fff;stroke-width:12;filter:drop-shadow(0 0 7px rgba(77,175,254,1)) drop-shadow(0 0 18px rgba(77,175,254,.7))}
.v3-cmp-lgc.v3-cmp-c2,.v3-cmp-lgc.v3-cmp-c3{stroke:rgba(255,255,255,.95);stroke-width:10;opacity:0;filter:drop-shadow(0 0 9px rgba(77,175,254,.9))}
.v3-cmp-lgh{fill:#fff;opacity:0;filter:drop-shadow(0 0 5px #fff) drop-shadow(0 0 16px rgba(77,175,254,1))}
.v3-cmp-lgrip circle,.v3-cmp-lgrip ellipse{fill:none;stroke:var(--v3-brand);transform-box:fill-box;transform-origin:center}
.v3-cmp-lgrip .v3-cmp-bst{stroke-width:5;animation:lgbst .9s ease-out forwards}
@keyframes lgbst{from{opacity:.95;transform:scale(.35)}to{opacity:0;transform:scale(2.4)}}
.v3-cmp-lgrip .v3-cmp-rip{stroke-width:3;animation:lgrip 1.1s cubic-bezier(.2,.8,.2,1) forwards}
@keyframes lgrip{from{opacity:.5;transform:scale(.55)}to{opacity:0;transform:scale(1.5)}}
/* 读完：logo 轻轻呼吸，中心一圈「可以按」的提示 */
.v3-cmp-lgtouch circle{fill:none;stroke:var(--v3-brand);stroke-width:4;opacity:0;transform-box:fill-box;transform-origin:center}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lgtouch circle{animation:lgtouch 2.2s ease-out infinite}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lgtouch circle:nth-child(2){animation-delay:1.1s}
.v3-cmp-lgw.v3-cmp-pressing .v3-cmp-lgtouch circle{animation:none;opacity:0}
@keyframes lgtouch{0%{opacity:.7;transform:scale(.6)}100%{opacity:0;transform:scale(2.6)}}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lg{animation:lgbreath 2.8s ease-in-out infinite}
@keyframes lgbreath{50%{transform:scale(1.035)}}
/* 底部：位置提前留好，读完才出现（画面不跳） */
.v3-cmp-lfend{text-align:center;visibility:hidden;opacity:0;transform:translateY(8px);transition:opacity .6s ease,transform .6s cubic-bezier(.2,.8,.2,1),visibility 0s .6s}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lfend{visibility:visible;opacity:1;transform:none;transition:opacity .6s ease,transform .6s cubic-bezier(.2,.8,.2,1)}
.v3-cmp-lfend .v3-cmp-sfp{margin:0 0 8px;font-size:17px}
.v3-cmp-lfend .v3-cmp-sfprom{justify-content:center}
.v3-cmp-lfholdb{margin-top:18px;height:50px;min-width:240px;font-size:15px;background:var(--v3-action);color:#fff;border-color:var(--v3-action);box-shadow:0 10px 28px rgba(22,119,210,.28)}
.v3-cmp-lfholdb:hover:not(:disabled){background:var(--v3-action-hover);border-color:var(--v3-action-hover)}
.v3-cmp-lfholdb::before{background:conic-gradient(from 0deg,var(--v3-brand) calc(var(--v3-cmp-p,0) * 360deg),transparent 0)}
.v3-cmp-lfholdb::after{content:'';position:absolute;inset:-3px;border-radius:calc(var(--v3-radius-md) + 3px);border:2px solid rgba(77,175,254,.55);opacity:0;pointer-events:none}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lfholdb:not(.v3-cmp-holding):not(.v3-cmp-ok)::after{animation:holdping 2.2s ease-out infinite}
@keyframes holdping{0%{opacity:.8;transform:scale(1)}100%{opacity:0;transform:scale(1.18,1.5)}}
.v3-cmp-lfholdb.v3-cmp-ok{background:var(--v3-brand);border-color:var(--v3-brand)}
.v3-cmp-lfwave{position:absolute;width:220px;height:220px;margin:-110px 0 0 -110px;border-radius:50%;border:2px solid rgba(77,175,254,.6);box-shadow:0 0 40px rgba(77,175,254,.4),inset 0 0 40px rgba(77,175,254,.3);animation:lfwave 1s cubic-bezier(.2,.7,.2,1) forwards;pointer-events:none;z-index:5}
@keyframes lfwave{from{transform:scale(.3);opacity:.95}to{transform:scale(9);opacity:0}}
.v3-cmp-lf2.v3-cmp-tied::after{content:'';position:absolute;inset:0;z-index:5;background:radial-gradient(40% 40% at 50% 50%,rgba(255,255,255,.9),transparent 70%);animation:lfflash .8s ease-out forwards;pointer-events:none}
@keyframes lfflash{from{opacity:0}30%{opacity:1}to{opacity:0}}
.v3-cmp-lf2.v3-cmp-shrink .v3-cmp-lftop,.v3-cmp-lf2.v3-cmp-shrink .v3-cmp-lfintro,.v3-cmp-lf2.v3-cmp-shrink .v3-cmp-lfcol,.v3-cmp-lf2.v3-cmp-shrink .v3-cmp-lfend,.v3-cmp-lf2.v3-cmp-shrink .v3-cmp-lflines{opacity:0;transition:opacity .25s}
.v3-cmp-composer-handoff{animation:handoff 1.3s ease-out}
@keyframes handoff{0%{box-shadow:0 0 0 2px rgba(77,175,254,.7),0 0 30px 8px rgba(77,175,254,.45)}100%{box-shadow:0 0 0 4px rgba(77,175,254,.05)}}
@media (max-height:900px){.v3-cmp-lf2 .v3-cmp-lfstage{gap:14px;padding-bottom:2vh}.v3-cmp-lfcol{gap:24px}.v3-cmp-lgw{width:min(330px,28vw)}.v3-cmp-lfholdb{margin-top:12px;height:46px}}
/* 窄屏：logo 在上，规则按顺序排在下面，不画连线 */
@media (max-width:960px){.v3-cmp-lfcore{display:flex;flex-direction:column;align-items:stretch;gap:12px;max-width:440px}.v3-cmp-lgw{order:-1;align-self:center;width:min(300px,70vw);margin-bottom:12px}.v3-cmp-lfcol{display:contents}.v3-cmp-lfcol li,.v3-cmp-lfcol.v3-cmp-l li{flex-direction:row;text-align:left;order:var(--v3-cmp-o)}.v3-cmp-lflines{display:none}}
@media (prefers-reduced-motion:reduce){.v3-cmp-lfclouds i{animation:none;opacity:var(--v3-cmp-a);transform:translate(var(--v3-cmp-tx),var(--v3-cmp-ty))}.v3-cmp-lfveil,.v3-cmp-lf2 .v3-cmp-lftop,.v3-cmp-lfintro{animation:none;opacity:1}.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lg,.v3-cmp-lgrip *,.v3-cmp-lfcol li.v3-cmp-in,.v3-cmp-lfwave,.v3-cmp-lf2.v3-cmp-tied::after,.v3-cmp-lgtouch circle,.v3-cmp-lfholdb::after,.v3-cmp-composer-handoff{animation:none!important}}

/* ================= 按住确认：三种样式（替换实心蓝按钮） ================= */
.v3-cmp-lfholdb{margin-top:18px;box-shadow:none}
.v3-cmp-lfholdb::after{animation:none!important}
/* A 光环：圆形磨砂，外圈一圈淡淡的轨道，按住时光走一圈 */
.v3-cmp-lfholdb.v3-cmp-hbA{width:78px;height:78px;min-width:0;padding:0;border-radius:50%;background:rgba(255,255,255,.62);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(77,175,254,.28);color:var(--v3-action);font-size:13px;letter-spacing:.12em;transition:transform .25s,background-color .3s,color .3s}
.v3-cmp-lfholdb.v3-cmp-hbA::before{inset:-5px;border-radius:50%;padding:2px;background:conic-gradient(from -90deg,var(--v3-brand) calc(var(--v3-cmp-p,0) * 360deg),rgba(77,175,254,.16) 0)}
.v3-cmp-lfholdb.v3-cmp-hbA .v3-cmp-hbring{position:absolute;inset:-5px;border-radius:50%;pointer-events:none}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lfholdb.v3-cmp-hbA:not(.v3-cmp-holding):not(.v3-cmp-ok) .v3-cmp-hbring{animation:hbring 2.4s ease-out infinite}
@keyframes hbring{0%{box-shadow:0 0 0 0 rgba(77,175,254,.35)}100%{box-shadow:0 0 0 14px rgba(77,175,254,0)}}
.v3-cmp-lfholdb.v3-cmp-hbA:hover:not(:disabled){background:rgba(255,255,255,.85);border-color:rgba(77,175,254,.45)}
.v3-cmp-lfholdb.v3-cmp-hbA.v3-cmp-holding{transform:scale(.95);background:rgba(238,246,255,.9)}
.v3-cmp-lfholdb.v3-cmp-hbA.v3-cmp-holding::before{filter:drop-shadow(0 0 6px rgba(77,175,254,.9))}
.v3-cmp-lfholdb.v3-cmp-hbA.v3-cmp-ok{background:var(--v3-brand);border-color:var(--v3-brand);color:#fff}
/* ================= v4：规则对准 logo 上的点；编号在上、句子在下 ================= */
.v3-cmp-lfcore{gap:0 64px;width:min(1120px,100%)}
.v3-cmp-lfcol{position:relative;align-self:stretch;display:block;min-width:0}
.v3-cmp-lfcol li{position:absolute;top:calc(var(--v3-cmp-y) * 100%);left:0;right:0;display:flex;flex-direction:column;align-items:flex-start;gap:4px;transform:translate(0,-50%);font-size:15px;line-height:22px}
.v3-cmp-lfcol.v3-cmp-l li{flex-direction:column;align-items:flex-end;text-align:right}
.v3-cmp-lfcol li i{font-size:11px;letter-spacing:.14em;line-height:14px;opacity:.85}
.v3-cmp-lfcol li span{white-space:nowrap}
.v3-cmp-lfcol li.v3-cmp-in{transform:translate(0,-50%);animation:lfslot2 .7s cubic-bezier(.2,.8,.2,1)}
@keyframes lfslot2{from{opacity:0;filter:blur(4px)}to{opacity:1;filter:none}}
/* 收尾：规则收回 logo、文字淡出、云向四周散开、背景变回来 */
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lfcol li{transition:opacity .35s ease,transform .45s cubic-bezier(.5,0,.75,0);opacity:0}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lfcol.v3-cmp-l li{transform:translate(28px,-50%)}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lfcol.v3-cmp-r li{transform:translate(-28px,-50%)}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lftop,.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lfintro,.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lfend{transition:opacity .35s ease;opacity:0}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lflines g path{stroke-dashoffset:1;transition-duration:.35s}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lflines g circle{opacity:0;transition-delay:0s}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lgsta circle,.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lgtouch{opacity:0;transition:opacity .3s}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lg{animation:none}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lghalo{opacity:.4}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lfclouds i{animation:cloudout 1s cubic-bezier(.5,0,.75,0) .55s forwards}
@keyframes cloudout{from{opacity:var(--v3-cmp-a);transform:translate(var(--v3-cmp-tx),var(--v3-cmp-ty)) scale(1)}to{opacity:0;transform:translate(var(--v3-cmp-fx),var(--v3-cmp-fy)) scale(.5)}}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lfveil{animation:veilout .55s ease 1.05s forwards}
@keyframes veilout{from{opacity:1}to{opacity:0}}
.v3-cmp-lf2.v3-cmp-tied::after,.v3-cmp-lfwave{display:none}
/* 飞向发帖框的那条光线，和沿发帖框边缘画的一圈光 */
.v3-cmp-lfbeam{position:fixed;z-index:400;height:4px;border-radius:4px;transform-origin:0 50%;background:linear-gradient(90deg,#83C7FD,#40ADFE 45%,#A9D5FE);box-shadow:0 0 6px rgba(255,255,255,.9),0 0 14px rgba(77,175,254,.9),0 0 28px rgba(77,175,254,.5);pointer-events:none}
.v3-cmp-lfedge{position:fixed;z-index:400;pointer-events:none;overflow:visible}
.v3-cmp-lfedge path{fill:none;stroke:var(--v3-brand);stroke-width:2.5;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;filter:drop-shadow(0 0 4px rgba(77,175,254,.9)) drop-shadow(0 0 10px rgba(77,175,254,.5));transition:stroke-dashoffset .55s cubic-bezier(.4,0,.2,1)}
.v3-cmp-lfedge.v3-cmp-go path{stroke-dashoffset:0}
.v3-cmp-lfedge.v3-cmp-out{opacity:0;transition:opacity .45s ease}
@media (max-width:960px){.v3-cmp-lfcol li,.v3-cmp-lfcol.v3-cmp-l li{position:static;transform:none;align-items:flex-start;text-align:left}.v3-cmp-lfcol li.v3-cmp-in{transform:none}.v3-cmp-lfcol li span{white-space:normal}}
/* ================= v5：不用白线，用颜色在绳子里流动 ================= */
.v3-cmp-lgc,.v3-cmp-lgh{display:none}
.v3-cmp-lgflow{opacity:0;transition:opacity .8s ease;isolation:isolate}
.v3-cmp-lf2.v3-cmp-woven .v3-cmp-lgflow{opacity:1}
.v3-cmp-lgb{fill:none;stroke-linecap:round;stroke-width:110}
.v3-cmp-lgb.v3-cmp-b0{stroke:#0E78E6;opacity:.62;mix-blend-mode:multiply}
.v3-cmp-lgb.v3-cmp-b1{stroke:#EAF6FF;opacity:.5}
.v3-cmp-lgb.v3-cmp-b2,.v3-cmp-lgb.v3-cmp-b3{stroke:#fff;opacity:0}
.v3-cmp-lgfill{stroke:#2D97F7;stroke-width:110;opacity:.5;mix-blend-mode:multiply;filter:none}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lgflow{opacity:0;transition-duration:.3s}
.v3-cmp-lgfill{filter:url(#lgSoft)}
/* ================= v6：不用额外的光带，绳子本身的蓝色渐变沿 ∞ 流动 ================= */
.v3-cmp-lgb{display:none}
.v3-cmp-lgfill{opacity:0}
.v3-cmp-lgstr{filter:drop-shadow(0 10px 24px rgba(77,175,254,.25))}
.v3-cmp-lgw.v3-cmp-pressing .v3-cmp-lgstr{filter:drop-shadow(0 0 18px rgba(22,119,210,.45)) drop-shadow(0 10px 24px rgba(77,175,254,.3))}
/* v10：笔尖用浅冰蓝的光，不用纯白 */
.v3-cmp-lgrh{fill:#E8F5FF;filter:drop-shadow(0 0 6px rgba(182,219,254,1)) drop-shadow(0 0 16px rgba(77,175,254,.8))}
/* ================= 性能：动画中的那层 SVG 不带滤镜；阴影、模糊都放在不动的单独图层上 ================= */
.v3-cmp-lgstr,.v3-cmp-lgw.v3-cmp-pressing .v3-cmp-lgstr{filter:none}
.v3-cmp-lgshadow{position:absolute;inset:0;width:100%;height:100%;opacity:0;filter:drop-shadow(0 10px 22px rgba(77,175,254,.28));transition:opacity .5s;will-change:opacity}
.v3-cmp-lf2.v3-cmp-formed .v3-cmp-lgshadow{opacity:1}
.v3-cmp-lf2.v3-cmp-outro .v3-cmp-lgshadow{opacity:0}
.v3-cmp-lgw .v3-cmp-lg{z-index:1}
.v3-cmp-lgsta circle.v3-cmp-on{filter:none;stroke-width:7}
.v3-cmp-lgM{filter:drop-shadow(0 0 8px rgba(77,175,254,.8))}
.v3-cmp-lgrh{filter:drop-shadow(0 0 8px rgba(77,175,254,.9))}
.v3-cmp-lfclouds i{will-change:transform,opacity}
.v3-cmp-lfveil{will-change:opacity;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
.v3-cmp-lghalo,.v3-cmp-lgw{will-change:transform}
.v3-cmp-error{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);color:var(--v3-danger);font-size:13px;z-index:8}
.v3-cmp-confirm{position:fixed;inset:0;z-index:410;display:grid;place-items:center;padding:16px;background:rgba(31,42,55,.20)}
.v3-cmp-confirm>div{font-family:var(--v3-font);font-size:14px;line-height:1.6;box-sizing:border-box;width:440px;max-width:100%;padding:22px;background:var(--v3-paper);border:1px solid var(--v3-line);border-radius:var(--v3-radius-lg);box-shadow:var(--v3-float);color:#000;letter-spacing:normal;animation:v3-cmp-dlgin .2s ease-out}
.v3-cmp-confirm h4{margin:0 0 14px;font-size:17px;font-weight:600;line-height:1.6}.v3-cmp-confirm p{margin:0 0 18px;font-size:14px;line-height:1.6;color:var(--v3-stone)}.v3-cmp-confirm footer{display:flex;gap:8px;justify-content:flex-end}.v3-cmp-confirm button{box-sizing:border-box;height:40px;padding:0 18px;border:1px solid transparent;border-radius:var(--v3-radius-md);background:none;color:var(--v3-stone);font-size:14px;font-weight:500;line-height:1.6;letter-spacing:normal;cursor:pointer}.v3-cmp-confirm [data-fpleave]{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--v3-action);color:#fff}.v3-cmp-confirm [data-fpleave]:hover{background:var(--v3-action-hover)}.v3-cmp-confirm [data-fpstay]:hover{color:var(--v3-ink)}
.v3-cmp-confirm button:focus-visible,.v3-cmp-confirm [data-fpstay]:focus{outline:none;box-shadow:0 0 0 3px rgba(77,175,254,.4)}
@keyframes v3-cmp-dlgin{from{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}
.v3-cmp-lf2 .v3-cmp-mono{font-family:ui-monospace,"SF Mono",Menlo,monospace!important;font-variant-numeric:tabular-nums;font-size:11px;letter-spacing:.02em}
.v3-cmp-lfholdb.v3-cmp-hbC{line-height:1.6}
@media(prefers-reduced-motion:reduce){.v3-cmp-confirm>div{animation:none}}

/* 定稿实际用的按住按钮是 C「一根光线」（定稿 PK.hb='C'）：只有字「按住确认」，下面一根细线，按住时光沿线填满。原样照搬定稿这 7 条。 */
.v3-cmp-lfholdb.v3-cmp-hbC{height:auto;min-width:220px;padding:8px 0 14px;background:none;border:0;border-radius:0;color:var(--v3-action);font-size:14px;letter-spacing:.3em}
.v3-cmp-lfholdb.v3-cmp-hbC::before{inset:auto 0 0 0;height:2px;border-radius:2px;padding:0;-webkit-mask:none;mask:none;background:linear-gradient(90deg,var(--v3-brand) calc(var(--v3-cmp-p,0) * 100%),rgba(77,175,254,.22) 0);filter:drop-shadow(0 0 4px rgba(77,175,254,.6))}
.v3-cmp-lf2.v3-cmp-ready .v3-cmp-lfholdb.v3-cmp-hbC:not(.v3-cmp-holding):not(.v3-cmp-ok) .v3-cmp-lbl{animation:hbtext 2.4s ease-in-out infinite}
@keyframes hbtext{50%{opacity:.5}}
.v3-cmp-lfholdb.v3-cmp-hbC:hover:not(:disabled){color:var(--v3-action-hover)}
.v3-cmp-lfholdb.v3-cmp-hbC.v3-cmp-ok{color:var(--v3-brand)}
@media (prefers-reduced-motion:reduce){.v3-cmp-lfholdb .v3-cmp-hbring,.v3-cmp-lfholdb.v3-cmp-hbC .v3-cmp-lbl{animation:none!important}}
.v3-cmp-lfholdb.v3-cmp-hbC:hover:not(:disabled),.v3-cmp-lfholdb.v3-cmp-hbC.v3-cmp-ok{background:none}
