:root{--auth-green:#244e40;--auth-muted:#7e8880;--auth-line:#dfe5de;--auth-bg:#f4f6f1}body.auth-page{margin:0;background:var(--auth-bg);color:#26342c;font-family:Inter,"Microsoft YaHei",sans-serif}.auth-layout{min-height:100svh;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;padding:48px 24px 24px;background:radial-gradient(ellipse at 10% 10%,#e4ece1 0,transparent 55%)}.auth-brand{align-self:flex-start;display:flex;align-items:center;gap:12px;text-decoration:none;font-weight:600;color:#344a3c;font-size:16px}.auth-brand span{display:grid;place-items:center;width:37px;height:37px;border-radius:10px;background:var(--auth-green);color:white;font-size:20px}.auth-panel{width:min(100%,420px);box-sizing:border-box;margin:55px auto 32px;border:1px solid #e0e5dd;border-radius:20px;background:#fff;padding:38px 36px;box-shadow:0 16px 48px #1d392807}.auth-eyebrow{font-size:11px;letter-spacing:.18em;color:#7b8a78;margin:0 0 17px}.auth-panel h1{font-size:30px;font-weight:650;letter-spacing:-1px;margin:0 0 10px}.auth-subtitle,.auth-copy{font-size:13px;line-height:1.8;color:var(--auth-muted);margin:0 0 20px}.auth-feedback{font-size:13px;line-height:1.7;color:#8f5739;white-space:pre-wrap}.auth-feedback:not(:empty){padding:10px 12px;background:#faf3eb;border-radius:8px;margin-bottom:20px}.auth-field{display:flex;flex-direction:column;gap:8px;font-size:13px;font-weight:500;margin:0 0 18px}.auth-field input{box-sizing:border-box;width:100%;font:inherit;height:46px;padding:0 12px;border:1px solid var(--auth-line);border-radius:9px;background:#fdfefc;color:#26342c;outline:none}.auth-field input:focus{border-color:#587563;box-shadow:0 0 0 3px #e9efdf}.auth-field input[readonly]{background:#f3f5f0;color:#7b837a}.auth-panel button{cursor:pointer;font:inherit;transition:background .15s}.auth-primary{display:block;width:100%;border:0;border-radius:9px;background:var(--auth-green);color:#fff;padding:14px;font-size:14px!important;margin-top:9px}.auth-primary:hover{background:#34614e}.auth-panel button:disabled{opacity:.55;cursor:wait}.auth-links{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-top:24px;font-size:12px}.auth-links a,.auth-secondary,.auth-link{color:#45634e;text-decoration:none}.auth-links a:hover,.auth-secondary:hover{text-decoration:underline}.auth-secondary{display:block;background:transparent;border:1px solid var(--auth-line);border-radius:8px;text-align:center;padding:11px;font-size:12px;margin-top:18px}.auth-link{border:0;background:none;padding:0;font-size:12px!important}.auth-footer{color:#a1aa9e;font-size:11px;margin:auto 0 0;padding-top:20px}.auth-password{margin-top:24px;border-top:1px solid var(--auth-line);padding-top:18px}.auth-password summary{font-size:13px;cursor:pointer;margin-bottom:18px}.auth-sessions{margin-top:24px;border-top:1px solid var(--auth-line);padding-top:16px}.auth-sessions h2{font-size:14px}.auth-sessions p{font-size:11px;line-height:1.8;overflow-wrap:anywhere;color:var(--auth-muted)}.auth-user-menu{position:fixed;right:24px;top:20px;z-index:50;background:#fff;border:1px solid var(--auth-line);border-radius:10px;padding:10px 14px;font:12px "Microsoft YaHei",sans-serif;color:#34513f}.auth-user-menu a{color:inherit;text-decoration:none}@media(max-width:600px){.auth-layout{padding:24px 18px}.auth-panel{margin:36px 0 24px;padding:30px 24px;border-radius:16px}.auth-brand{font-size:14px}.auth-panel h1{font-size:27px}}

/* 08 白底点阵：.auth-stage 承载 auth-dots.mjs 画的 canvas，canvas 只做装饰，不接收指针、不进读屏 */
body.auth-page{background:#fff;color:#202C28}
body.auth-page{background:#f0f2ee}
/* 登录页的 main 会命中工作台 main 的限宽居中规则，这里强制满铺 */
body.auth-page main.auth-layout.auth-stage{width:auto;max-width:none;margin:0;min-height:100svh;border:0;border-radius:0;box-shadow:none}
.auth-stage{position:relative;overflow:hidden;background:#f0f2ee}
.auth-stage>canvas.auth-dots{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}
.auth-stage>:not(canvas){position:relative;z-index:1}
.auth-stage .auth-panel{border:1px solid #E6EAE5;border-radius:13px;box-shadow:0 24px 64px #2030281a,0 2px 6px #2030280d}
.auth-stage .auth-brand{color:#202C28}.auth-stage .auth-brand span{background:#214E3F}
.auth-stage .auth-primary{background:#214E3F}.auth-stage .auth-primary:hover{background:#2E6452}
.auth-stage .auth-subtitle,.auth-stage .auth-copy{color:#7A827E}
.auth-stage .auth-feedback:not(:empty){background:#F8EEE9;color:#9D482D}
.auth-stage .auth-field input{border-color:#E6EAE5;background:#fff}
.auth-stage .auth-footer{color:#A6ADA9;letter-spacing:.2em}
@media(max-width:600px){.auth-stage .auth-panel{border-radius:13px}}

/* 右上角头像菜单与账号页头像（Relay 规范：墨绿操作、细描边、陶土橙悬停） */
.studio-profile-slot{margin-left:auto;flex:0 0 auto;position:relative}
.profile-menu{position:relative}
.profile-trigger{display:flex;align-items:center;gap:12px;min-height:48px;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:999px;text-align:left}
.profile-trigger:focus-visible{outline:2px solid #214E3F;outline-offset:3px}
.profile-trigger .profile-avatar,.auth-avatar{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;overflow:hidden;background:#EAF0E5;border:1px solid #E6EAE5;color:#214E3F;font-size:18px;font-weight:600;flex:0 0 auto}
.profile-trigger .profile-avatar img,.auth-avatar img{display:block;width:100%;height:100%;object-fit:cover;transform:none}
.profile-name{display:grid;line-height:1.4;font-size:15px;font-weight:500;white-space:nowrap}
.profile-name small{font-size:13px;font-weight:400;color:#5c6560}
.profile-popover{position:absolute;right:0;top:calc(100% + 10px);z-index:60;min-width:220px;background:#fff;border:1px solid #E6EAE5;border-radius:12px;padding:8px;box-shadow:0 16px 40px #1d392814}
.profile-popover[hidden]{display:none}
.profile-card{display:grid;gap:2px;padding:10px 12px 12px;border-bottom:1px solid #E6EAE5;margin-bottom:6px}
.profile-card strong{font-size:14px}.profile-card small{font-size:12px;color:#7A827E;overflow-wrap:anywhere}
.profile-popover a,.profile-popover button{display:block;width:100%;box-sizing:border-box;padding:10px 12px;border:0;border-radius:8px;background:transparent;color:#202C28;font:inherit;font-size:13px;text-align:left;text-decoration:none;cursor:pointer}
.profile-popover a:hover,.profile-popover button:hover,.profile-popover a:focus-visible,.profile-popover button:focus-visible{background:#F8EEE9;color:#9D482D;outline:none}
.auth-avatar-row{display:flex;align-items:center;gap:16px;margin:0 0 22px}
.auth-avatar-row small{display:block;font-size:11px;line-height:1.6;color:var(--auth-muted);margin-top:4px}
.auth-avatar-pick{display:inline-block;cursor:pointer;border:1px solid var(--auth-line);border-radius:8px;padding:8px 14px;font-size:12px;color:#45634e}
.auth-avatar-pick:hover{background:#F8EEE9;border-color:#DFAA96;color:#9D482D}
.auth-avatar-row .auth-link{display:block;margin-top:6px}
@media(max-width:767px){.profile-name{display:none}.profile-popover{right:-4px}}

/* 匿名浏览：右上角登录入口与登录引导弹窗 */
.anonymous-profile{display:flex;align-items:center;gap:10px}
.anonymous-login,.anonymous-register{display:inline-flex;align-items:center;height:36px;padding:0 16px;border-radius:8px;font-size:13px;text-decoration:none;white-space:nowrap}
.anonymous-login{background:#214E3F;color:#fff}.anonymous-login:hover{background:#2E6452}
.anonymous-register{border:1px solid #E6EAE5;color:#214E3F;background:#fff}.anonymous-register:hover{background:#F8EEE9;border-color:#DFAA96;color:#9D482D}
.login-prompt-backdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:24px;background:#20302866}
.login-prompt{width:min(100%,380px);box-sizing:border-box;padding:28px;border:1px solid #E6EAE5;border-radius:16px;background:#fff;box-shadow:0 20px 56px #1d392824}
.login-prompt h2{margin:0 0 8px;font-size:20px;color:#202C28}
.login-prompt p{margin:0 0 22px;font-size:13px;line-height:1.7;color:#7A827E}
.login-prompt-actions{display:flex;flex-wrap:wrap;gap:10px}
.login-primary,.login-secondary,.login-dismiss{display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 18px;border-radius:8px;font:inherit;font-size:13px;text-decoration:none;cursor:pointer}
.login-primary{border:0;background:#214E3F;color:#fff}.login-primary:hover{background:#2E6452}
.login-secondary{border:1px solid #E6EAE5;background:#fff;color:#214E3F}.login-secondary:hover{background:#F8EEE9;border-color:#DFAA96;color:#9D482D}
.login-dismiss{border:0;background:transparent;color:#7A827E;margin-left:auto}.login-dismiss:hover{color:#202C28}
@media(max-width:767px){.anonymous-register{display:none}}
/* 素材免费层：第 10 条之后模糊几张真实卡片，叠深色渐变浮层（7 号方案） */
.paywall-locked{position:relative;grid-column:1/-1;display:grid;grid-template-columns:inherit;gap:inherit}
.paywall-cards{display:grid;grid-column:1/-1;grid-template-columns:inherit;gap:inherit}
.paywall-cards .reading-material{filter:blur(5px);opacity:.5;pointer-events:none;user-select:none}
.paywall-mask{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:24px;background:linear-gradient(#202C2800,#202C28ee 40%);border-radius:12px}
.paywall-card{width:min(100%,380px);box-sizing:border-box;padding:28px;text-align:left}
.paywall-card h3{margin:0 0 8px;font-size:20px;color:#fff}
.paywall-card p{margin:0 0 22px;font-size:13px;line-height:1.7;color:#c8d0cb}
.paywall-card .login-secondary{background:transparent;color:#fff;border-color:#ffffff55}
.paywall-card .login-primary{cursor:pointer}
.paywall-qr{width:140px;height:140px;margin:0 0 16px;border:1px dashed #CFD6CE;border-radius:12px;display:grid;place-items:center;color:#9AA39A;font-size:12px;text-align:center}
[data-paywall-prompt] .login-primary{cursor:pointer}
/* 会员：开通弹窗、扫码支付、会员中心（定稿见 paywall-playground/member-flow.html） */
.login-prompt.mb-wide{width:min(100%,760px)}.login-prompt.mb-pay{width:min(100%,420px);text-align:center}
.mb-plans{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 0 16px}
.mb-plan{position:relative;display:flex;flex-direction:column;gap:6px;padding:18px 16px;border:1px solid #E6EAE5;border-radius:12px;background:#fff;text-align:left;cursor:pointer;font:inherit}
.mb-plan[aria-checked=true]{border-color:#214E3F;box-shadow:0 0 0 1px #214E3F;background:#F6F9F5}
.mb-plan[disabled]{opacity:.5;cursor:not-allowed}
.mb-plan b{font-size:14px;color:#202C28}.mb-plan .mb-price{font:600 28px/1.1 GeistMono,ui-monospace,monospace;color:#202C28}.mb-plan .mb-price small{font-size:13px;font-weight:400;color:#7A827E}
.mb-plan span{font-size:12px;color:#7A827E;line-height:1.6}
.mb-badge{position:absolute;top:-9px;right:12px;padding:1px 8px;border-radius:999px;background:#9D482D;color:#fff;font-size:11px}
.mb-perks{list-style:none;margin:0 0 16px;padding:12px 14px;display:grid;grid-template-columns:1fr 1fr;gap:6px 16px;border-radius:10px;background:#F7F8F6;font-size:13px;color:#4f5b55}.mb-perks li::before{content:"✓";margin-right:8px;color:#214E3F;font-weight:700}
.mb-agree{display:flex;gap:8px;align-items:flex-start;margin:0 0 16px;font-size:12px;color:#7A827E;line-height:1.6}.mb-agree a{color:#214E3F}
.mb-agree[data-error]{color:#a33f2b}
.mb-sum{display:flex;align-items:baseline;gap:8px;margin-right:auto;font-size:13px;color:#7A827E}.mb-sum b{font:600 22px GeistMono,monospace;color:#9D482D}
.mb-qr{width:188px;height:188px;margin:4px auto 14px;padding:10px;border:1px solid #E6EAE5;border-radius:12px;background:#fff;position:relative}
.mb-qr svg{width:100%;height:100%;display:block}
.mb-qr[data-state] svg{opacity:.12}
.mb-qr-cover{position:absolute;inset:0;display:grid;place-items:center;align-content:center;gap:8px;font-size:13px;color:#202C28}
.mb-qr-cover .login-primary{height:34px}
.mb-amount{font:600 30px GeistMono,monospace;color:#202C28;margin:0 0 4px}
.mb-meta{font-size:12px;color:#7A827E;margin:0 0 14px}
.mb-dev{display:inline-block;margin:0 0 14px;padding:4px 8px;border:1px dashed #DFAA96;border-radius:6px;font-size:12px;color:#9D482D;background:#FBF4F0;cursor:pointer}
.mb-icon{width:52px;height:52px;margin:0 auto 12px;border-radius:50%;display:grid;place-items:center;font-size:26px;color:#fff;background:#3f7a5c}.mb-icon[data-tone=err]{background:#a33f2b}.mb-icon[data-tone=warn]{background:#b7892e}
.mb-pay .login-prompt-actions{justify-content:center}.mb-pay .login-dismiss{margin-left:0}
.mb-skeleton{height:150px;border-radius:12px;background:linear-gradient(90deg,#f2f4f1,#e9ece7,#f2f4f1);background-size:200% 100%;animation:mbsk 1.2s infinite}@keyframes mbsk{to{background-position:-200% 0}}
.pw-member-badge{margin-left:6px;padding:1px 6px;border-radius:4px;background:#EAF0E5;color:#214E3F;font-size:11px;font-weight:600}
.pw-member-badge[data-tone=warn]{background:#FBF0DD;color:#8a6417}
.mb-banner{display:flex;align-items:center;gap:12px;margin:0 0 16px;padding:10px 14px;border:1px solid #F0DCD2;border-radius:10px;background:#FBF4F0;color:#9D482D;font-size:13px}
.mb-banner .login-primary{margin-left:auto;height:32px;font-size:12px}
.mb-toast{position:fixed;top:24px;left:50%;transform:translateX(-50%);z-index:200;padding:10px 18px;border-radius:10px;background:#202C28;color:#fff;font-size:14px;box-shadow:0 12px 32px #0003}
.mb-status{display:flex;align-items:center;gap:14px;padding:16px;margin:0 0 6px;border-radius:12px;background:#F6F9F5}
.mb-status b{font-size:16px;color:#202C28}.mb-status small{display:block;margin-top:2px;font-size:13px;color:#7A827E}
.mb-status[data-tone=warn]{background:#FBF4F0}.mb-status[data-tone=warn] b{color:#9D482D}
.mb-status[data-tone=off]{background:#F4F5F3}
.mb-orders{width:100%;border-collapse:collapse;font-size:13px}.mb-orders th,.mb-orders td{padding:10px 8px;border-bottom:1px solid #f0f2ee;text-align:left}.mb-orders th{color:#7A827E;font-weight:400}
.mb-plans{margin-top:4px}@media (max-width:640px){.mb-plans{grid-template-columns:1fr}.mb-perks{grid-template-columns:1fr}}
.paywall-expired{margin:0 0 12px;font-size:13px;color:#9D482D}
/* 会员后台 */
.admin-page h2{margin:12px 0 16px;font-size:22px}.admin-page h3{margin:28px 0 10px;font-size:16px}
.admin-tabs,.admin-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:0 0 18px}
.admin-input{height:40px;padding:0 12px;border:1px solid #dfe5de;border-radius:8px;background:#fff;font-size:14px;min-width:0}
.admin-filters select{height:40px;border:1px solid #dfe5de;border-radius:8px;padding:0 10px;max-width:none}
.admin-table td{padding:14px 16px;white-space:normal}.admin-sub{display:block;font-size:12px;color:#7A827E}
.admin-chip{display:inline-block;padding:2px 8px;border-radius:6px;background:#EAF0E5;color:#214E3F;font-size:12px}.admin-chip[data-tone=off]{background:#F4F5F3;color:#7A827E}.admin-chip[data-tone=err]{background:#FBF0EC;color:#a33f2b}
.admin-grid{display:grid;grid-template-columns:minmax(260px,1fr) minmax(320px,1.3fr);gap:24px}@media (max-width:900px){.admin-grid{grid-template-columns:1fr}}
.admin-ops{display:grid;gap:10px}.admin-op{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px;border:1px solid #eef0ec;border-radius:10px}.admin-op>b{width:72px;font-size:13px}.admin-op .admin-input{flex:1}.admin-op button{height:40px;padding:0 14px;border-radius:8px}.admin-op .action.danger{color:#a33f2b}
.admin-audit{list-style:none;margin:0;padding:0;font-size:13px}.admin-audit li{padding:8px 0;border-bottom:1px solid #f0f2ee}.admin-audit small{color:#7A827E;margin-left:6px}.admin-audit span{display:block;color:#4f5b55}
.admin-products{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.admin-product{display:grid;gap:8px;padding:16px;border:1px solid #eef0ec;border-radius:12px}
