/* Memna web app (LIFF), S1. Ported from docs/liff-mockup.html (Sunny memo look): warm paper, one focal note per screen,
   pastel state tints (yellow means only "waiting on you"), Mitr for titles and the deadline, Anuphan for the rest. Fonts
   load with display=swap and never block the first paint. */
/* Memna web app (LIFF), Sunny memo: warm paper, one focal note per screen with tape on the home hero only,
   pastel state tints (yellow means only "waiting on you"), Mitr for titles and the deadline, Anuphan for the rest. */
:root,.app{
  --paper:#FFF9EF;--sheet:#FFFEFA;--raised:#FFFDF6;--ink:#25324A;--body:#25324A;--muted:#5B6678;--rule:#E8E1D5;--soft:#F3EDE2;--seg:#F1EADD;
  --primary:#2C62DC;--primary-press:#2053CA;--on-primary:#FFFFFF;--btn2:#E8F0FF;--on-btn2:#2454AC;--btn2-line:#A9C0EE;--quiet:#526887;
  --memo:#FFF2B4;--on-memo:#6C4B00;--memo-fold:#F2DE8C;--cream:#EFECE5;--on-cream:#615D53;--mint:#DDF5E9;--on-mint:#245D4B;--lav:#EFE7FC;--on-lav:#5A488A;
  --sky:#E7F3FE;--on-sky:#295B8C;--sky-fold:#CFE3F7;--peach:#FFEADA;--on-peach:#8A4B22;--peach-fold:#F6D3BA;--done:#E4F4D9;--on-done:#3B6420;--done-fold:#CDE6BC;--plain-fold:#EDE5D6;
  --nav-sel:#2C62DC;--link:var(--primary);--tape:#9CCBF2;--star:#F2B53A;--ontime:#3E9C78;--late:#C2632F;--toast-bg:#25324A;--toast-fg:#FFFFFF;
  --shadow:0 5px 16px rgba(69,79,111,.09);--shadow-focal:0 8px 24px rgba(69,79,111,.12);
  --memo-ink:var(--on-memo);--memo-pale:var(--memo);--memo-edge:var(--memo-fold);--late-soft:var(--peach);--ok-soft:var(--mint);--info:var(--primary);--info-soft:var(--sky);
  --sel:var(--seg);--ctl-line:var(--btn2-line);--btn-line:var(--btn2-line);--on-ok:var(--on-primary);
  --display:'Mitr','Leelawadee UI',Tahoma,sans-serif;--text:'Anuphan','Leelawadee UI',Tahoma,system-ui,sans-serif;
  --r-card:18px;--r-focal:24px;--r-ctl:14px;--r-btn:16px;
}
.app[data-theme="dark"]{--paper:#161D2A;--sheet:#202B3A;--raised:#273447;--ink:#F4F6F9;--body:#F4F6F9;--muted:#B9C8D9;--rule:#394659;--soft:#2A3648;--seg:#273447;
  --primary:#3868D8;--primary-press:#2D59BB;--on-primary:#FFFFFF;--btn2:#2E405C;--on-btn2:#E9F1FF;--btn2-line:#4F6589;--quiet:#C7D6EA;
  --memo:#433A22;--on-memo:#FFE3A5;--memo-fold:#56492A;--cream:#34312B;--on-cream:#E6E0D4;--mint:#203F3A;--on-mint:#B7E8D9;--lav:#38304D;--on-lav:#DEC9FF;
  --sky:#1E364C;--on-sky:#C6E5FF;--sky-fold:#2A4762;--peach:#493323;--on-peach:#FFCDAC;--peach-fold:#5C4130;--done:#26402A;--on-done:#C8EBB4;--done-fold:#33523A;--plain-fold:#2E3B4E;
  --nav-sel:#9ABDFF;--link:#9ABDFF;--tape:#5C86B0;--star:#F2C14E;--ontime:#6FD0A8;--late:#F2A57B;--toast-bg:#F4F6F9;--toast-fg:#161D2A;
  --shadow:0 5px 18px rgba(0,0,0,.20);--shadow-focal:0 8px 24px rgba(0,0,0,.28);color-scheme:dark;}
@media (prefers-color-scheme:dark){.app:not([data-theme="light"]){--paper:#161D2A;--sheet:#202B3A;--raised:#273447;--ink:#F4F6F9;--body:#F4F6F9;--muted:#B9C8D9;--rule:#394659;--soft:#2A3648;--seg:#273447;
  --primary:#3868D8;--primary-press:#2D59BB;--on-primary:#FFFFFF;--btn2:#2E405C;--on-btn2:#E9F1FF;--btn2-line:#4F6589;--quiet:#C7D6EA;
  --memo:#433A22;--on-memo:#FFE3A5;--memo-fold:#56492A;--cream:#34312B;--on-cream:#E6E0D4;--mint:#203F3A;--on-mint:#B7E8D9;--lav:#38304D;--on-lav:#DEC9FF;
  --sky:#1E364C;--on-sky:#C6E5FF;--sky-fold:#2A4762;--peach:#493323;--on-peach:#FFCDAC;--peach-fold:#5C4130;--done:#26402A;--on-done:#C8EBB4;--done-fold:#33523A;--plain-fold:#2E3B4E;
  --nav-sel:#9ABDFF;--link:#9ABDFF;--tape:#5C86B0;--star:#F2C14E;--ontime:#6FD0A8;--late:#F2A57B;--toast-bg:#F4F6F9;--toast-fg:#161D2A;
  --shadow:0 5px 18px rgba(0,0,0,.20);--shadow-focal:0 8px 24px rgba(0,0,0,.28);color-scheme:dark;}}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--paper);color:var(--body);font-family:var(--text);font-size:16px;line-height:1.5}
