:root{--ink:#332b3e;--plum:#3d3349;--mute:#7c7090;--lav:#9c8fb0;--bg:#f8f5fa;--card:#fcfafd;--fill:#ece4f2;--fill2:#f3eef8;--line:#e6deee;--gold:#c0aed4;--accent:#9a6a8c;--green:#7e9a78}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.6 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}button,input{font:inherit}button{cursor:pointer}.app-shell{display:flex;min-height:100vh}.sidebar{width:238px;flex:none;padding:42px 28px 30px;border-right:1px solid var(--line);background:#fcfafdba;display:flex;flex-direction:column;justify-content:space-between}.brand{display:flex;align-items:baseline;gap:10px;font:22px Georgia,"Songti SC",serif;letter-spacing:7px}.brand small{font:9px -apple-system,sans-serif;color:var(--lav);letter-spacing:2px}.tagline{margin:12px 0 0;color:var(--lav);font-size:12px;letter-spacing:2px}.side-nav{margin-top:78px;display:flex;flex-direction:column;gap:8px}.nav-item{border:0;background:transparent;color:var(--mute);padding:13px 14px;border-radius:12px;text-align:left;display:flex;align-items:center;gap:12px}.nav-item.active{background:var(--fill);color:var(--plum)}.nav-icon{width:18px;text-align:center;font-size:18px}.nav-item small{margin-left:auto;color:var(--accent)}.work-status{border-top:1px solid var(--line);padding-top:20px}.work-status p,.work-status small{margin:0;color:var(--lav);font-size:11px;letter-spacing:1px}.work-status strong{display:block;margin:8px 0 13px;font-size:13px;font-weight:500}.progress,.thin-progress{height:4px;border-radius:10px;background:var(--line);overflow:hidden}.progress i{display:block;width:68%;height:100%;background:var(--accent)}.main{min-width:0;flex:1;display:flex;flex-direction:column}.topbar{height:112px;padding:30px 6vw 18px;display:flex;justify-content:space-between;align-items:center}.eyebrow{color:var(--lav);font-size:11px;letter-spacing:2px}.topbar h1{margin:8px 0 0;font:26px Georgia,"Songti SC",serif}.top-actions{display:flex;align-items:center;gap:18px}.icon-button{border:1px solid var(--line);background:transparent;border-radius:50%;width:32px;height:32px;color:var(--lav)}.avatar,.big-avatar{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--fill);color:var(--mute);font:18px Georgia,"Songti SC",serif}.content,footer{width:min(1060px,calc(100% - 12vw));margin-left:auto;margin-right:auto}.content{margin-top:30px;margin-bottom:60px;flex:1}.hero-grid{display:grid;grid-template-columns:1.65fr 1fr;gap:18px}.card,.quote-card{border:1px solid var(--line);border-radius:18px;background:var(--card)}.income-card{padding:30px 34px 27px}.card-head,.meta-row,.section-head,.obs-head,.lower-grid,.identity,.profile-grid,.memory-card,.config-card{display:flex;align-items:center}.card-head{justify-content:space-between}.live{color:var(--green);font-size:11px}.income{margin-top:28px;color:var(--accent);font:18px Georgia,"Songti SC",serif}.income strong{font-size:55px;color:var(--ink);letter-spacing:-2px}.muted,.section-head p,.page-intro p,.identity p,.memory-card p{color:var(--lav);font-size:12px}.meta-row{margin-top:34px;padding-top:20px;border-top:1px solid var(--line);gap:44px}.meta-row small{display:block;color:var(--lav);font-size:11px}.meta-row strong{display:block;margin-top:6px;font-size:14px;font-weight:500}.outline-button,.text-button{border:1px solid #d7ccdf;border-radius:18px;background:transparent;color:var(--mute);font-size:12px;padding:6px 15px;margin-left:auto}.quote-card{padding:30px 28px;background:var(--fill2);display:flex;flex-direction:column;justify-content:center}.quote-mark{font:50px/0 Georgia;color:var(--gold)}.quote-card h2{margin:18px 0 0;font:22px Georgia,"Songti SC",serif}.quote-card p{margin:12px 0;color:var(--lav);font-size:12px}.quote-line{width:42px;border-top:1px solid var(--gold);margin:18px 0 14px}.quote-card small{color:var(--lav)}.section-head{justify-content:space-between;margin:48px 0 18px}.section-head h2,.page-intro h2{margin:0;font:24px Georgia,"Songti SC",serif}.section-head p{margin:6px 0 0}.text-button{border:0;color:var(--accent)}.observation-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.observation{padding:22px;min-height:144px;transition:.2s}.observation:hover,.observation.open{border-color:var(--gold);background:#fdfbfe}.obs-head{justify-content:flex-start;gap:10px}.obs-index{color:var(--gold);font-size:12px}.obs-tag{color:var(--accent);font-size:12px}.obs-head b{margin-left:auto;color:var(--lav);font-size:18px;font-weight:400}.observation h3{margin:25px 0 0;font:16px/1.65 Georgia,"Songti SC",serif}.observation p{margin:14px 0 0;color:var(--lav);font-size:12px;line-height:1.7}.lower-grid{gap:14px;margin-top:14px}.checkin,.vault{flex:1;padding:22px;min-height:100px;justify-content:space-between}.checkin h3{margin:10px 0 0;font:18px Georgia,"Songti SC",serif}.dark-button{border:0;border-radius:20px;background:var(--plum);color:#f2ecf7;padding:9px 18px;font-size:12px}.vault strong{display:block;margin-top:10px;font-size:20px;font-weight:500}.vault strong small{color:var(--lav);font-size:12px}.thin-progress{margin-top:17px}.thin-progress i{display:block;width:24%;height:100%;background:var(--accent)}.vault p{margin:7px 0 0;color:var(--lav);font-size:12px}.page-intro{margin:45px 0 28px}.page-intro h2{font-size:40px;margin-top:10px}.page-intro p{font-size:14px;margin-top:10px}.book-card{padding:30px}.identity{gap:16px}.big-avatar{width:58px;height:58px;font-size:20px}.identity h3,.profile-card h3{margin:0;font:20px Georgia,"Songti SC",serif}.identity p{margin:7px 0}.identity span{color:var(--accent);font-size:12px}.pillars{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:30px}.pillars div{padding:18px 12px;border-top:1px solid var(--line)}.pillars small{color:var(--lav)}.pillars strong{display:block;margin-top:10px;font:24px Georgia,"Songti SC",serif}.report-list,.settings{margin-top:14px;padding:0 25px}.report-row,.setting-row{width:100%;border:0;border-bottom:1px solid var(--line);background:transparent;padding:21px 0;display:flex;align-items:center;gap:18px;text-align:left}.report-row:last-child,.setting-row:last-child{border-bottom:0}.report-row>small{color:var(--gold)}.report-row span,.setting-row span{display:flex;flex-direction:column;gap:6px}.report-row b,.setting-row b{font:16px Georgia,"Songti SC",serif;font-weight:400}.report-row em,.setting-row em{color:var(--lav);font-size:12px;font-style:normal}.report-row>strong,.setting-row>strong{margin-left:auto;color:var(--lav)}.profile-grid{align-items:stretch;gap:14px}.profile-card{width:260px;padding:28px;text-align:center}.profile-card .big-avatar{margin:0 auto 18px}.profile-card p{color:var(--lav);font-size:12px}.profile-card .dark-button{width:100%;margin-top:14px}.settings{flex:1;margin-top:0}.config-card,.memory-card{margin-top:14px;padding:23px;justify-content:space-between;gap:18px}.config-card h3,.memory-card h3{margin:8px 0 0;font:17px Georgia,"Songti SC",serif}.config-card label{color:var(--lav);font-size:11px}.config-card input{display:block;width:100px;margin-top:5px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:7px 9px;color:var(--ink)}.memory-card p{margin:6px 0 0;max-width:520px}.toggle{width:42px;height:24px;border:0;border-radius:20px;background:var(--line);padding:3px}.toggle i{display:block;width:18px;height:18px;border-radius:50%;background:#fff;transition:.2s}.toggle.on{background:var(--accent)}.toggle.on i{transform:translateX(18px)}footer{display:flex;justify-content:space-between;margin-top:auto;margin-bottom:26px;color:#b3a6bd;font-size:11px}@media(max-width:800px){.sidebar{width:76px;padding:28px 12px;align-items:center}.brand{writing-mode:vertical-rl;letter-spacing:4px}.brand small,.tagline,.nav-item span:not(.nav-icon),.work-status{display:none}.side-nav{margin-top:55px}.nav-item{padding:12px}.topbar{padding:24px 5vw 14px}.content,footer{width:calc(100% - 10vw)}.hero-grid,.observation-grid,.profile-grid{grid-template-columns:1fr}.lower-grid{display:grid;grid-template-columns:1fr}.quote-card{min-height:190px}.profile-card{width:auto}.config-card,.memory-card{align-items:flex-start;flex-wrap:wrap}footer{flex-direction:column;gap:10px}}
 .profile-form{display:flex;align-items:center;gap:18px;margin-top:14px;padding:23px;flex-wrap:wrap}.profile-form h3{margin:8px 0 0;font:17px Georgia,"Songti SC",serif}.profile-form label{color:var(--lav);font-size:11px}.profile-form input,.profile-form select{display:block;width:145px;margin-top:5px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:7px 9px;color:var(--ink)}.profile-form .dark-button{margin-left:auto}.danger-button{border:0;background:transparent;color:var(--accent);font-size:12px;margin-top:18px;padding:0}.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--plum);color:#f2ecf7;border-radius:24px;padding:10px 18px;font-size:12px;box-shadow:0 8px 24px #332b3e22;z-index:4}.loading-state{padding-top:80px}.skeleton{width:70%;height:100px;border-radius:18px;background:linear-gradient(90deg,var(--fill2),#fff,var(--fill2));background-size:200% 100%;animation:shimmer 1.4s infinite}.skeleton.short{width:42%;height:16px;margin-top:18px}.loading-state p{color:var(--lav);font-size:12px}@keyframes shimmer{to{background-position:-200% 0}}
