:root{--paper:#f4f5ed;--sheet:#fffdf7;--bamboo:#245c4f;--ink:#26312e;--cinnabar:#c84a3a;--apricot:#f2c66d;--mist:#dfe7df;--muted:#6d7a75;font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:var(--ink);background:var(--paper)}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{background:radial-gradient(circle at 88% 0,rgba(242,198,109,.18),transparent 28rem),var(--paper)}button,input{font:inherit}button,a{color:inherit}a{text-decoration:none}.skip-link{position:fixed;left:1rem;top:-5rem;z-index:99}.skip-link:focus{top:1rem}.site-header{height:56px;display:flex;align-items:center;justify-content:space-between;padding:0 max(18px,calc((100vw - 1080px)/2));border-bottom:1px solid rgba(36,92,79,.12)}.brand{display:flex;align-items:center;gap:9px}.brand-seal{display:grid;place-items:center;width:34px;height:34px;border-radius:10px 10px 10px 3px;background:var(--cinnabar);color:white;font:700 20px serif}.brand b{display:block;font:700 18px "Songti SC",serif}.brand small{display:block;color:var(--muted);font-size:9px;letter-spacing:.14em}#header-streak{font-size:12px;color:var(--muted)}main{height:calc(100dvh - 118px);max-width:1080px;margin:auto;padding:10px 18px;overflow:hidden;outline:none}.screen{height:100%;min-height:0}.bottom-nav{height:62px;display:grid;grid-template-columns:repeat(4,1fr);padding:3px max(12px,calc((100vw - 520px)/2)) env(safe-area-inset-bottom);border-top:1px solid rgba(36,92,79,.12);background:rgba(255,253,247,.95);backdrop-filter:blur(12px)}.bottom-nav a{display:grid;place-content:center;justify-items:center;gap:2px;color:var(--muted);font-size:10px}.bottom-nav i{display:grid;place-items:center;width:27px;height:27px;border-radius:9px;font-style:normal;font-weight:800}.bottom-nav a.active{color:var(--bamboo);font-weight:800}.bottom-nav a.active i{background:var(--bamboo);color:white}.today-screen{display:flex;flex-direction:column;gap:8px}.day-strip{height:36px;display:flex;align-items:center;justify-content:space-between;flex:0 0 auto}.day-strip>div{display:flex;align-items:baseline;gap:9px}.day-strip b{font:700 20px "Songti SC",serif}.day-strip span,.day-strip>a{font-size:11px;color:var(--muted)}.streak-pill{padding:6px 10px;border:1px solid #cad8d0;border-radius:999px;color:var(--bamboo)!important}.task-strip{height:36px;display:flex;align-items:center;gap:5px;overflow-x:auto;scrollbar-width:none;flex:0 0 auto}.task-strip::-webkit-scrollbar{display:none}.task-strip button{border:0;border-radius:999px;background:#e6ece7;color:var(--muted);padding:7px 11px;white-space:nowrap;font-size:11px;cursor:pointer}.task-strip button[aria-selected=true]{background:var(--bamboo);color:white;font-weight:800}.task-strip>span{margin-left:auto;font:700 11px monospace;color:var(--cinnabar)}.compact-poem{min-height:0;flex:1;display:grid;grid-template-rows:auto 1fr 22px 48px;position:relative;background:var(--sheet);border:1px solid rgba(36,92,79,.12);border-radius:4px 24px 4px 4px;padding:15px clamp(15px,4vw,34px) 10px;box-shadow:0 14px 36px rgba(36,70,58,.08);overflow:hidden}.compact-poem:after{content:"";position:absolute;inset:6px;pointer-events:none;border:1px solid rgba(36,92,79,.08)}.compact-poem header{display:grid;grid-template-columns:40px 1fr 44px;align-items:center;position:relative;z-index:1}.poem-no{font:700 12px monospace;color:var(--cinnabar)}.compact-poem header>div{text-align:center}.compact-poem header p{margin:0;color:var(--bamboo);font-size:10px;font-weight:800;letter-spacing:.08em}.compact-poem h1{margin:2px 0 4px;font:700 clamp(24px,5vw,37px)/1.15 "STKaiti","KaiTi","Songti SC",serif}.compact-poem header button{border:1px solid #cad8d0;background:white;border-radius:999px;padding:5px;font-size:10px;z-index:2}.compact-poem header button[aria-pressed=true]{background:#e6efe9;color:var(--bamboo);font-weight:800}.compact-lines{min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(5px,1.4vh,13px);font-size:calc(19px * var(--font-scale));font-family:"STKaiti","KaiTi","Songti SC",serif;line-height:1.38;position:relative;z-index:1;overflow:auto}.compact-line{text-align:center}.compact-line p{margin:0}.compact-line small{display:block;color:var(--bamboo);font:calc(10px * var(--font-scale))/1.3 system-ui,sans-serif;letter-spacing:.02em}.hide-pinyin small{display:none}.imagery{text-align:center}.imagery>small{font:11px system-ui;color:var(--muted)}.imagery>div{display:flex;justify-content:center;flex-wrap:wrap;gap:10px;margin:18px 0}.imagery span{display:grid;place-items:center;width:46px;height:46px;border:1px solid var(--bamboo);border-radius:50%;font:700 23px "STKaiti",serif;color:var(--bamboo)}.imagery p{font:14px system-ui;color:var(--muted)}.reveal-next{border:1px dashed var(--bamboo);background:transparent;color:var(--bamboo);border-radius:999px;padding:7px 14px;font:12px system-ui}.page-dots{display:flex;align-items:center;justify-content:center;gap:5px;z-index:1}.page-dots i{width:5px;height:5px;background:#c4d0ca;border-radius:50%}.page-dots i.active{width:15px;border-radius:5px;background:var(--cinnabar)}.page-dots span{font:10px monospace;color:var(--muted);margin-left:5px}.poem-actions{display:grid;grid-template-columns:34px 1fr 1.25fr 34px;gap:6px;align-items:center;z-index:1}.poem-actions button{height:36px;border:0;border-radius:999px;background:#edf1ee;color:var(--bamboo);font-size:11px;font-weight:800}.poem-actions>button:first-child,.poem-actions>button:last-child{font-size:22px}.poem-actions .seal-button{background:var(--cinnabar);color:white}.poem-actions .seal-button.done{background:#dfe9e2;color:var(--bamboo)}.calendar-screen{display:grid;grid-template-rows:52px 50px 22px 1fr 64px;gap:5px}.calendar-head{display:flex;align-items:center;justify-content:space-between}.calendar-head p{margin:0;color:var(--bamboo);font-size:10px;font-weight:800;letter-spacing:.15em}.calendar-head h1{margin:0;font:700 25px "Songti SC",serif}.calendar-head button{border:0;background:white;border-radius:9px;width:32px;height:30px;margin-left:3px}.calendar-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.calendar-stats span{display:grid;place-content:center;text-align:center;background:white;border-radius:12px;color:var(--muted);font-size:9px}.calendar-stats b{display:block;color:var(--ink);font-size:18px}.week-row,.month-grid{display:grid;grid-template-columns:repeat(7,1fr)}.week-row span{text-align:center;color:var(--muted);font-size:9px}.month-grid{grid-template-rows:repeat(6,1fr);gap:3px;min-height:0}.day-cell{position:relative;border:0;background:rgba(255,255,255,.7);border-radius:9px;display:grid;place-content:center;justify-items:center;gap:2px;font-size:11px}.day-cell i{width:10px;height:10px;border:1px solid #aebdb5;border-radius:50%}.day-cell.complete i{background:var(--bamboo);border-color:var(--bamboo);box-shadow:inset 0 0 0 2px white}.day-cell.partial i{background:linear-gradient(90deg,var(--apricot) 50%,transparent 50%);border-color:var(--apricot)}.day-cell.makeup i{background:var(--cinnabar);border-radius:2px;transform:rotate(45deg);border:0}.day-cell.future{opacity:.35}.day-cell.outside{opacity:.12}.date-detail{display:grid;place-content:center;background:white;border-radius:12px;padding:8px 12px;overflow:hidden;font-size:10px;color:var(--muted)}.date-detail p{margin:3px 0}.legend{display:flex;gap:12px;font-size:9px}.list-screen,.settings-screen{display:flex;flex-direction:column;min-height:0;gap:10px}.list-screen>header,.settings-screen>header{display:flex;align-items:center;justify-content:space-between;flex:0 0 52px}.list-screen header p,.settings-screen header p{margin:0;font-size:9px;letter-spacing:.15em;color:var(--bamboo)}.list-screen h1,.settings-screen h1{margin:0;font:700 25px "Songti SC",serif}.list-screen input{width:min(52%,360px);border:1px solid #cbd8d1;border-radius:999px;padding:8px 12px;background:white}.library-list{min-height:0;overflow-y:auto;background:white;border-radius:14px}.library-list>a{display:grid;grid-template-columns:46px 1fr auto;align-items:center;padding:11px 14px;border-bottom:1px solid #edf1ee}.library-list>a>span{font:700 11px monospace;color:var(--cinnabar)}.library-list b{display:block;font:700 16px "Songti SC",serif}.library-list small{font-size:10px;color:var(--muted)}.library-list i{font-style:normal;color:var(--bamboo)}.settings-screen{overflow-y:auto}.settings-card,.data-actions{background:white;border-radius:14px;padding:12px}.settings-card{display:grid;gap:10px}.settings-card label{display:grid;grid-template-columns:1fr 1.4fr;align-items:center;font-size:12px}.settings-card input{min-width:0}.toggle input{justify-self:end}.primary,.data-actions button,.data-actions label{border:0;background:var(--bamboo);color:white;border-radius:999px;padding:9px 13px;font-weight:800;font-size:11px}.data-actions{display:flex;gap:8px;flex-wrap:wrap}.data-actions label{cursor:pointer}.data-actions input{display:none}.data-actions button:last-child{background:white;color:var(--cinnabar);border:1px solid #e2c2bc}.empty-screen{display:grid;place-content:center;text-align:center;height:100%}.toast{position:fixed;left:50%;bottom:72px;transform:translate(-50%,20px);background:var(--ink);color:white;padding:9px 14px;border-radius:999px;opacity:0;pointer-events:none;transition:.2s;z-index:80;font-size:12px}.toast.show{opacity:1;transform:translate(-50%,0)}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid var(--apricot);outline-offset:2px}
@media(max-width:520px){main{padding:7px 10px}.site-header{padding:0 12px}.compact-poem{padding:10px 10px 8px}.compact-poem h1{font-size:clamp(22px,7vw,30px)}.compact-lines{font-size:calc(18px * var(--font-scale))}.poem-actions{grid-template-columns:31px 1fr 1.2fr 31px}.streak-pill{padding:5px 8px}.calendar-screen{grid-template-rows:48px 46px 18px 1fr 61px}.day-cell{border-radius:7px}.legend{gap:7px}}
@media(max-height:650px){.site-header{height:48px}.bottom-nav{height:56px}main{height:calc(100dvh - 104px);padding-top:4px;padding-bottom:4px}.day-strip,.task-strip{height:31px}.compact-poem{padding-top:7px}.compact-lines{gap:3px;font-size:calc(16px * var(--font-scale))}.compact-line small{font-size:calc(9px * var(--font-scale))}.poem-actions{height:40px}.calendar-screen{grid-template-rows:42px 40px 17px 1fr 54px}.calendar-stats b{font-size:15px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
.today-screen{gap:5px}.progress-summary{height:42px;display:grid;grid-template-columns:repeat(3,1fr);gap:2px 8px;align-items:center;padding:5px 10px;background:white;border:1px solid rgba(36,92,79,.1);border-radius:11px;flex:0 0 auto;font-size:9px;color:var(--muted)}.progress-summary span{white-space:nowrap}.progress-summary b{display:block;color:var(--ink);font-size:11px}.progress-summary>i{grid-column:1/-1;height:4px;background:#e3eae5;border-radius:4px;overflow:hidden}.progress-summary em{display:block;height:100%;background:linear-gradient(90deg,var(--apricot),var(--cinnabar));border-radius:4px}.task-strip{height:32px}.compact-poem{grid-template-rows:auto 1fr 20px 44px;padding-top:10px;padding-bottom:8px}.compact-poem h1{margin:0;line-height:1.1}.compact-lines{justify-content:flex-start;padding-top:clamp(10px,2.2vh,20px);gap:clamp(4px,1.1vh,10px);line-height:1.32}.compact-line p{margin:2px 0 0}.settings-preview{padding:8px 10px;border-radius:9px;background:#eef3ef;color:var(--bamboo);font-size:10px;line-height:1.5}
@media(max-height:650px){.progress-summary{height:38px;padding:4px 8px}.progress-summary b{font-size:10px}.compact-lines{padding-top:7px}}

/* Full-poem reader, single progress language, and ceremonial daily seal */
.progress-summary{height:58px;display:grid;grid-template-columns:1fr;grid-template-rows:repeat(2,1fr);gap:5px;padding:6px 10px}
.progress-row{display:grid;grid-template-columns:38px 1fr auto;grid-template-rows:auto 5px;align-items:center;gap:2px 7px;min-width:0;font-size:9px;color:var(--muted)}
.progress-row span{font-weight:800;color:var(--ink)}
.progress-row b{grid-column:3;font:700 10px ui-monospace,monospace;color:var(--ink)}
.progress-row i{grid-column:2/4;height:5px;overflow:hidden;border-radius:5px;background:#e3eae5}
.progress-row em{display:block;height:100%;border-radius:5px;background:var(--bamboo)}
.review-progress em{background:var(--cinnabar)}
.compact-poem{grid-template-rows:auto 1fr 44px}
.compact-poem.has-task-stamp{grid-template-rows:auto minmax(0,1fr) 70px 44px}
.compact-poem.has-daily-seal{grid-template-rows:auto minmax(0,1fr) 110px 44px}
.compact-lines{overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#bdcbc3 transparent;padding-inline:8px}
.short-poem .compact-lines{justify-content:center;padding-top:8px;padding-bottom:8px}
.long-poem .compact-lines{justify-content:flex-start;padding-top:12px;padding-bottom:12px}
.compact-line{flex:0 0 auto;width:100%;white-space:nowrap}
.poem-actions{grid-template-columns:minmax(90px,1fr) minmax(110px,1.25fr);max-width:420px;width:100%;justify-self:center}
.poem-actions>button:first-child,.poem-actions>button:last-child{font-size:11px}
.seal-stage{position:relative;z-index:3;display:flex;align-items:center;justify-content:flex-end;gap:12px;padding-right:18px;pointer-events:none}
.task-stamp{display:grid;place-content:center;justify-items:center;width:58px;height:58px;border:3px double var(--cinnabar);outline:1px solid rgba(200,74,58,.5);outline-offset:-6px;border-radius:50%;background:rgba(255,253,247,.96);color:var(--cinnabar);font-family:"STKaiti","KaiTi",serif;line-height:1;transform:rotate(6deg);filter:drop-shadow(0 2px 2px rgba(104,35,27,.13))}
.task-stamp span{font-size:13px;font-weight:800;letter-spacing:.08em}
.task-stamp strong{margin-top:3px;font-size:15px;letter-spacing:.1em}
.review-stamp{transform:rotate(-5deg)}
.stamp-drop{animation:task-stamp-drop .46s cubic-bezier(.18,.86,.32,1.16) both}
@keyframes task-stamp-drop{0%{opacity:0;transform:translateY(-18px) scale(1.4) rotate(2deg)}70%{opacity:1;transform:translateY(1px) scale(.94) rotate(-7deg)}100%{transform:translateY(0) scale(1) rotate(-5deg)}}
.completion-seal{position:relative;display:grid;place-items:center;width:96px;height:96px;border-radius:50%;background:radial-gradient(circle at 32% 24%,rgba(255,253,247,.96),rgba(200,74,58,.07) 72%),var(--sheet);color:var(--cinnabar);transform:rotate(-7deg);filter:drop-shadow(0 3px 2px rgba(104,35,27,.16));pointer-events:none}
.completion-seal svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.completion-seal circle{fill:none;stroke:currentColor;stroke-width:5;stroke-dasharray:7 1.2}
.completion-seal path{stroke:none}
.completion-seal text{fill:currentColor;font:800 15px "STKaiti","KaiTi",serif;letter-spacing:5px;text-anchor:middle}
.completion-seal strong{position:relative;z-index:1;display:grid;place-items:center;width:52px;height:52px;border:2px solid currentColor;border-radius:50%;font:800 21px/1 "STKaiti","KaiTi",serif;letter-spacing:.12em}
.completion-seal:after{content:"";position:absolute;inset:-9px;border-radius:45%;background:radial-gradient(circle,rgba(200,74,58,.18),transparent 67%);opacity:0}
.seal-drop{animation:seal-drop .58s cubic-bezier(.18,.86,.32,1.18) both}
.seal-drop:after{animation:ink-bloom .7s ease-out both}
@keyframes seal-drop{0%{opacity:0;transform:translateY(-24px) scale(1.55) rotate(4deg)}62%{opacity:1;transform:translateY(2px) scale(.93) rotate(-9deg)}100%{transform:translateY(0) scale(1) rotate(-7deg)}}
@keyframes ink-bloom{0%,30%{opacity:0;transform:scale(.45)}55%{opacity:.9}100%{opacity:0;transform:scale(1.35)}}
@media(max-width:520px){.compact-poem.has-daily-seal{grid-template-rows:auto minmax(0,1fr) 104px 44px}.seal-stage{gap:8px;padding-right:10px}.completion-seal{width:88px;height:88px}.completion-seal text{font-size:14px}.completion-seal strong{width:47px;height:47px;font-size:19px}.task-stamp{width:54px;height:54px}.compact-line{white-space:normal}.compact-line p{display:block}}
@media(max-height:650px){.progress-summary{height:52px;padding-block:4px}.compact-poem.has-task-stamp{grid-template-rows:auto minmax(0,1fr) 58px 40px}.compact-poem.has-daily-seal{grid-template-rows:auto minmax(0,1fr) 84px 40px}.long-poem .compact-lines{padding-top:7px}.completion-seal{width:72px;height:72px}.completion-seal text{font-size:12px}.completion-seal strong{width:40px;height:40px;font-size:16px}.task-stamp{width:48px;height:48px}.task-stamp span{font-size:11px}.task-stamp strong{font-size:13px}}
@media(prefers-reduced-motion:reduce){.seal-drop,.seal-drop:after,.stamp-drop{animation:none!important}}

.task-strip button.is-complete:not(.is-current){background:#f6dfda;color:#a63d31;font-weight:800;box-shadow:inset 0 0 0 1px rgba(200,74,58,.16)}
.task-strip button.is-current:not(.is-complete){background:var(--bamboo);color:white;font-weight:800}
.task-strip button.is-current.is-complete{background:var(--cinnabar);color:white;font-weight:800;box-shadow:0 3px 10px rgba(200,74,58,.22)}