button,select,input{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.i{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:2.25;stroke-linecap:round;stroke-linejoin:round}

/* app shell */
.app [hidden]{display:none!important}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);margin:0;padding:0}
.app{position:relative;height:100svh;min-height:100vh;overflow:hidden;background:var(--paper);color:var(--body);display:flex;flex-direction:column}
.chrome{height:44px;flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:0 6px 0 16px;background:var(--sheet);border-bottom:1px solid var(--rule)}
.chrome b{flex:1;font-size:15px;color:var(--ink);font-weight:600}
.chrome .x{border:0;background:transparent;width:44px;height:44px;display:grid;place-items:center;color:var(--muted)}
.app.in-line .chrome{display:none}
.screen{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:20px 16px 104px;scroll-padding-bottom:104px}
.tabs{flex:0 0 auto;display:grid;grid-template-columns:repeat(4,1fr);background:var(--sheet);border-top:1px solid var(--rule);padding-bottom:env(safe-area-inset-bottom)}
.tabs button:focus-visible{outline-offset:-3px}
.tabs button{border:0;background:transparent;min-height:68px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:14px;font-weight:500;color:var(--muted)}
.tabs .pi{width:44px;height:28px;display:grid;place-items:center}
.tabs .i{width:24px;height:24px;stroke-width:2}
.tabs button[aria-current="page"]{color:var(--nav-sel);font-weight:700}
.tabs button[aria-current="page"] .i{stroke-width:2.4;fill:color-mix(in srgb,currentColor 18%,transparent)}

/* type */
.hello{display:flex;align-items:flex-start;gap:12px;margin:0 0 20px}
.hello .hx{flex:1;min-width:0}
.hello h2{font-family:var(--display);font-weight:600;font-size:26px;line-height:34px;color:var(--ink);margin:0}
.hello .d{margin:2px 0 0;font-size:16px;font-weight:600;color:var(--ink)}
.hello .u{display:flex;align-items:center;margin:-4px 0 -10px;color:var(--muted);font-size:14px;font-weight:500}
.hello img{width:68px;height:68px;flex:none;transform:rotate(5deg);margin-top:2px}
.ttl{display:flex;align-items:center;gap:8px;margin:0 0 16px}
.ttl h2{flex:1;font-family:var(--display);font-weight:600;font-size:26px;line-height:34px;color:var(--ink);margin:0}
.ttl .upd{display:block;font-family:var(--text);font-size:14px;line-height:21px;color:var(--muted);font-weight:500}
.ttl .mas{width:44px;height:44px;transform:rotate(5deg)}
.sec{font-family:var(--display);font-size:18px;line-height:26px;font-weight:600;color:var(--ink);margin:24px 0 10px;display:flex;justify-content:space-between;align-items:center}
.sec small{font-family:var(--text);font-weight:500;color:var(--muted);font-size:14px}
.muted{color:var(--muted);font-size:14px}
.iconbtn{border:0;background:transparent;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;color:var(--muted);flex:0 0 auto}
.iconbtn .i{width:18px;height:18px}
@media (hover:hover){.iconbtn:hover{background:var(--soft)}}

/* focal note: the one big thing on a screen */
.focal{position:relative;border-radius:var(--r-focal);padding:20px;margin:0 0 8px;background:var(--sheet);box-shadow:var(--shadow-focal);--tone:var(--muted);--fold:var(--plain-fold)}
.focal.wait{background:var(--memo);--tone:var(--on-memo);--fold:var(--memo-fold)}
.focal.late{background:var(--peach);--tone:var(--on-peach);--fold:var(--peach-fold)}
.focal.work{background:var(--sky);--tone:var(--on-sky);--fold:var(--sky-fold)}
.focal.done{background:var(--done);--tone:var(--on-done);--fold:var(--done-fold)}
.focal.note{border-top-right-radius:6px}
.focal.note::before{content:"";position:absolute;top:-9px;left:28px;width:52px;height:20px;background:var(--tape);opacity:.85;border-radius:3px;transform:rotate(-6deg)}
.focal.note::after{content:"";position:absolute;top:0;right:0;width:30px;height:30px;background:linear-gradient(225deg,var(--paper) 50%,var(--fold) 50%);border-bottom-left-radius:10px;box-shadow:-2px 2px 4px rgba(69,79,111,.10)}
.focal .open{display:block;width:100%;border:0;background:transparent;text-align:left;padding:0;color:inherit}
.focal .open:focus-visible{outline-offset:4px;border-radius:8px}
.focal .tchip{background:rgba(255,255,255,.7)}
.app[data-theme="dark"] .focal .tchip{background:rgba(0,0,0,.22)}
.focal .ft{display:block;font-size:22px;line-height:30px;font-weight:700;color:var(--ink);margin:10px 0 0;overflow-wrap:break-word}
.focal .fg{display:block;font-size:14px;line-height:21px;color:var(--muted);font-weight:500;margin:2px 0 12px}
.focal .fl{display:block;font-size:14px;font-weight:600;color:var(--tone)}
.focal .fd{display:block;font-family:var(--display);font-size:32px;line-height:40px;font-weight:600;color:var(--ink)}
.focal .fr{display:block;font-size:16px;font-weight:600;color:var(--tone);margin:0 0 16px}
.focal .act{padding:0}
.focal .fm{position:absolute;top:18px;right:16px;width:56px;height:56px;transform:rotate(6deg);pointer-events:none}
.focal .btn:not(.p):not(.ok):not(.q):not(.warn){background:var(--sheet)}

