:root{--bg:#f4f6f3;--bg-outer:#e7eae4;--sf:#fff;--sf2:#fbfcfb;--ink:#1e2b24;--mut:#5f6e64;--ln:#e4e9e3;--p:#1f4d3a;--p6:#266b4f;--pt:#eaf1ed;--ac:#e0a458;--act:#fbf1e2;--dg:#b4483c;--dgt:#fbeae7;--ok:#2e7d57;--sage:#7a9e8c;--tan:#c9b48a;--plum:#7c6191;--sh:0 1px 2px #1e2b240a, 0 4px 16px #1e2b240d;--sh-hover:0 2px 4px #1e2b240d, 0 10px 26px #1e2b2417;--sh-modal:0 18px 50px #1e2b2440;--auth-grad:linear-gradient(160deg, #1f4d3a, #123528);--section-header-bg:color-mix(in srgb, var(--p) 10%, transparent);--section-header-bg-active:color-mix(in srgb, var(--p) 18%, transparent)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg-outer);color:var(--ink);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums;font-family:Sarabun,system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.5}a{color:var(--p6)}a:hover{color:var(--p)}input,select,textarea,button{font-family:inherit}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes sheetup{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}@keyframes pop{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.app-shell{background:var(--bg);min-height:100vh}.sidebar{display:none}.main{flex-direction:column;min-height:100vh;padding-bottom:84px;display:flex}.main-inner{flex-direction:column;flex:1;width:100%;max-width:640px;margin:0 auto;padding:14px 14px 24px;display:flex}.main-inner>:first-child{flex:1}.app-credit{text-align:center;color:var(--mut);opacity:.6;margin-top:auto;padding:28px 0 6px;font-size:11.5px}.page-title{font-size:20px;font-weight:700;line-height:1.3}.page-sub{color:var(--mut);font-size:13px}@media (width>=1024px){.app-shell{grid-template-columns:232px 1fr;display:grid}.app-credit{display:none}.sidebar{background:var(--p);color:#fff;box-sizing:border-box;flex-direction:column;height:100vh;padding:16px 12px;display:flex;position:sticky;top:0}.main{padding-bottom:24px}.main-inner{max-width:900px;padding:20px 24px 32px}.bottomnav,.mobile-topbar{display:none!important}}.side-item{cursor:pointer;color:#ffffffd9;text-align:left;background:0 0;border:none;border-radius:10px;align-items:center;gap:10px;width:100%;padding:10px 12px;font-family:inherit;font-size:14px;font-weight:500;display:flex}.side-item:hover{background:#ffffff14}.side-item.active{color:#fff;background:#ffffff29;font-weight:600}.side-count{opacity:.7;margin-left:auto;font-size:12px}.alert-pill{background:var(--dg);color:#fff;border-radius:999px;margin-left:auto;padding:1px 7px;font-size:12px;font-weight:700}.nav-dot{background:var(--dg);color:#fff;text-align:center;border-radius:999px;min-width:7px;padding:0 4px;font-size:9px;font-weight:700;line-height:13px;position:absolute;top:-3px;right:-12px}.mobile-topbar{z-index:50;background:var(--p);color:#fff;align-items:center;gap:8px;padding:9px 14px;display:flex;position:sticky;top:0}.topbar-btn{color:#fff;cursor:pointer;background:#ffffff1f;border:none;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:38px;height:38px;font-size:15px;display:inline-flex}.topbar-btn:active{background:#ffffff38}.bottomnav{z-index:60;background:var(--sf);border-top:1px solid var(--ln);padding:6px 4px calc(6px + env(safe-area-inset-bottom));justify-content:space-around;align-items:center;display:flex;position:fixed;bottom:0;left:0;right:0}.bottomnav-item{color:var(--mut);cursor:pointer;background:0 0;border:none;flex-direction:column;flex:1;align-items:center;gap:2px;padding:6px 0;font-size:11.5px;font-weight:500;display:flex}.bottomnav-item.active{color:var(--p);font-weight:600}.bottomnav-item .ic{font-size:20px}.fab{background:var(--p);color:#fff;cursor:pointer;border:none;border-radius:999px;justify-content:center;align-items:center;width:50px;height:50px;margin-top:-20px;font-size:26px;display:flex;box-shadow:0 6px 16px #1f4d3a4d}.card{background:var(--sf);box-shadow:var(--sh);border-radius:16px;padding:16px;transition:box-shadow .15s,transform 80ms}.card[role=button]:active{transform:scale(.99)}@media (hover:hover){.card[role=button]:hover{box-shadow:var(--sh-hover)}}.section-title{margin:22px 2px 10px;font-size:15px;font-weight:600}.panel-head{cursor:pointer;width:100%;color:var(--ink);border:none;border-top:1px solid var(--ln);background:0 0;align-items:center;gap:8px;margin:6px 0 0;padding:12px 2px;font-size:15px;font-weight:600;display:flex}.panel-head:active{opacity:.7}.panel-count{color:var(--mut);background:var(--sf2);border-radius:999px;padding:1px 9px;font-size:12px;font-weight:600}.badge{white-space:nowrap;border-radius:999px;align-items:center;padding:3px 9px;font-size:12px;font-weight:600;line-height:1.3;display:inline-flex}.badge.green{background:var(--pt);color:var(--p)}.badge.honey{background:var(--act);color:#8a5a16}.badge.red{background:var(--dgt);color:var(--dg)}.badge.gray{color:var(--mut);background:#eef0ec}.chip{background:var(--sf2);border:1px solid var(--ln);color:var(--ink);border-radius:999px;align-items:center;gap:4px;padding:3px 10px;font-size:12px;display:inline-flex}.chip .k{color:var(--mut)}.note-box{border:1px dashed var(--ln);color:var(--mut);background:var(--sf2);border-radius:10px;padding:8px 10px;font-size:12.5px}*{-webkit-tap-highlight-color:transparent}button,[role=button],a{touch-action:manipulation}.btn{cursor:pointer;border:none;border-radius:10px;padding:9px 14px;font-size:14px;font-weight:600;transition:transform 80ms,opacity .12s}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5;cursor:default;transform:none}.btn-primary{background:var(--p);color:#fff}.btn-ghost{background:var(--sf2);color:var(--ink);border:1px solid var(--ln)}.btn-danger{background:var(--dgt);color:var(--dg)}.btn-sm{padding:6px 11px;font-size:12.5px}.overlay{z-index:300;box-sizing:border-box;background:#141e1970;flex-direction:column;align-items:center;padding:16px;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--sf);box-shadow:var(--sh-modal);border-radius:20px;flex-shrink:0;width:100%;max-width:460px;margin:auto 0;animation:.2s pop}@media (width<=560px){.overlay{padding:0}.modal{border-radius:20px 20px 0 0;max-width:100%;margin:auto 0 0;animation:.24s sheetup}.modal:not(.compact){padding-bottom:env(safe-area-inset-bottom)}.overlay:has(>.modal.compact){padding:16px 16px calc(16px + env(safe-area-inset-bottom))}.modal.compact{border-radius:20px;margin:auto 0;animation:.2s pop}}.field-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}.field-grid>*{min-width:0}.form-input,.field-grid select{max-width:100%}.field-full{grid-column:span 2}.form-label{margin-bottom:6px;font-size:13px;font-weight:600;display:block}.form-input{border:1px solid var(--ln);background:var(--sf2);box-sizing:border-box;width:100%;color:var(--ink);border-radius:12px;outline:none;padding:11px 12px;font-size:14px}.form-input:focus{border-color:var(--p6);box-shadow:0 0 0 3px #266b4f24}.form-section{width:100%;color:var(--p);background:var(--section-header-bg);border-radius:10px;grid-column:span 2;align-items:center;gap:8px;margin-top:14px;padding:9px 12px;font-size:12.5px;font-weight:700;display:flex}button.form-section{text-align:left;cursor:pointer;border:none;font-family:inherit}button.form-section:active{background:var(--section-header-bg-active)}.form-hint{color:var(--mut);margin-top:4px;font-size:12px}.auth-input:focus{border-color:var(--p6)!important}.btn-link{font:inherit;color:var(--p6);cursor:pointer;background:0 0;border:none;padding:0;font-weight:700}:is(button,a,[role=button],[tabindex]):focus-visible{outline:2px solid var(--p6);outline-offset:2px}@media (pointer:coarse){.btn{min-height:40px}.btn-sm{min-height:36px;padding:7px 12px}}.detail-back{z-index:20;position:sticky;top:8px}@media (width<=1023px){.detail-back{top:68px}}.empty{text-align:center;color:var(--mut);padding:44px 20px;font-size:13.5px;line-height:1.6}.empty .ic{background:var(--pt);border-radius:999px;justify-content:center;align-items:center;width:60px;height:60px;margin:0 auto 10px;font-size:28px;display:flex}.icon{vertical-align:-.22em;flex-shrink:0}.emoji-tile{background:var(--pt);border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:20px;line-height:1;display:inline-flex}.emoji-tile.sm{border-radius:10px;width:34px;height:34px;font-size:17px}.emoji-tile.lg{border-radius:14px;width:48px;height:48px;font-size:24px}.bottomnav-item .ic{align-items:center;height:22px;display:flex}.side-item .icon{opacity:.9}.sheet-handle{display:none}@media (width<=560px){.sheet-handle{background:var(--ln);border-radius:999px;width:36px;height:4px;margin:10px auto -8px;display:block}}.sheet-head{z-index:2;background:var(--sf);border-radius:20px 20px 0 0;align-items:center;gap:10px;padding:16px 18px 10px;display:flex;position:sticky;top:0}.sheet-footer{z-index:2;background:var(--sf);border-top:1px solid var(--ln);gap:10px;margin:18px -18px -18px;padding:12px 18px;display:flex;position:sticky;bottom:0}.btn-round{border-radius:999px;justify-content:center;align-items:center;width:36px;height:36px;padding:0;display:inline-flex}.stat-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.module-grid{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}@media (width>=1024px){.stat-grid{grid-template-columns:repeat(4,1fr)}.module-grid{grid-template-columns:repeat(5,1fr)}}.date-tile{border-radius:12px;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;line-height:1;display:flex}.date-tile-day{font-size:17px;font-weight:700}.date-tile-mon{opacity:.85;margin-top:3px;font-size:10.5px;font-weight:600}.skeleton{background:linear-gradient(90deg, var(--ln) 25%, var(--sf2) 50%, var(--ln) 75%);background-size:200% 100%;border-radius:6px;animation:1.2s linear infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}@media (width<=560px){input:not([type=checkbox]):not([type=radio]),select,textarea{font-size:16px!important}}@media (pointer:coarse){html:has(.overlay:not([hidden] .overlay)){overflow:hidden}}.overlay{overscroll-behavior:contain}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
