/* 原版 style.css 原封不动。夜间直接沿用原版，仅 data-theme=light 时覆盖颜色。 */
:root { --ui-accent:#00e866; --ui-link:#147a40; --ui-surface:#fff; --ui-soft:#f5f5f5; --ui-ink:#111; --ui-muted:#666; --ui-line:#ccc; --ui-banner:#111; --ui-banner-ink:#ddd; --ui-banner-muted:#999; --ui-button-ink:#111; }
:root[data-theme="light"] { --ui-accent:#286642; --ui-link:#286642; --ui-surface:#fff; --ui-soft:#eef3ec; --ui-ink:#25382c; --ui-muted:#5e6e63; --ui-line:#ccd7cc; --ui-banner:#edf3e9; --ui-banner-ink:#25382c; --ui-banner-muted:#5e6e63; --ui-button-ink:#fff; }
/* 日间只更换颜色，不改变字体、宽高、间距和布局。 */
:root[data-theme="light"] body { background-color:#f7f9f5; color:var(--ui-ink); }
:root[data-theme="light"] :is(.header,.hero,.message-title,.detail-title,.footer) { background-color:var(--ui-banner); color:var(--ui-banner-ink); border-color:var(--ui-line); }
:root[data-theme="light"] :is(.logo,.small-title,.message-title .small-title,.detail-title .small-title,.card span) { color:var(--ui-accent); }
:root[data-theme="light"] .nav a { color:var(--ui-muted); }
:root[data-theme="light"] :is(.nav a:hover,.nav a.active) { color:var(--ui-accent); border-color:var(--ui-accent); }
:root[data-theme="light"] :is(.hero-text,.message-title p,.detail-title p,.footer,.label,.card p,.detail-box p,.field-hint,.message-form #messageHint,.message-date) { color:var(--ui-muted); }
:root[data-theme="light"] :is(.about-table,.card,.message-form,.message-show,.detail-box,.detail-table,.skill-table,.simple-list,.register-form,.account-form) { background-color:var(--ui-surface); border-color:var(--ui-line); }
:root[data-theme="light"] :is(.about-table td,.detail-table td,.skill-table td,.skill-table th,#skills,.section h2,.detail-main h2,.register-form h2,.account-form h2,.message-form h2,.message-show h2) { border-color:var(--ui-line); }
:root[data-theme="light"] :is(.about-table td:hover,.introduction,.skill-table th,.register-note,.auth-notice,.question-text,#messageList) { background-color:var(--ui-soft); border-color:var(--ui-accent); color:var(--ui-ink); }
:root[data-theme="light"] :is(.register-note p,.register-note li,.auth-notice p) { color:var(--ui-muted); }
:root[data-theme="light"] :is(.button,.primary-button,#submitButton) { background-color:var(--ui-accent); color:var(--ui-button-ink); border-color:var(--ui-accent); }
:root[data-theme="light"] :is(.button:hover,.primary-button:hover,#submitButton:hover) { background-color:var(--ui-surface); color:var(--ui-accent); }
:root[data-theme="light"] :is(.detail-button,.secondary-button) { background-color:var(--ui-surface); border-color:var(--ui-line); color:var(--ui-ink); }
:root[data-theme="light"] :is(.detail-button:hover,.secondary-button:hover) { background-color:var(--ui-soft); border-color:var(--ui-accent); color:var(--ui-ink); }
:root[data-theme="light"] :is(.detail-button span,.detail-button:hover span,.back-button,.text-button,.account-links a,.member-notice p) { color:var(--ui-accent); }
:root[data-theme="light"] :is(.back-button,.introduction,.detail-box,.register-note) { border-color:var(--ui-accent); }
:root[data-theme="light"] :is(.form-field input,.form-field select,#userName,#messageContent) { background-color:var(--ui-surface); color:var(--ui-ink); border-color:var(--ui-line); }
:root[data-theme="light"] :is(.form-field select:disabled,#messageFields:disabled input,#messageFields:disabled textarea,#userName[readonly]) { background-color:var(--ui-soft); color:var(--ui-muted); }
:root[data-theme="light"] :is(.message-item h3,.message-body) { color:var(--ui-ink); }
:root[data-theme="light"] .card:hover { border-color:var(--ui-accent); }
:root[data-theme="light"] #mouseDot { background-color:var(--ui-accent); }
/* 主题按钮脱离排版，不挤压原来的 Logo 和导航。 */
.theme-toggle { position:absolute; top:103px; right:28px; z-index:15; padding:9px 17px; background:var(--ui-banner); color:var(--ui-accent); border:1px solid var(--ui-accent); font-size:14px; line-height:1.5; }
.theme-toggle:hover { box-shadow:0 0 0 3px color-mix(in srgb,var(--ui-accent) 18%,transparent); }
/* 光标为窄色块，用连续透明度变化表现若隐若现。 */
.hero-text { min-height:1.8em; }
#typewriter { line-height:inherit; }
.typing-cursor { display:inline-block; width:2px; height:var(--caret-height,.85em); vertical-align:var(--caret-offset,-.1em); margin-left:5px; background:currentColor; animation:caret-breathe 1.05s ease-in-out infinite; }
@keyframes caret-breathe { 0%,100% { opacity:1; } 50% { opacity:.06; } }
/* 访客面板追加在原页脚之后。 */
.visitor-info { padding:28px 80px 35px; background:var(--ui-banner); color:var(--ui-banner-ink); border-top:1px solid #333; font-size:14px; }
:root[data-theme="light"] .visitor-info { border-color:var(--ui-line); }
.visitor-info h2 { font-size:18px; margin-bottom:15px; color:var(--ui-accent); }
.visitor-grid { display:grid; grid-template-columns:2fr 1fr 1fr 1fr; gap:20px; }
.visitor-grid dt { font-size:12px; color:var(--ui-banner-muted); }
.visitor-grid dd { overflow-wrap:anywhere; }
.visit-summary { display:flex; gap:36px; margin-top:20px; color:var(--ui-accent); }
.visitor-note { font-size:12px; color:var(--ui-banner-muted); margin-top:8px; }
/* 淡入/淡出各450ms；淡出结束后才隐藏可见性。 */
.back-to-top { position:fixed; bottom:28px; right:28px; z-index:20; padding:10px 16px; display:grid; background:var(--ui-banner); color:var(--ui-accent); border:1px solid var(--ui-accent); box-shadow:0 4px 18px #00000026; font-size:23px; opacity:0; visibility:hidden; pointer-events:none; transform:translateY(14px); transition:opacity .45s ease,transform .45s ease,visibility 0s linear .45s; }
.back-to-top span { font-size:11px; }
.back-to-top.is-visible { opacity:1; visibility:visible; pointer-events:auto; transform:translateY(0); transition-delay:0s; }
.back-to-top:hover { box-shadow:0 6px 24px #00000040; }
/* 本地留言区域沿用原来的白卡片、方角与绿色边线。 */
.local-board { width:1100px; box-sizing:border-box; margin:0 auto 30px; padding:30px; background:var(--ui-surface); border:1px solid var(--ui-line); color:var(--ui-ink); }
.local-board-heading,.local-history-heading { display:flex; justify-content:space-between; align-items:center; gap:24px; }
.local-board-heading .small-title { margin-bottom:6px; font-size:12px; color:var(--ui-link); }
.local-board-heading h2 { font-size:26px; }
.local-badge { border:1px solid var(--ui-line); padding:5px 12px; color:var(--ui-muted); font-size:12px; }
.local-description { color:var(--ui-muted); font-size:14px; margin-top:18px; max-width:880px; }
.local-board-grid { display:grid; grid-template-columns:1fr 1fr; gap:42px; margin-top:28px; }
#localMessageForm label { display:block; margin-bottom:7px; font-size:14px; font-weight:bold; }
#localMessageForm input,#localMessageForm textarea { box-sizing:border-box; width:100%; padding:10px 12px; border:1px solid var(--ui-line); font-size:15px; font-family:inherit; background:var(--ui-surface); color:var(--ui-ink); }
#localMessageForm input { margin-bottom:18px; }
#localMessageForm textarea { resize:vertical; }
#localMessageForm .primary-button { margin-top:20px; background:var(--ui-accent); color:var(--ui-button-ink); border-color:var(--ui-accent); }
.local-history { padding:20px 24px; background:var(--ui-soft); align-self:start; }
.local-history-heading { margin-bottom:18px; font-size:14px; }
.local-history-heading h3 { font-size:17px; }
.local-history-heading span { color:var(--ui-muted); }
.local-message-item { position:relative; padding:16px 0; border-top:1px solid var(--ui-line); }
.local-message-item h3 { padding-right:55px; overflow-wrap:anywhere; font-size:16px; }
.local-message-item .message-body { font-size:14px; }
.local-delete { position:absolute; top:18px; right:0; color:#a5362e; }
.board-navigation { width:1100px; margin:0 auto 55px; display:flex; align-items:center; gap:14px; }
.board-navigation p { color:var(--ui-muted); font-size:13px; margin-left:12px; }
/* 交互只使用transform，不改变盒模型尺寸。 */
.card { transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease; }
.card:hover,.card:focus-visible { transform:translateY(-6px); }
.card:active { transform:translateY(-1px) scale(.992); }
.has-click-feedback { position:relative; isolation:isolate; }
.theme-toggle.has-click-feedback { position:absolute; }
.back-to-top.has-click-feedback { position:fixed; }
.local-delete.has-click-feedback { position:absolute; }
.has-click-feedback:active:not(:disabled) { translate:0 2px; }
.has-click-feedback .click-feedback-clip { position:absolute; inset:0; overflow:hidden; pointer-events:none; margin:0; display:block; transform:none; }
.click-wave { position:absolute; width:12px; height:12px; margin:-6px; border-radius:50%; background:currentColor; opacity:.25; pointer-events:none; animation:click-expand .55s ease-out forwards; }
@keyframes click-expand { to { transform:scale(35); opacity:0; } }
.reveal-ready { opacity:0; transform:translateY(16px); transition:opacity .6s ease var(--reveal-delay,0s),transform .6s ease var(--reveal-delay,0s); }
.reveal-ready.is-revealed { opacity:1; transform:none; }
.card.reveal-ready.is-revealed:hover { transform:translateY(-6px); }
.message-enter { animation:message-appear .35s ease-out; }
@keyframes message-appear { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:none; } }
.reading-progress { position:fixed; top:0; left:0; width:100%; height:2px; background:var(--ui-accent); transform:scaleX(0); transform-origin:left; pointer-events:none; z-index:100; }
.interaction-toast { position:fixed; bottom:32px; left:50%; translate:-50% 0; padding:9px 20px; background:var(--ui-banner); color:var(--ui-banner-ink); border:1px solid var(--ui-accent); z-index:30; font-size:14px; opacity:0; visibility:hidden; transform:translateY(8px); pointer-events:none; transition:opacity .25s ease,transform .25s ease,visibility .25s; }
.interaction-toast.is-visible { opacity:1; visibility:visible; transform:translateY(0); }
:focus-visible { outline:2px solid var(--ui-link); outline-offset:4px; }
@media (prefers-reduced-motion:reduce) {
    /* 降低位移；保留要求的光标透明度变化和回顶按钮淡入。 */
    .reveal-ready { opacity:1; transform:none; transition:none; }
    .card:hover,.card:focus-visible { transform:none; }
    .typing-cursor { animation-duration:1.8s; }
}