/* topic tiles (home) */
.topics{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.topics.minor{margin-top:12px}
.topic{position:relative;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;text-align:left;border:0;border-radius:var(--r-card);padding:14px 14px 12px;min-height:100px;background:var(--sheet);box-shadow:var(--shadow);color:var(--ink)}
.topic .qh{display:flex;align-items:center;justify-content:space-between}
.topic .lb{font-size:16px;line-height:22px;font-weight:600;color:var(--ink);margin-top:10px}
.topic b{font-family:var(--display);font-weight:600;font-size:30px;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.topic .ib{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;background:var(--soft);color:var(--muted)}
.topic .ib .i{width:22px;height:22px}
.topics.minor .topic{min-height:96px}
.topic.on.todo{background:var(--sky)} .topic.on.todo .ib{background:var(--on-sky);color:var(--sky)}
.topic.on.wait{background:var(--memo)} .topic.on.wait .ib{background:var(--on-memo);color:var(--memo)}
.topic.on.late{background:var(--peach)} .topic.on.late .ib{background:var(--on-peach);color:var(--peach)}
.topic.on.changed{background:var(--lav)} .topic.on.changed .ib{background:var(--on-lav);color:var(--lav)}
.topic.on.req{background:var(--mint)} .topic.on.req .ib{background:var(--on-mint);color:var(--mint)}
.topic.on.open{background:var(--cream)} .topic.on.open .ib{background:var(--on-cream);color:var(--cream)}
.topic:not(.on) b{color:var(--muted)}
.topic:not(.on) .ib{background:var(--soft)}


/* task cards (topic pages) */
.card{background:var(--sheet);border-radius:var(--r-card);margin:0 0 12px;overflow:hidden;box-shadow:var(--shadow)}
.card .open:focus-visible,.item:focus-visible,.menu button:focus-visible,.crow:focus-visible{outline-offset:-3px}
.card .open{display:block;width:100%;border:0;background:transparent;text-align:left;padding:16px 16px 12px;color:inherit}
.card .row1{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:0 0 8px}
.card .t{font-size:18px;line-height:26px;font-weight:700;color:var(--ink);display:block}
.card .when{white-space:nowrap;font-family:var(--display);font-weight:600;font-size:18px;color:var(--ink)}
.card .when.late{color:var(--on-peach)}
.card .g{font-size:14px;color:var(--muted);font-weight:500}
.card .act{padding:0 16px 16px}
.card.memo{background:var(--memo)}

/* list rows */
.list{background:var(--sheet);border-radius:var(--r-card);overflow:hidden;box-shadow:var(--shadow)}
.item{display:grid;grid-template-columns:auto 1fr auto;gap:2px 12px;align-items:center;width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;text-align:left;padding:14px 16px;min-height:64px;color:inherit}
.item:last-child{border-bottom:0}
.item .ic{grid-row:1/3;width:36px;height:36px;border-radius:12px;display:grid;place-items:center}
.ic .i,.tchip .i{width:16px;height:16px;stroke-width:2.4}
.item .nm{font-weight:600;color:var(--ink);font-size:16px;line-height:22px}
.item .tm{font-size:14px;font-weight:600;color:var(--muted);text-align:right;max-width:7.5em}
.item .tm.late{color:var(--on-peach)}
.item .sb{grid-column:2/4;font-size:14px;color:var(--muted)}
.item .sb .new{color:var(--on-lav);font-weight:600}
.ic.wait,.ic.take{background:var(--memo);color:var(--on-memo)} .ic.late{background:var(--peach);color:var(--on-peach)} .ic.work{background:var(--mint);color:var(--on-mint)}
.ic.done{background:var(--done);color:var(--on-done)} .ic.req,.ic.open,.ic.cancel,.ic.closed{background:var(--soft);color:var(--muted)}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}
.chips button{border:1px solid var(--rule);background:var(--sheet);border-radius:999px;min-height:44px;padding:0 16px;font-size:14px;font-weight:600;color:var(--ink)}
.chips button[aria-pressed="true"]{background:var(--primary);color:var(--on-primary);border-color:var(--primary)}
.seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;background:var(--seg);border-radius:var(--r-ctl);padding:4px;margin:0 0 14px}
.seg button{border:0;background:transparent;min-height:44px;border-radius:11px;font-size:15px;font-weight:600;color:var(--muted)}
.seg button[aria-pressed="true"]{background:var(--primary);color:var(--on-primary);box-shadow:0 3px 8px rgba(44,98,220,.25)}
.pick{display:flex;align-items:center;gap:8px;margin:0 0 12px}
.chips .pick{margin:0;flex:1 1 140px}
.chips select{min-height:44px;border:1px solid var(--rule);border-radius:999px;background:var(--sheet);padding:0 12px;color:var(--ink);width:100%}
.pick label{font-size:14px;color:var(--muted)}
.pick select{flex:1;min-height:44px;border:1px solid var(--rule);border-radius:var(--r-ctl);background:var(--sheet);padding:0 10px;color:var(--ink)}