.state-panel{padding-top:90px}.state-panel h2{font:32px Georgia,"Songti SC",serif;margin:12px 0}.state-panel p{max-width:480px;color:var(--lav);font-size:13px;margin-bottom:24px}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}
.modal-backdrop{position:fixed;inset:0;background:#332b3e55;display:flex;align-items:center;justify-content:center;padding:20px;z-index:10}.detail-modal{position:relative;width:min(520px,100%);border:1px solid var(--line);border-radius:20px;background:var(--card);padding:30px;box-shadow:0 20px 60px #332b3e33}.modal-close{position:absolute;right:20px;top:18px;border:0;background:transparent;color:var(--lav);font-size:24px}.detail-modal h2{margin:12px 0 6px;font:25px Georgia,"Songti SC",serif}.modal-status{color:var(--accent);font-size:12px}.modal-status.ok{color:var(--green)}.modal-status.fail{color:#b35959}.modal-status.warn{color:#a0863a}.modal-status.off{color:var(--lav)}.report-modal-actions{margin-top:18px;display:flex;justify-content:flex-end}.report-modal-actions .dark-button{margin-left:0}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:24px 0}.detail-grid div{padding:15px;border-top:1px solid var(--line)}.detail-grid small,.detail-grid strong{display:block}.detail-grid small{color:var(--lav);font-size:11px}.detail-grid strong{margin-top:6px;font-size:13px;font-weight:500}.modal-copy{padding:15px;background:var(--fill2);border-radius:10px;color:var(--mute);font-size:13px}.modal-source{color:var(--lav);font-size:11px}
.generate-button{margin-top:16px}
.history-modal{max-height:min(650px,85vh);overflow:auto}.history-list{margin-top:20px;border-top:1px solid var(--line)}.history-row{display:grid;grid-template-columns:1fr auto;gap:4px 16px;padding:15px 0;border-bottom:1px solid var(--line)}.history-row span{font-size:13px}.history-row span small{display:block;color:var(--green);font-size:10px;margin-top:3px}.history-row strong{font-size:15px;font-weight:500}.history-row em{grid-column:1/-1;color:var(--lav);font-size:10px;font-style:normal}.history-empty{display:flex;flex-direction:column;gap:8px;padding:32px 0;color:var(--mute)}.history-empty span{color:var(--lav);font-size:12px}
.checkin-controls{display:flex;gap:6px;flex-wrap:wrap;margin-top:14px}.mood-chip{border:1px solid var(--line);background:transparent;border-radius:16px;color:var(--mute);font-size:11px;padding:5px 10px}.mood-chip.selected{border-color:var(--accent);background:var(--fill2);color:var(--accent)}
.control-group{display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%;margin-top:5px}.control-group small{width:45px;color:var(--lav);font-size:10px}
[data-theme="dark"]{--ink:#eee8f4;--plum:#d8c4e8;--mute:#b9acc5;--lav:#9c8faa;--bg:#211d27;--card:#2a2432;--fill:#382e42;--fill2:#30283a;--line:#493d54;--gold:#bca2ce;--accent:#d29abb;--green:#9cc08f}[data-theme="dark"] .sidebar{background:#28222fdd}[data-theme="dark"] .config-card input,[data-theme="dark"] .profile-form input,[data-theme="dark"] .profile-form select{background:var(--card);color:var(--ink)}[data-theme="dark"] .observation:hover,[data-theme="dark"] .observation.open{background:#30283a}[data-theme="dark"] .skeleton{background:linear-gradient(90deg,var(--fill2),#40364a,var(--fill2))}
.setup-form{display:flex;flex-direction:column;align-items:flex-start;gap:14px;max-width:560px}.setup-form label{width:100%;color:var(--lav);font-size:12px}.setup-form input,.setup-form select{display:block;width:100%;margin-top:5px;border:1px solid var(--line);border-radius:8px;background:var(--card);padding:9px;color:var(--ink)}
.obs-subtitle{display:block;margin-top:10px;color:var(--lav);font-size:11px}.compact-head{margin-top:34px;margin-bottom:14px}.seasonal-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.seasonal{min-height:160px}.book-sections,.timeline{margin-top:14px;padding:0 25px}.book-section{width:100%;border:0;border-bottom:1px solid var(--line);background:transparent;padding:17px 0;display:flex;align-items:center;gap:16px;text-align:left}.book-section:last-of-type{border-bottom:0}.book-section>small{color:var(--gold)}.book-section span{display:flex;flex-direction:column;gap:4px}.book-section b{font:16px Georgia,"Songti SC",serif;font-weight:400}.book-section em{font-style:normal;color:var(--lav);font-size:12px}.book-section>strong{margin-left:auto;color:var(--lav)}.book-section.active b{color:var(--accent)}.book-section-detail{border-top:1px solid var(--line);padding:22px 0 8px}.book-section-detail h3{margin:0;font:18px Georgia,"Songti SC",serif}.book-section-detail p{color:var(--lav);font-size:13px;line-height:1.8;margin:10px 0}.timeline{padding-bottom:10px}.timeline-head{display:flex;justify-content:space-between;align-items:center;padding:21px 0 13px;border-bottom:1px solid var(--line)}.timeline-head span{display:flex;flex-direction:column;gap:4px}.timeline-head b{font:16px Georgia,"Songti SC",serif;font-weight:400}.timeline-head em,.timeline-head small,.timeline-row em{font-style:normal;color:var(--lav);font-size:12px}.timeline-row{display:flex;gap:22px;padding:16px 0;border-bottom:1px solid var(--line)}.timeline-row:last-child{border-bottom:0}.timeline-row>strong{color:var(--accent);font:18px Georgia,"Songti SC",serif}.timeline-row span{display:flex;flex-direction:column;gap:3px}.timeline-row b{font-weight:500}.timeline-empty{padding:20px 0 14px}.timeline-empty .text-button{margin-top:10px}
@media(max-width:800px){.seasonal-grid{grid-template-columns:1fr}.book-sections,.timeline{padding-left:18px;padding-right:18px}}
.report-sections{margin-top:20px;display:grid;gap:12px}.report-section{padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--fill2)}.report-section h3{margin:0;font:16px Georgia,"Songti SC",serif}.report-section p{margin:8px 0;color:var(--mute);font-size:13px;line-height:1.8}.report-section small{color:var(--lav);font-size:11px}
.auth-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.auth-card{width:min(400px,100%);border:1px solid var(--line);border-radius:20px;background:var(--card);padding:38px 34px;text-align:center}.auth-card .brand{justify-content:center}.auth-card h2{margin:26px 0 0;font:30px Georgia,"Songti SC",serif}.auth-hint{margin:10px 0 0;color:var(--lav);font-size:12px}.auth-form{display:flex;flex-direction:column;gap:14px;margin-top:28px;text-align:left}.auth-form label{color:var(--lav);font-size:11px}.auth-form input{display:block;width:100%;margin-top:6px;border:1px solid var(--line);border-radius:8px;background:var(--card);padding:9px;color:var(--ink)}.auth-error{color:#b3567a;font-size:12px;margin:0}.auth-form .dark-button{width:100%}.auth-switch{margin:18px auto 0;display:block}
.account-card{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:22px 24px;margin-bottom:14px}.account-card h3{margin:8px 0 0;font:18px Georgia,"Songti SC",serif}.account-card p{margin:5px 0 0;color:var(--lav);font-size:12px}.account-actions{display:flex;gap:10px;flex-shrink:0}.account-actions .outline-button{margin-left:0}
.admin-card{margin-top:18px;padding:8px 24px}.admin-head,.admin-row{display:grid;grid-template-columns:1.4fr .8fr .8fr 1.1fr 1.1fr 1.4fr;gap:10px;align-items:center}.admin-head{padding:12px 0;border-bottom:1px solid var(--line);color:var(--lav);font-size:11px;letter-spacing:1px}.admin-row{padding:15px 0;border-bottom:1px solid var(--line)}.admin-row:last-child{border-bottom:0}.admin-user{display:flex;flex-direction:column;gap:3px}.admin-user b{font:15px Georgia,"Songti SC",serif;font-weight:400}.admin-user small{color:var(--lav);font-size:10px}.admin-role,.admin-status{width:fit-content;border-radius:12px;padding:3px 10px;font-size:11px;background:var(--fill2);color:var(--mute)}.admin-role{display:flex;align-items:center;gap:6px}.admin-role-btn{padding:0;font-size:11px}.admin-role.admin{background:#efe4f2;color:var(--accent)}.admin-status.off{background:var(--fill);color:var(--accent)}.admin-meta{color:var(--lav);font-size:11px}.admin-actions{display:flex;gap:8px;justify-content:flex-end}.admin-actions .outline-button,.admin-actions .danger-button{margin:0}.admin-empty{padding:28px 0;color:var(--lav);font-size:12px;text-align:center}
[data-theme="dark"] .auth-form input{background:var(--card);color:var(--ink)}[data-theme="dark"] .admin-role.admin{background:#3d3044;color:var(--accent)}
@media(min-width:801px){.config-card{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:end;gap:18px 16px}.config-card>div:first-child{grid-column:1/-1}.config-card>label{min-width:0}.config-card>label input,.config-card>label select{width:100%;min-width:0}.config-card>[data-schedule-fields]{grid-column:1/-1;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:18px 16px}.config-card>[data-schedule-fields] label{min-width:0}.config-card>[data-schedule-fields] input{width:100%;min-width:0}.config-card>[data-working-weekdays]{grid-column:1/-1}.config-card>[data-holidays]{grid-column:1/-1}.config-card>.dark-button{justify-self:end;min-width:110px}.profile-form{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:end;gap:18px 16px}.profile-form>div:first-child{grid-column:1/-1}.profile-form>label{min-width:0}.profile-form input,.profile-form select{width:100%;min-width:0}.profile-form>[data-extra-profile-fields]{grid-column:1/-1;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:18px 16px}.profile-form>[data-extra-profile-fields] label{min-width:0}.profile-form>[data-extra-profile-fields] input,.profile-form>[data-extra-profile-fields] select{width:100%;min-width:0}.profile-form>.dark-button{justify-self:end;min-width:110px}}
@media(max-width:800px){.config-card,.profile-form{display:flex;align-items:stretch;gap:14px}.config-card>div:first-child,.profile-form>div:first-child{width:100%}.config-card>label,.profile-form>label{width:calc(50% - 7px)}.config-card>label input,.config-card>label select,.profile-form input,.profile-form select{width:100%}.config-card>[data-schedule-fields],.profile-form>[data-extra-profile-fields]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%;gap:14px}.config-card>[data-working-weekdays],.config-card>[data-holidays]{width:100%}.config-card>.dark-button,.profile-form>.dark-button{margin-left:auto}}

/* 命理技能实验区：复用主题令牌，保持低对比、细边和移动端可读性 */
.divination-card { margin: 24px 0; }
.skill-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 18px 0; }
.skill-chip { appearance: none; text-align: left; border: 1px solid var(--line, #ddd6cf); background: transparent; color: inherit; border-radius: 12px; padding: 13px; cursor: pointer; }
.skill-chip.active { border-color: var(--ink, #2d2926); background: var(--surface-muted, #f5f1ed); }
.skill-chip b, .skill-chip small { display: block; }
.skill-chip small { margin-top: 6px; color: var(--muted, #827870); line-height: 1.45; }
.divination-form { display: grid; grid-template-columns: 1fr auto auto; gap: 14px; align-items: end; }
.divination-form label { display: grid; gap: 8px; color: var(--muted, #827870); }
.divination-form .date-field { font-size: 13px; min-width: 150px; }
.divination-form .date-field input { border: 1px solid var(--line, #ddd6cf); border-radius: 10px; background: transparent; color: inherit; padding: 10px 12px; font: inherit; }
.divination-form .date-field small { opacity: .8; line-height: 1.4; }
.divination-form textarea { min-height: 76px; resize: vertical; border: 1px solid var(--line, #ddd6cf); border-radius: 10px; background: transparent; color: inherit; padding: 12px; font: inherit; }
.skill-grid-empty { padding: 14px 2px; }
.divination-result { margin-top: 18px; padding: 18px; border: 1px solid var(--line, #ddd6cf); border-radius: 12px; background: var(--surface-muted, #f8f5f2); }
.divination-result.error { border-color: #bd8b83; }
.divination-result pre { overflow: auto; white-space: pre-wrap; font-size: 12px; }
.divination-result small { color: var(--muted, #827870); line-height: 1.6; }
@media (max-width: 720px) { .skill-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .divination-form { grid-template-columns: 1fr; } }

/* 每周工作日：横向胶囊选择器（保持原生 checkbox 语义，键盘可达） */
fieldset[data-working-weekdays] { border: 0; padding: 0; margin: 0; min-width: 0; }
fieldset[data-working-weekdays] legend { display: flex; align-items: baseline; gap: 8px; padding: 0; color: var(--lav, #9c8fb0); font-size: 11px; }
fieldset[data-working-weekdays] .weekday-hint { color: var(--gold, #c0aed4); font-size: 10px; letter-spacing: 1px; }
.weekday-row { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; margin-top: 9px; }
.weekday-option { position: relative; display: flex; align-items: center; justify-content: center; min-height: 38px; cursor: pointer; }
.weekday-option input { position: absolute; inset: 0; z-index: 1; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; border: 0; background: transparent; padding: 0; }
.weekday-option span { display: flex; align-items: center; justify-content: center; width: 100%; min-height: 38px; padding: 0 6px; border: 1px solid var(--line, #e6deee); border-radius: 19px; background: var(--card, #fcfafd); color: var(--mute, #7c7090); font-size: 12px; letter-spacing: 1px; transition: border-color .18s, background .18s, color .18s; }
.weekday-option:hover span { border-color: var(--gold, #c0aed4); }
.weekday-option input:checked + span { border-color: var(--accent, #9a6a8c); background: var(--fill2, #f3eef8); color: var(--accent, #9a6a8c); font-weight: 600; }
.weekday-option input:focus-visible + span { outline: 2px solid var(--accent, #9a6a8c); outline-offset: 2px; }
.weekday-option input:disabled + span { opacity: .45; cursor: not-allowed; }
@media (max-width: 800px) { .weekday-row { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

/* AI 模型配置卡片：标题区 / 状态区 / 操作区 */
.ai-config-card { margin-top: 14px; padding: 24px 26px 22px; display: flex; flex-direction: column; gap: 16px; }
.ai-config-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.ai-config-title { min-width: 0; }
.ai-config-title h3 { margin: 8px 0 0; font: 17px Georgia, "Songti SC", serif; }
.ai-config-title p { margin: 8px 0 0; color: var(--lav, #9c8fb0); font-size: 12px; line-height: 1.7; max-width: 560px; }
.ai-config-status { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 12px 14px; border: 1px solid var(--line, #e6deee); border-radius: 14px; background: var(--fill2, #f3eef8); }
.ai-badge { flex: none; border-radius: 12px; padding: 3px 11px; font-size: 11px; letter-spacing: 1px; }
.ai-badge.idle { background: var(--fill, #ece4f2); color: var(--mute, #7c7090); }
.ai-badge.ok { background: #e9f0e6; color: var(--green, #7e9a78); }
.ai-badge.warn { background: #f6ede0; color: #a8843f; }
.ai-badge.off { background: var(--fill, #ece4f2); color: var(--lav, #9c8fb0); }
.ai-config-meta { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ai-config-meta em { font-style: normal; font-size: 12px; color: var(--mute, #7c7090); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.ai-config-meta small { color: var(--lav, #9c8fb0); font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 340px; }
.ai-config-empty { color: var(--lav, #9c8fb0); font-size: 12px; }
.ai-config-actions { display: flex; align-items: center; gap: 12px; }
.ai-config-actions .dark-button, .ai-config-actions .text-button { margin-left: 0; }
.danger-text { color: #b3567a; }
.danger-text:hover { opacity: .8; }

/* AI 配置弹窗：宽卡片、分层字段、状态与操作区分明 */
.ai-config-modal { position: relative; width: min(560px, 100%); max-height: min(720px, 88vh); overflow: auto; border: 1px solid var(--line, #e6deee); border-radius: 22px; background: var(--card, #fcfafd); padding: 28px 30px 22px; box-shadow: 0 24px 70px #332b3e44; }
.ai-modal-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.ai-modal-head h3 { margin: 10px 0 0; font: 22px Georgia, "Songti SC", serif; }
.ai-modal-head .muted { margin: 8px 0 0; max-width: 400px; line-height: 1.7; }
.code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; color: var(--accent, #9a6a8c); background: var(--fill2, #f3eef8); padding: 1px 5px; border-radius: 5px; }
.ai-modal-close { flex: none; width: 30px; height: 30px; border: 1px solid var(--line, #e6deee); border-radius: 50%; background: transparent; color: var(--lav, #9c8fb0); font-size: 13px; line-height: 1; }
.ai-modal-close:hover { border-color: var(--gold, #c0aed4); color: var(--accent, #9a6a8c); }
.ai-modal-fields { margin-top: 20px; display: grid; gap: 14px; }
.ai-modal-fields label { color: var(--lav, #9c8fb0); font-size: 11px; }
.ai-modal-fields input { display: block; width: 100%; margin-top: 6px; border: 1px solid var(--line, #e6deee); border-radius: 10px; background: var(--card, #fcfafd); padding: 10px 12px; color: var(--ink, #332b3e); }
.ai-modal-fields input:focus { border-color: var(--accent, #9a6a8c); }
.ai-modal-fields select { display: block; width: 100%; margin-top: 6px; border: 1px solid var(--line, #e6deee); border-radius: 10px; background: var(--card, #fcfafd); padding: 10px 12px; color: var(--ink, #332b3e); font-size: 13px; }
.ai-modal-fields select:focus { border-color: var(--accent, #9a6a8c); }
.ai-test-result { margin: 14px 0 0; padding: 10px 14px; border-radius: 10px; font-size: 12px; line-height: 1.6; }
.ai-test-result.ok { background: #e9f0e6; color: var(--green, #7e9a78); }
.ai-test-result.fail { background: #f7e9ee; color: #b3567a; }
.ai-modal-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 18px; }
.ai-modal-actions .outline-button { margin-left: 0; }
.ai-modal-actions button:disabled { opacity: .5; cursor: not-allowed; }
.ai-modal-models { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--line, #e6deee); }
.ai-modal-models > small { color: var(--lav, #9c8fb0); font-size: 11px; }
.ai-model-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.ai-model-chip { display: flex; flex-direction: column; gap: 2px; border: 1px solid var(--line, #e6deee); border-radius: 12px; padding: 9px 13px; background: var(--fill2, #f3eef8); }
.ai-model-chip b { font-size: 12px; font-weight: 600; color: var(--plum, #3d3349); }
.ai-model-chip em { font-style: normal; color: var(--lav, #9c8fb0); font-size: 10px; }
.ai-modal-consent { margin: 16px 0 0; color: var(--lav, #9c8fb0); font-size: 11px; line-height: 1.7; }
@media (max-width: 800px) { .ai-config-modal { padding: 24px 18px 18px; } .ai-modal-actions { flex-wrap: wrap; } .ai-config-meta small { max-width: 200px; } }

/* AI 卡片与弹窗的暗色主题适配 */
[data-theme="dark"] .ai-badge.ok { background: #2b3527; }
[data-theme="dark"] .ai-badge.warn { background: #3a3323; color: #d4b26a; }
[data-theme="dark"] .danger-text { color: #e2a5b8; }
[data-theme="dark"] .ai-modal-fields input { background: var(--card, #2a2432); color: var(--ink, #eee8f4); }
[data-theme="dark"] .ai-modal-fields select { background: var(--card, #2a2432); color: var(--ink, #eee8f4); }
[data-theme="dark"] .ai-test-result.ok { background: #2b3527; }
[data-theme="dark"] .ai-test-result.fail { background: #3d2830; color: #e2a5b8; }

/* AI 今日观察卡片：层次化信息与状态区分（ready/fallback/unavailable/error/loading） */
.ai-observation { margin: 24px 0; padding: 22px 24px; display: flex; flex-direction: column; gap: 14px; }
.ai-obs-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ai-obs-head .eyebrow { margin-right: auto; }
.ai-obs-head .ai-badge { flex: none; }
.ai-obs-time { color: var(--lav, #9c8fb0); font-size: 11px; letter-spacing: .5px; }
.ai-obs-body { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.ai-obs-body h3 { margin: 0; font: 19px Georgia, "Songti SC", serif; line-height: 1.5; }
.ai-obs-label { align-self: flex-start; padding: 3px 10px; border: 1px solid var(--line, #e6deee); border-radius: 999px; color: var(--lav, #9c8fb0); font-size: 11px; letter-spacing: 1px; }
.ai-obs-detail { margin: 0; font-size: 13px; line-height: 1.8; white-space: pre-wrap; word-break: break-word; overflow-wrap: anywhere; }
.ai-obs-reason { margin: 0; color: var(--mute, #7c7090); font-size: 12px; line-height: 1.7; }
.ai-obs-hint { margin: 0; color: var(--lav, #9c8fb0); font-size: 12px; }
.ai-obs-foot { display: flex; flex-direction: column; gap: 6px; padding-top: 12px; border-top: 1px solid var(--line, #e6deee); }
.ai-obs-facts, .ai-obs-unc { margin: 0; color: var(--lav, #9c8fb0); font-size: 11px; line-height: 1.7; }
.ai-obs-meta { margin: 0; color: var(--lav, #9c8fb0); font-size: 11px; line-height: 1.7; }
.ai-obs-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.ai-obs-actions .outline-button, .ai-obs-actions .dark-button { margin-left: 0; }
.ai-observation .skeleton { height: 84px; }
.ai-observation .skeleton.short { height: 14px; margin-top: 10px; }
/* 状态视觉差异：克制、全部基于主题令牌（暗色模式随令牌自动适配） */
.ai-observation.fallback .ai-obs-detail { color: var(--mute, #7c7090); }
.ai-observation.unavailable, .ai-observation.error { background: var(--fill2, #f3eef8); }
@media (max-width: 800px) {
  .ai-observation { padding: 20px 18px; }
  .ai-obs-head .eyebrow { width: 100%; margin-bottom: -4px; }
  .ai-obs-actions { width: 100%; }
  .ai-obs-actions button { flex: 1; min-width: 0; }
}

/* —— 未登录宣传页（游客界面）排版：导航 + 居中 hero + 三特性卡片 + 免责页脚 —— */
/* 复用现有令牌（--ink/--plum/--mute/--lav/--bg/--card/--fill2/--line/--gold/--accent），无硬编码颜色；390px 单列收敛 */
.public-shell { min-height: 100vh; display: flex; flex-direction: column; }
.public-nav { width: min(1060px, calc(100% - 12vw)); margin: 0 auto; padding: 30px 0 0; display: flex; align-items: center; justify-content: space-between; }
.public-nav .brand { letter-spacing: 6px; }
.public-nav-actions { display: flex; gap: 10px; }
.public-nav-actions .outline-button, .public-nav-actions .dark-button { margin-left: 0; }
.public-main { flex: 1; width: min(1060px, calc(100% - 12vw)); margin: 0 auto; display: flex; flex-direction: column; }
.public-hero { padding: 9vh 0 6vh; text-align: center; }
.public-hero .eyebrow { margin: 0 0 20px; }
.public-hero h1 { margin: 0; font: clamp(36px, 5.6vw, 54px) Georgia, "Songti SC", serif; line-height: 1.4; letter-spacing: 3px; }
.public-lead { max-width: 560px; margin: 24px auto 0; color: var(--mute); font-size: 14px; line-height: 1.9; }
.public-cta { display: flex; justify-content: center; gap: 12px; margin-top: 36px; }
.public-cta .outline-button, .public-cta .dark-button { margin-left: 0; padding: 11px 28px; font-size: 13px; }
.public-features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; padding: 0 0 24px; }
.public-features .card { padding: 26px 24px; min-height: 196px; transition: border-color .2s; }
.public-features .card:hover { border-color: var(--gold); }
.public-features h3 { margin: 18px 0 0; font: 18px/1.5 Georgia, "Songti SC", serif; font-weight: 400; }
.public-features p { margin: 12px 0 0; color: var(--mute); font-size: 13px; line-height: 1.8; }
.public-footer { width: 100%; margin: auto 0 0; padding: 24px 0 34px; display: flex; flex-direction: column; align-items: center; gap: 6px; border-top: 1px solid var(--line); color: #b3a6bd; font-size: 11px; letter-spacing: .5px; text-align: center; }
@media (max-width: 800px) {
  .public-nav { width: calc(100% - 10vw); padding-top: 22px; }
  .public-nav .brand { writing-mode: horizontal-tb; letter-spacing: 5px; }
  .public-nav .brand small { display: inline; }
  .public-main { width: calc(100% - 10vw); }
  .public-hero { padding: 8vh 0 5vh; }
  .public-hero h1 { font-size: 34px; letter-spacing: 2px; }
  .public-lead { font-size: 13px; }
  .public-cta { flex-wrap: wrap; }
  .public-cta button { flex: 1 1 132px; min-width: 0; }
  .public-features { grid-template-columns: 1fr; }
  .public-features .card { min-height: 0; }
  .public-footer { padding: 20px 0 28px; }
}

/* —— 游客界面 hero 循环播放引导：淡入切换、高度稳定、减弱动态偏好降级 —— */
.public-rotator { min-height: 250px; display: flex; flex-direction: column; justify-content: center; }
.rotator-item { display: none; }
.rotator-item.active { display: block; animation: rotator-in .6s ease; }
@keyframes rotator-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .rotator-item.active { animation: none; } }
@media (max-width: 800px) { .public-rotator { min-height: 230px; } }

/* —— 手机端 H5 阶段 A：底部 Tab 导航 + safe-area + 44px 触控（>800px 桌面不受影响） —— */
.mobile-tabbar { display: none; }
@media (max-width: 800px) {
  .sidebar { display: none; }
  .app-shell { padding-bottom: calc(66px + env(safe-area-inset-bottom)); }
  .mobile-tabbar { display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 6; border-top: 1px solid var(--line); background: var(--card); padding-bottom: env(safe-area-inset-bottom); }
  .mobile-tab { flex: 1; min-height: 58px; border: 0; background: transparent; color: var(--mute); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; padding: 8px 4px; font-size: 11px; letter-spacing: 1px; }
  .mobile-tab .nav-icon { font-size: 19px; line-height: 1; }
  .mobile-tab.active { color: var(--accent); }
  .icon-button { width: 44px; height: 44px; }
  .nav-item { min-height: 44px; }
  .toast { bottom: calc(80px + env(safe-area-inset-bottom)); }
}

/* —— 手机端完善：iOS 动态视口（dvh）与顶部安全区（刘海屏）—— */
/* 不支持 dvh 的浏览器自动忽略下行，保留 100vh 原值 */
.app-shell, .public-shell, .auth-shell { min-height: 100dvh; }
@media (max-width: 800px) {
  .topbar { padding-top: calc(24px + env(safe-area-inset-top)); }
  .public-nav { padding-top: calc(22px + env(safe-area-inset-top)); }
  .auth-shell { padding-top: calc(24px + env(safe-area-inset-top)); }
}

/* —— 手机端完善：PWA 安装引导条（克制、令牌自适应亮暗、仅 ≤800px）—— */
.install-banner { display: none; }
@media (max-width: 800px) {
  .install-banner { display: flex; position: fixed; left: 12px; right: 12px; bottom: calc(78px + env(safe-area-inset-bottom)); z-index: 7; align-items: center; gap: 10px; padding: 12px 14px; border: 1px solid var(--line); border-radius: 16px; background: var(--card); color: var(--ink); font-size: 12px; line-height: 1.6; box-shadow: 0 10px 30px #332b3e2e; }
  .install-banner p { margin: 0; flex: 1; }
  .install-banner button { flex: none; border: 0; background: transparent; color: var(--accent); font-size: 12px; padding: 7px 12px; border-radius: 12px; min-height: 32px; }
  .install-banner [data-action="install-app"] { background: var(--plum); color: var(--bg); font-weight: 600; }
}

/* —— 手机端完善：今日收入数字与四柱在 390px 的收敛（设计文档 4.3）—— */
@media (max-width: 800px) {
  .income strong { font-size: 40px; letter-spacing: -1px; }
  .pillars { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* —— 手机端完善：今日页工作状态卡片（设计文档 4.1：侧栏信息移入今日页顶部）—— */
.mobile-work-status { display: none; }
@media (max-width: 800px) {
  .mobile-work-status { display: block; padding: 22px 24px; margin-bottom: 14px; }
  .mobile-work-status p, .mobile-work-status small { margin: 0; color: var(--lav); font-size: 11px; letter-spacing: 1px; }
  .mobile-work-status strong { display: block; margin: 8px 0 13px; font-size: 13px; font-weight: 500; }
}

/* —— 手机端完善：「我的」页排版（390px 单列收敛，避免 flex 两列挤压）—— */@media (max-width: 800px) {
  /* profile-grid 是 flex 容器（非 grid），纵向堆叠，资料卡与设置列表各占全宽 */
  .profile-grid { flex-direction: column; }
  .profile-card { width: 100%; padding: 24px; }
  .settings { width: 100%; }
  /* 页首收敛：标题缩小、顶部间距收窄 */
  .page-intro { margin-top: 30px; margin-bottom: 22px; }
  .page-intro h2 { font-size: 28px; }
  /* 卡片内边距收敛，给表单与列表更多内容空间 */
  .config-card, .profile-form, .memory-card { padding: 18px; }
  .settings { padding-left: 18px; padding-right: 18px; }
  /* 设置/报告行高度收敛 */
  .setting-row, .report-row { padding-top: 16px; padding-bottom: 16px; }
  /* AI 配置头部与账号卡片允许换行，避免窄屏挤压 */
  .ai-config-head { flex-wrap: wrap; }
  .account-card { flex-wrap: wrap; }
  .account-actions { flex-wrap: wrap; }
}

/* —— 手机端完善：今日页细节（顶栏紧凑、meta-row 均匀分布、卡片内边距收敛）—— */
@media (max-width: 800px) {
  .topbar { height: auto; padding-top: calc(18px + env(safe-area-inset-top)); padding-bottom: 12px; }
  .topbar h1 { font-size: 22px; }
  .income-card { padding: 24px; }
  .quote-card { padding: 22px 20px; }
  .meta-row { gap: 16px; margin-top: 26px; padding-top: 16px; }
  .meta-row > div { flex: 1; min-width: 0; }
  .meta-row > button { margin-left: 0; }
}

/* —— 可折叠卡片（工作配置 / 命理资料）：头部点击展开收起，默认展开 —— */
.collapse-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.collapse-head:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 8px; }
.collapse-arrow { color: var(--lav); font-size: 18px; line-height: 1; transition: transform .2s; }
.config-card.collapsed > :not(.collapse-head), .profile-form.collapsed > :not(.collapse-head) { display: none; }
.config-card.collapsed .collapse-arrow, .profile-form.collapsed .collapse-arrow { transform: rotate(180deg); }
@media (prefers-reduced-motion: reduce) { .collapse-arrow { transition: none; } }

/* —— 薪资周期下拉框与输入框对齐（2026-08-08：config-card 的 select 此前仅有宽度规则，缺边框/圆角/背景/内边距/字体/高度）—— */
.config-card label select { display: block; width: 100%; margin-top: 5px; height: 34px; border: 1px solid var(--line); border-radius: 8px; background: #fff; padding: 7px 9px; color: var(--ink); font: inherit; }
[data-theme="dark"] .config-card label select { background: var(--card); color: var(--ink); }
/* 命理资料的出生时刻下拉同样对齐（此前为浏览器默认字体/高度） */
.profile-form select { font: inherit; height: 34px; }

/* —— 移动端日期/时间选择器（底部抽屉、令牌风格、44px 触控；仅 ≤800px 拦截原生 picker）—— */
.picker-backdrop { position: fixed; inset: 0; background: #332b3e55; display: flex; align-items: flex-end; justify-content: center; z-index: 10; }
.picker-modal { width: 100%; max-width: 430px; border-radius: 20px 20px 0 0; border-bottom: 0; padding: 20px 20px calc(16px + env(safe-area-inset-bottom)); }
.picker-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.picker-close { border: 0; background: transparent; color: var(--lav); font-size: 22px; width: 44px; height: 44px; }
.cal-nav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.cal-arrow { border: 1px solid var(--line); background: transparent; color: var(--accent); border-radius: 12px; width: 44px; height: 44px; font-size: 20px; }
.cal-title { font: 15px Georgia, "Songti SC", serif; color: var(--ink); letter-spacing: 1px; }
.cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 2px; }
.cal-head { text-align: center; color: var(--lav); font-size: 11px; padding: 6px 0; }
.cal-cell { border: 0; background: transparent; color: var(--ink); height: 44px; border-radius: 10px; font-size: 13px; }
.cal-cell.today { color: var(--accent); font-weight: 600; }
.cal-cell.selected { background: var(--plum); color: var(--bg); }
.time-cols { display: flex; gap: 12px; max-height: 260px; }
.time-col { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 2px; padding: 4px; border: 1px solid var(--line); border-radius: 14px; background: var(--fill2); -webkit-overflow-scrolling: touch; }
.time-opt { border: 0; background: transparent; color: var(--mute); height: 44px; border-radius: 10px; font-size: 15px; font-variant-numeric: tabular-nums; }
.time-opt.selected { background: var(--plum); color: var(--bg); }
.picker-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 16px; }
.picker-actions .text-button { margin-left: 0; padding: 10px 16px; }