/* buttons: primary filled blue, secondary pale blue, quiet text */
.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:48px;padding:0 16px;border-radius:var(--r-ctl);border:1px solid var(--btn2-line);background:var(--btn2);font-weight:700;font-size:16px;color:var(--on-btn2)}
.btn.p,.btn.ok{border:0;min-height:54px;border-radius:var(--r-btn);background:var(--primary);color:var(--on-primary);box-shadow:0 4px 12px rgba(44,98,220,.28)}
.btn.p .i,.btn.ok .i{width:22px;height:22px}
.btn.q,.btn.warn{border:0;background:transparent;min-height:44px;font-weight:600;font-size:15px;color:var(--quiet);box-shadow:none}
.btn.warn{color:var(--on-peach)}
.sheet .btn.warn{background:var(--peach);min-height:48px;font-size:16px;font-weight:700}
@media (hover:hover){.btn:not([disabled]):not([aria-disabled]):not(.q):not(.warn):hover,.sheet .btn.warn:hover{filter:brightness(.96)}.btn.q:not([aria-disabled]):hover,.tp .btn.warn:not([aria-disabled]):hover{text-decoration:underline}}
.btn.p:active:not([disabled]),.btn.ok:active:not([disabled]){background:var(--primary-press)}
.btn[disabled]{opacity:.55;cursor:default}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.stack{display:grid;gap:8px}
.app button{-webkit-tap-highlight-color:transparent;transition:opacity .12s ease,transform .12s cubic-bezier(.22,1,.36,1)}
.app button:active:not([disabled]){opacity:.8}
.app .btn:active:not([disabled]):not([aria-disabled]){transform:scale(.98)}

/* task page */
.tphead{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:-10px 0 8px}
.tphead .upd{display:flex;align-items:center;color:var(--muted);font-size:14px;font-weight:500}
.back .i{margin-left:-4px;width:22px;height:22px}
.back{display:inline-flex;align-items:center;gap:2px;border:0;background:transparent;color:var(--ink);min-height:44px;min-width:44px;padding:0 8px 0 0;margin:-8px 0 4px;font-size:15px;font-weight:600}
.tphead .back{margin:0}
.tchip{flex:none;display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:4px 12px 4px 9px;font-size:14px;font-weight:600}
.tchip.wait,.tchip.take{background:var(--memo);color:var(--on-memo)} .tchip.late{background:var(--peach);color:var(--on-peach)} .tchip.work{background:var(--mint);color:var(--on-mint)}
.tchip.done{background:var(--done);color:var(--on-done)} .tchip.req,.tchip.open,.tchip.cancel,.tchip.closed{background:var(--soft);color:var(--ink)}
.focal .tchip.wait,.focal .tchip.take{color:var(--on-memo)}
.tp h2,.card .t,.item .nm{overflow-wrap:break-word;min-width:0}
.tp h2{font-family:var(--text);font-weight:700;font-size:22px;line-height:30px;color:var(--ink);margin:10px 0 16px}
.tp .focal{margin:0 0 20px}
.whenbox{background:transparent;padding:0 64px 0 0;margin:0 0 16px}
.whenbox small{display:block;color:var(--tone);font-size:14px;font-weight:600}
.whenbox b{display:block;font-family:var(--display);font-size:32px;line-height:40px;font-weight:600;color:var(--ink)}
.whenbox span{display:block;font-size:16px;font-weight:500;color:var(--muted)}
.whenbox.late span{color:var(--on-peach);font-weight:600}
.people{background:var(--sheet);border-radius:var(--r-card);box-shadow:var(--shadow);padding:2px 16px;margin:0 0 14px}
.person{display:flex;align-items:center;gap:12px;min-height:52px;border-bottom:1px solid var(--rule);font-size:16px}
.person:last-child{border-bottom:0}
.person .pi{display:grid;color:var(--muted)}
.person small{font-size:16px;color:var(--muted);font-weight:500}
.person b{margin-left:auto;font-weight:600;color:var(--ink);text-align:right}
.notice{background:var(--raised);border-radius:var(--r-ctl);padding:12px 14px;margin:0 0 12px;font-size:16px;box-shadow:inset 0 0 0 1px var(--rule)}
.notice.memo{background:var(--memo);color:var(--on-memo);box-shadow:none}
.focal .notice{background:rgba(255,255,255,.6);box-shadow:none}
.star{display:inline-flex;align-items:center;gap:4px;font-size:14px;font-weight:600;color:var(--ink);background:var(--soft);border-radius:999px;padding:2px 10px;margin-left:6px;vertical-align:middle}
.sp{height:10px}
.starbtn{border:0;background:transparent;width:44px;height:44px;display:grid;place-items:center;color:var(--muted);flex:none}
.starbtn[aria-pressed="true"]{color:#B07A0E}
.starbtn[aria-pressed="true"] .i{fill:var(--star)}
.quick{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 0}
.quick button{border:1px solid var(--btn2-line);background:var(--btn2);border-radius:999px;min-height:44px;padding:0 14px;font-size:14px;font-weight:600;color:var(--on-btn2)}

/* calendar */
.week{display:grid;grid-template-columns:repeat(7,1fr);align-items:center;gap:2px;margin:0 0 8px;background:var(--sheet);border-radius:var(--r-card);box-shadow:var(--shadow);padding:8px 6px}
.wkhead{display:flex;align-items:center;justify-content:space-between;gap:4px;margin:0 0 8px}
.wkhead span{font-family:var(--display);font-size:19px;color:var(--ink);font-weight:600}
.wkhead span.muted{font-family:var(--text);font-size:14px;font-weight:500;color:var(--muted)}
.day{border:0;background:transparent;border-radius:14px;min-height:72px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px 0;color:var(--ink)}
.day small{font-size:14px;color:var(--muted);font-weight:500}
.day b{font-family:var(--display);font-size:19px;color:var(--ink);font-weight:600}
.day .dots{height:8px;display:flex;gap:3px}
.day .dots i{width:6px;height:6px;border-radius:50%;background:var(--muted)}
.day .dots i.l{background:transparent;width:auto;height:auto;font-style:normal;font-size:14px;line-height:8px;color:var(--on-peach);font-weight:700}
.day[aria-pressed="true"]{background:var(--primary);box-shadow:0 4px 10px rgba(44,98,220,.3)}
.day[aria-pressed="true"] small,.day[aria-pressed="true"] b{color:var(--on-primary)}
.day[aria-pressed="true"] .dots i{background:var(--on-primary)}
.day[aria-pressed="true"] .dots i.l{color:var(--on-primary);background:transparent}
.day.today:not([aria-pressed="true"]){background:var(--sky)}
.nav{border:0;background:transparent;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;color:var(--ink)}
.nav .i{width:22px;height:22px}
@media (hover:hover){.nav:hover{background:var(--soft)}}
.crow{display:flex;align-items:center;gap:14px;width:100%;text-align:left;border:0;background:var(--sheet);border-radius:var(--r-card);box-shadow:var(--shadow);padding:14px 10px 14px 16px;margin:0 0 10px;min-height:76px;color:var(--ink)}
.crow .ct{font-family:var(--display);font-size:20px;font-weight:600;min-width:3.1em}
.crow .cm{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:6px}
.crow .nm{font-weight:600;font-size:16px;line-height:22px;overflow-wrap:break-word;max-width:100%}
.crow .go{color:var(--muted)}
.month{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
/* below 364 px seven days in the padded card are under 44 px wide (36.67 at 320, review 2026-10-30 #5): the week strip
   and the month grid run edge to edge there instead, 45.7 and 44 px a day at 320 */
@media (max-width:363px){.week{margin-left:-16px;margin-right:-16px;border-radius:0;padding:8px 0;gap:0}.month{margin-left:-16px;margin-right:-16px;gap:2px}}
.month .mh{text-align:center;font-size:14px;color:var(--muted);font-weight:500}
.mcell{border:0;background:var(--sheet);box-shadow:var(--shadow);border-radius:12px;min-height:48px;font-size:15px;font-weight:600;color:var(--ink);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2px}
.mcell.out{background:transparent;box-shadow:none;color:var(--muted);font-weight:500}
.mcell.today{background:var(--sky);box-shadow:inset 0 0 0 2px var(--primary)}
.mcell .n{font-size:14px;font-weight:700;line-height:1;color:var(--link)}
.mcell .n.l{color:var(--on-peach)}

/* priority groups */
.qd{background:var(--sheet);border-radius:var(--r-card);box-shadow:var(--shadow);overflow:hidden;margin:0 0 14px}
.qd h3{display:flex;align-items:center;gap:10px;margin:0;padding:10px 14px;font-size:16px;line-height:22px;font-weight:700}
.qd h3 .qi{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:rgba(255,255,255,.7);flex:none}
.app[data-theme="dark"] .qd h3 .qi{background:rgba(0,0,0,.2)}
.qd h3 .qi .i{width:18px;height:18px}
.qcard.none .qi{background:var(--soft);color:var(--muted)}
.qd h3 small{margin-left:auto;font-weight:600;font-size:14px;white-space:nowrap}
.qd.q1 h3{background:var(--peach);color:var(--on-peach)} .qd.q2 h3{background:var(--sky);color:var(--on-sky)}
.qd.q3 h3{background:var(--lav);color:var(--on-lav)} .qd.q4 h3{background:var(--mint);color:var(--on-mint)}
.qd .list{box-shadow:none;border-radius:0}
.prow{display:flex;align-items:center;gap:4px;padding:4px 4px 4px 16px;border-bottom:1px solid var(--rule);min-height:64px}
.prow:last-child{border-bottom:0}
.prow .nm{flex:1;min-width:0;border:0;background:transparent;text-align:left;padding:8px 0;min-height:44px;display:flex;flex-direction:column;color:var(--ink);font-weight:600;font-size:16px;line-height:22px;overflow-wrap:break-word}
.prow .nm small{font-weight:500;font-size:14px;line-height:21px;color:var(--muted)}
.prow .nm small .late{color:var(--on-peach);font-weight:700}
.prow .nm:focus-visible{outline-offset:2px;border-radius:6px}

/* priority grid: four tinted cards, count large, first two titles as a preview */
.qgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
/* the column axis over the grid (Phu 2026-10-29: columns ด่วน | ไม่ด่วน, as card 17) */
.qaxis{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 0 8px}
.qaxis span{text-align:center;font-weight:700;font-size:15px;color:var(--ink);background:var(--soft);border-radius:8px;padding:6px 0}
.qcard{display:flex;flex-direction:column;align-items:stretch;text-align:left;border:0;border-radius:var(--r-card);padding:14px;min-height:178px;box-shadow:var(--shadow);color:var(--ink);--qt:var(--muted)}
.qcard.q1{background:var(--peach);--qt:var(--on-peach);--qbg:var(--peach)} .qcard.q2{background:var(--sky);--qt:var(--on-sky);--qbg:var(--sky)}
.qcard.q3{background:var(--lav);--qt:var(--on-lav);--qbg:var(--lav)} .qcard.q4{background:var(--mint);--qt:var(--on-mint);--qbg:var(--mint)}
.qcard.none{background:var(--sheet)}
.qcard .qh{display:flex;align-items:center;justify-content:space-between}
.qcard .qi{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;background:var(--qt);color:var(--qbg,var(--sheet))}

.qcard .qi .i,.topic .ib .i{width:22px;height:22px;stroke-width:2.25}
.i.v4{fill:currentColor;stroke:none}
.qcard .qi .i.v4,.topic .ib .i.v4{width:24px;height:24px}
.qcard .qh b{font-family:var(--display);font-weight:600;font-size:30px;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.qcard.none .qh b{color:var(--muted)}
.qcard .ql{font-size:16px;line-height:22px;font-weight:700;color:var(--qt);margin-top:12px}
.qcard .qs{font-size:14px;line-height:20px;font-weight:600;color:var(--qt)}
.qcard .qp{display:grid;gap:2px;margin-top:10px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--qt) 22%,transparent)}
.qcard .qp span{font-size:14px;line-height:21px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qcard .qp .more{color:var(--qt);font-weight:600}
.qcard:focus-visible{outline-offset:3px}
@media (max-width:340px){.qgrid{grid-template-columns:1fr}.qaxis{display:none}}

/* me / stats */
.big{font-family:var(--display);font-weight:700;font-size:48px;color:var(--on-mint);line-height:1}
.statcard{background:var(--sheet);border-radius:var(--r-card);box-shadow:var(--shadow);padding:18px;margin:0 0 12px}
.statcard h3{margin:0 0 8px;font-family:var(--display);font-weight:600;font-size:17px;color:var(--ink)}
.bars text{font-family:var(--text);font-size:20px;fill:var(--muted)}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:14px;color:var(--muted);margin:8px 0 0}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:12px;height:12px;border-radius:3px;display:inline-block}
.gl{display:grid;grid-template-columns:1fr auto;gap:2px 8px;padding:10px 0;border-top:1px solid var(--rule);font-size:16px}
.gl:first-of-type{border-top:0}
.gl b{text-align:right}
.gl small{grid-column:1/-1;color:var(--muted);font-size:14px}
table{width:100%;border-collapse:collapse;font-size:15px}
caption{text-align:left;color:var(--muted);font-size:14px;padding:0 0 6px}
th,td{padding:9px 4px;border-bottom:1px solid var(--rule);text-align:left}
th{color:var(--muted);font-weight:500;font-size:14px}
td.n,th.n{text-align:right;font-variant-numeric:tabular-nums}
/* blue text uses --link: in dark the button blue on the page is 3.33:1 (review 2026-10-30 #6); fills keep --primary */
.linkbtn{border:0;background:transparent;color:var(--link);min-height:44px;padding:0;font-size:15px;font-weight:600}
.menu{background:var(--sheet);border-radius:var(--r-card);box-shadow:var(--shadow);overflow:hidden;margin:0 0 12px}
.menu button{display:flex;align-items:center;gap:12px;width:100%;border:0;border-bottom:1px solid var(--rule);background:transparent;min-height:56px;padding:0 16px;text-align:left;font-size:16px;font-weight:500;color:var(--ink)}
.menu button:last-child{border-bottom:0}
.menu .i{width:22px;height:22px;color:var(--muted)}
.menu .go{margin-left:auto;width:18px;height:18px}
.menu .cnt{margin-left:auto;font-weight:600;font-variant-numeric:tabular-nums}
.menu .cnt + .go{margin-left:4px}

/* help */
.help .hc{background:var(--sheet);border-radius:var(--r-card);box-shadow:var(--shadow);padding:14px 16px;margin:0 0 10px}
.help h3{margin:0 0 4px;font-family:var(--display);font-weight:600;font-size:17px;color:var(--ink)}
.help p{margin:0;font-size:16px}

/* states */
.empty{text-align:center;padding:36px 12px}
.empty img{width:96px;height:96px}
.empty h3{font-family:var(--display);font-weight:600;font-size:20px;color:var(--ink);margin:8px 0 4px}
.empty p{color:var(--muted);margin:0 auto 16px;max-width:28ch;font-size:16px}
.empty .btn{max-width:240px;margin:0 auto}
.loading{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--muted);font-weight:500;animation:loading-appear .2s ease-out .25s both}
/* Every open, tab change and return to the page passes through loading; a quick answer swaps the page before the scene shows. */
@keyframes loading-appear{from{opacity:0}}
/* Three-second courier loop: run .825s, talk .675s at each end. All movement is decorative. */
.loading-scene{position:relative;width:min(100%,460px);height:184px;flex:none;overflow:hidden;--courier:128px;--loading-loop:3s}
.loading-friend{position:absolute;bottom:28px;width:76px;height:76px}
.loading-friend-left{left:0}
.loading-friend-right{right:0}
.loading-friend img{display:block;width:100%;height:100%;object-fit:contain}
.loading-route{position:absolute;inset:0;animation:loading-journey var(--loading-loop) linear infinite}
.loading-courier{position:absolute;left:calc(50% - var(--courier)/2);bottom:0;width:var(--courier);height:var(--courier);animation:loading-turn var(--loading-loop) step-end infinite}
.loading-run,.loading-hold{position:absolute;inset:0;display:block;width:100%;height:100%}
.loading-run{background:url('/mascots/loading/run-folder-v1.webp') 0 0 / 800% 100% no-repeat;animation:loading-stride .4s steps(8) infinite,loading-running var(--loading-loop) step-end infinite}
.loading-hold{object-fit:contain;animation:loading-resting var(--loading-loop) step-end infinite}
.loading-chat{position:absolute;bottom:calc(100% + 7px);left:calc(50% - 23px);width:46px;height:27px;border:1.5px solid var(--on-memo);border-radius:12px;background:var(--sheet);display:flex;align-items:center;justify-content:center;gap:4px;opacity:0}
.loading-chat::after{content:'';position:absolute;bottom:-5px;left:20px;width:7px;height:7px;border-right:1.5px solid var(--on-memo);border-bottom:1.5px solid var(--on-memo);background:var(--sheet);transform:rotate(45deg)}
.loading-chat i{width:4px;height:4px;background:var(--on-memo);border-radius:50%;animation:loading-dot .6s ease-in-out infinite}
.loading-chat i:nth-child(2){animation-delay:.12s}.loading-chat i:nth-child(3){animation-delay:.24s}
.loading-courier>.loading-chat{bottom:calc(100% - 16px);animation:loading-speaking var(--loading-loop) step-end infinite}
.loading-friend-left>.loading-chat{animation:loading-left-reply var(--loading-loop) step-end infinite}
.loading-friend-right>.loading-chat{animation:loading-right-reply var(--loading-loop) step-end infinite}
@keyframes loading-stride{to{background-position:calc(800% / 7) 0}}
@keyframes loading-journey{0%{transform:translateX(-20%)}27.5%,50%{transform:translateX(20%)}77.5%,100%{transform:translateX(-20%)}}
@keyframes loading-turn{0%{transform:scaleX(1)}50%{transform:scaleX(-1)}}
@keyframes loading-running{0%,50%{opacity:1}27.5%,77.5%{opacity:0}}
@keyframes loading-resting{0%,50%{opacity:0}27.5%,77.5%{opacity:1}}
@keyframes loading-speaking{0%,38%,50%,88%{opacity:0}28%,78%{opacity:1}}
@keyframes loading-right-reply{0%,49%{opacity:0}39%{opacity:1}}
@keyframes loading-left-reply{0%,99%{opacity:0}89%{opacity:1}}
@keyframes loading-dot{50%{transform:translateY(-2px)}}
.loading-still .loading-scene *{animation:none!important}
.loading-still .loading-route{transform:none}
.loading-still .loading-run,.loading-still .loading-chat{display:none}
.loading-still .loading-hold{opacity:1}
@media (max-width:360px){.loading-scene{--courier:112px}.loading-friend{width:60px;height:60px;bottom:25px}}
@media (prefers-reduced-motion:reduce){
  .loading-scene *{animation:none!important}
  .loading-route{transform:none}
  .loading-run,.loading-chat{display:none}
  .loading-hold{opacity:1}
}
@keyframes bob{50%{transform:translateY(-6px)}}
.friend{display:flex;align-items:center;gap:10px;background:var(--sky);border-radius:var(--r-card);padding:8px 2px 8px 10px;margin:16px 0 0;font-size:14px;font-weight:500;color:var(--on-sky)}
.friend img{width:40px;height:40px;flex:none;transform:rotate(-6deg)}
.friend span{flex:1}
.friend .fb{border:0;background:transparent;color:var(--link);border-radius:10px;min-height:44px;padding:0 8px;font-size:15px;font-weight:700}
.friend .fx{border:0;background:transparent;width:44px;height:44px;display:grid;place-items:center;color:var(--on-sky)}

/* toast + sheet */
.toast{position:absolute;left:16px;right:16px;bottom:80px;z-index:5;display:flex;align-items:center;gap:8px;background:var(--toast-bg);color:var(--toast-fg);border-radius:16px;padding:4px 4px 4px 16px;font-size:15px;font-weight:500;box-shadow:0 8px 24px rgba(37,50,74,.25)}
.toast span{flex:1;padding:8px 0}
.toast button:focus-visible{outline-color:var(--toast-fg);outline-offset:-3px}
.toast button{border:0;background:transparent;color:inherit;min-height:44px;min-width:44px;display:grid;place-items:center;font-size:15px;font-weight:700}
.sheetbg{position:absolute;inset:0;background:rgba(37,50,74,.45);display:none;align-items:flex-end;z-index:6}
.sheetbg.on{display:flex}
.sheet{background:var(--sheet);width:100%;border-radius:24px 24px 0 0;padding:8px 16px 20px;max-height:85%;overflow-y:auto}
.sheet .grab{width:40px;height:5px;border-radius:3px;background:var(--rule);margin:0 auto 12px}
.sheet h3{font-family:var(--display);font-weight:600;font-size:20px;color:var(--ink);margin:0 0 4px}
.sheet p{margin:0 0 12px;color:var(--body)}
.sheet label{display:block;font-size:14px;color:var(--muted);margin:0 0 4px}
.sheet input{width:100%;min-height:50px;border:1.5px solid var(--btn2-line);border-radius:var(--r-ctl);padding:0 12px;background:var(--sheet);color:var(--ink)}
.sheet input[aria-invalid="true"]{border-color:var(--late);box-shadow:inset 0 0 0 1px var(--late)}
.sheet .hint{color:var(--on-memo);background:var(--memo);border-radius:8px;padding:0 8px;font-size:14px;margin:0 0 8px}
.sheet .hint:empty{display:none}
.sheet .err{color:var(--on-peach);font-weight:600;font-size:14px;min-height:1.5em;margin:4px 0 8px}
.sheet .opts{display:grid;gap:8px;margin:4px 0 0}
.sheet [hidden]{display:none!important}
.resting .btn,.resting .quick button,.app.resting-page .act .btn,.app.resting-page .tp .btn{opacity:.55}

@media (prefers-reduced-motion:reduce){.loading img{animation:none}.app button{transition:none}.app .btn:active:not([disabled]){transform:none}}
@media (max-width:380px){.month{gap:2px}.week{padding:6px 2px}}

/* S1: the mailbox count on the วันนี้ tab (QUIET-GROUP-PLAN §3.1 "ใหม่", docs/WEB-APP-S1-PLAN.md §2) */
.tabs .pi{position:relative}
.badge{position:absolute;top:-2px;right:0;min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:#C2632F;color:#fff;font-size:13px;line-height:20px;font-weight:700;text-align:center;font-variant-numeric:tabular-nums}
a.btn{text-decoration:none}
/* small spacing classes: the page sets no inline style (CSP style-src 'self') */
.empty.tight{padding:8px 0}
.m0{margin:0}
.mb12{margin:0 0 12px}
.mt12{margin:12px 0 0}
.person b.hist{font-weight:500;text-align:left;margin-left:0}
.person b{overflow-wrap:anywhere}

/* Computer screens, and LINE for PC windows wider than a phone: the app stays one phone-width column in the middle, on a
   slightly deeper paper, instead of stretching every card and the four tabs across the screen. Toasts and the bottom sheet
   are positioned inside .app, so they stay in the column too. */
@media (min-width:600px){
  body{background:#F1E9DB}
  .app{max-width:520px;margin:0 auto;border-inline:1px solid var(--rule);box-shadow:0 0 48px rgba(69,79,111,.10)}
}
@media (min-width:600px) and (prefers-color-scheme:dark){body{background:#0E131C}}
/* S2's first slice: the card's buttons on the task page (Phu 2026-10-29) */
.acts{display:flex;flex-direction:column;gap:8px}
.tpick{display:flex;flex-direction:column;gap:6px}
.tpick label{font-size:14px;color:var(--tone)}
.tpick input{min-height:48px;font-size:16px;padding:0 12px;border-radius:var(--r-ctl);border:1px solid var(--btn2-line);background:var(--sheet);color:inherit}
