/* Self-hosted Google fonts (SIL OFL). Files come from `node scripts/fetch-fonts.mjs` (see public/fonts/README.md); until then the stack falls back to device fonts. */
@font-face{font-family:'DM Sans';font-style:normal;font-weight:100 1000;font-display:swap;src:local('DM Sans'),url('/fonts/DMSans.woff2') format('woff2')}
@font-face{font-family:'Playpen Sans';font-style:normal;font-weight:100 800;font-display:swap;src:local('Playpen Sans'),url('/fonts/PlaypenSans.woff2') format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:local('Inter'),url('/fonts/Inter.woff2') format('woff2')}
@font-face{font-family:'Work Sans';font-style:normal;font-weight:100 900;font-display:swap;src:local('Work Sans'),url('/fonts/WorkSans.woff2') format('woff2')}
@font-face{font-family:'BioRhyme';font-style:normal;font-weight:300 800;font-display:swap;src:local('BioRhyme'),url('/fonts/BioRhyme.woff2') format('woff2')}
@font-face{font-family:'Poppins';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/Poppins-400.woff2') format('woff2')}
@font-face{font-family:'Poppins';font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/Poppins-600.woff2') format('woff2')}
@font-face{font-family:'Space Mono';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/SpaceMono-400.woff2') format('woff2')}
@font-face{font-family:'Space Mono';font-style:normal;font-weight:700;font-display:swap;src:url('/fonts/SpaceMono-700.woff2') format('woff2')}
:root{--teal:#0B6B63;--teal-d:#0A4F49;--mint:#DDF3EA;--bg:#F3F5F2;--card:#fff;--ink:#1E2A28;--ink2:#4A5651;--line:#D5DCD7;--line2:#E1E7E2;--danger:#B42318}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font-family:'DM Sans',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;-webkit-text-size-adjust:100%}
button{font:inherit;color:inherit;cursor:pointer}
input,select,textarea{font:inherit;color:inherit}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible,label:focus-within{outline:3px solid #2F6FB0;outline-offset:2px}
.shell{max-width:620px;margin:0 auto;height:100dvh;display:flex;flex-direction:column;position:relative;background:var(--bg)}
.offline{background:#FFEFC7;color:#5A3A00;font-size:14px;font-weight:600;padding:10px 16px;border-bottom:1px solid #E8D29B}
.body{flex:1;min-height:0;overflow-y:auto;padding:16px 16px 24px;overscroll-behavior:contain}
.top{display:flex;align-items:center;gap:8px;margin-bottom:14px;min-height:44px}
.top h1{margin:0;flex:1;min-width:0;font-size:28px;font-weight:700;letter-spacing:-.4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.top .ttl{flex:1;min-width:0}
.top .ttl h1{font-size:24px}
.brand{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.homebar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.btn{min-height:44px;padding:0 16px;border-radius:12px;border:1px solid var(--line);background:#fff;font-weight:700;font-size:15px;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.btn.primary{background:var(--teal);border-color:var(--teal);color:#fff}
.btn.danger{color:var(--danger);border-color:#E6B8B3}
.btn.block{width:100%}
.btn[disabled]{opacity:.45;cursor:default}
.icon-btn{width:44px;height:44px;border-radius:12px;border:1px solid var(--line);background:#fff;display:inline-flex;align-items:center;justify-content:center;flex:none}
.icon-btn.plain{border-color:transparent;background:transparent}
.tabs{display:flex;border-top:1px solid var(--line);background:#fff;padding-bottom:env(safe-area-inset-bottom)}
.tab{flex:1;min-height:52px;border:0;background:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:12px;font-weight:700;color:var(--ink2)}
.tab[aria-current=page]{color:var(--teal)}
.card{background:var(--card);border:1px solid var(--line2);border-radius:16px}
.stats{display:flex;align-items:center;gap:8px;width:100%;padding:14px;margin-bottom:14px;text-align:left}
.stat{flex:1;display:flex;flex-direction:column;min-width:0}
.stat b{font-size:24px;font-weight:700;line-height:1.1}
.stat small{font-size:13px;color:var(--ink2);font-weight:600}
.stat.over b,.stat.over small{color:var(--danger)}
.listcard{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:14px;margin-bottom:10px;min-height:68px}
.lc-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.mark{width:36px;height:36px;border-radius:10px;flex:none;display:flex;align-items:center;justify-content:center;font-size:20px}
.listcard .title{font-size:17px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pill{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;font-size:12px;font-weight:700;background:var(--mint);color:var(--teal-d);flex:none}
.badge{min-width:24px;height:24px;padding:0 7px;border-radius:999px;background:var(--danger);color:#fff;font-size:13px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;flex:none}
.listcard>svg:last-child{color:#6B7773;flex:none}
.archbtn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:52px;border:1.5px dashed #A9B4AF;border-radius:16px;background:none;color:var(--ink2);font-weight:700;margin-top:4px}
.dot{width:10px;height:10px;border-radius:999px;flex:none}
.sub{font-size:13px;color:var(--ink2)}
.title{font-weight:700;font-size:16px}
.lede{font-size:15px;color:var(--ink2);margin:-6px 2px 14px}
.chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:700;background:#E7ECE8;color:#3F4A46}
.add{display:flex;gap:8px;position:sticky;bottom:-24px;margin:12px -16px -24px;padding:10px 16px 14px;background:var(--bg);border-top:1px solid var(--line2)}
.add input{flex:1;min-width:0;min-height:48px;border-radius:12px;border:1px solid var(--line);padding:0 14px;background:#fff}
.add select{max-width:36%;min-height:48px;border-radius:12px;border:1px solid var(--line);padding:0 8px;background:#fff}
.addbtn{width:48px;height:48px;border-radius:12px;border:0;background:var(--teal);display:flex;align-items:center;justify-content:center;flex:none}
.searchbar{display:flex;align-items:center;gap:8px;margin-bottom:12px;position:relative}
.searchbar .sicon{position:absolute;left:12px;top:13px;color:#6B7773;pointer-events:none;display:flex}
.search{flex:1;min-width:0;width:100%;min-height:44px;border-radius:12px;border:1px solid var(--line);padding:0 14px 0 38px;background:#fff}
.chips{display:flex;flex-wrap:wrap;margin-bottom:6px}
.group{margin-bottom:14px}
.ghead{display:flex;align-items:center;gap:8px;margin:16px 4px 8px;font-size:13px;font-weight:700;letter-spacing:.6px;text-transform:uppercase}
.ghead .count{margin-left:auto;color:var(--ink2);font-weight:600;letter-spacing:0}
.rows{overflow:hidden}
.row-wrap{position:relative;touch-action:pan-y;border-bottom:1px solid var(--line2)}
.row-wrap:last-child{border-bottom:0}
.row-bg{position:absolute;inset:0;display:flex;align-items:center;padding:0 18px;color:#fff;font-weight:700;font-size:14px;gap:8px}
.row-bg.r{background:var(--teal);justify-content:flex-start}.row-bg.l{background:var(--danger);justify-content:flex-end}
.row{position:relative;display:flex;align-items:flex-start;gap:8px;background:#fff;padding:6px 4px 6px 4px;min-height:56px;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.row.dragging{z-index:5;box-shadow:0 10px 24px rgba(0,0,0,.2);opacity:.96}
.row-wrap.drop-before::before{content:'';position:absolute;left:0;right:0;top:-2px;height:3px;border-radius:3px;background:var(--teal);z-index:6}
.check{width:44px;height:44px;border:0;background:none;display:flex;align-items:center;justify-content:center;flex:none;padding:0}
.circle{width:24px;height:24px;border-radius:999px;border:2.5px solid #8A9490;display:flex;align-items:center;justify-content:center}
.circle.on{background:var(--teal);border-color:var(--teal)}
.rbody{flex:1;min-width:0;padding:8px 0;text-align:left;background:none;border:0}
.rtitle{font-weight:600;font-size:16px;line-height:1.3;overflow-wrap:anywhere}
.done .rtitle{text-decoration:line-through;color:#6B7773}
.rnote{font-size:13px;color:var(--ink2);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px;align-items:center;font-size:12px;color:var(--ink2)}
.meta .pri,.meta .due,.meta .tag,.meta .inlist{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-weight:700;background:#E7ECE8;color:#3F4A46}
.meta .due.over{background:#FDE3E0;color:var(--danger)}
.meta .tag{background:#E4EEF8;color:#21486E}
.meta .inlist{background:none;padding-left:0;color:var(--ink2);font-weight:600}
.meta .bell{display:inline-flex;color:var(--teal)}
.handle{width:44px;height:44px;border:0;background:none;display:flex;align-items:center;justify-content:center;flex:none;touch-action:none;color:#6B7773;cursor:grab}
.nohandle{width:8px;flex:none}
.empty{text-align:center;color:var(--ink2);padding:36px 12px}
.overlay{position:fixed;inset:0;background:rgba(20,28,26,.5);z-index:40;display:flex;align-items:flex-end;justify-content:center}
.sheet{width:100%;max-width:620px;max-height:90dvh;overflow-y:auto;background:#fff;border-radius:24px 24px 0 0;padding:8px 16px calc(20px + env(safe-area-inset-bottom))}
.shead{display:flex;align-items:center;gap:8px;position:sticky;top:-8px;background:#fff;margin:0 -16px 8px;padding:10px 8px 8px 16px;z-index:2}
.shead h2{margin:0;flex:1;min-width:0;font-size:20px;font-weight:700}
.donebtn{min-height:44px;min-width:64px;padding:0 12px;border:0;border-radius:12px;background:none;color:var(--teal);font-weight:700;font-size:16px}
.field{margin-bottom:14px}
.field>label,.lbl{display:block;font-size:13px;font-weight:700;color:var(--ink2);margin-bottom:6px}
.in{width:100%;min-height:46px;border-radius:12px;border:1px solid var(--line);padding:0 12px;background:#fff}
textarea.in{padding:10px 12px;min-height:76px;resize:vertical}
.seg{display:flex;gap:6px;flex-wrap:wrap}
.seg button{flex:1 1 0;min-width:64px;min-height:44px;border-radius:12px;border:1.5px solid var(--line);background:#fff;font-weight:700;font-size:14px}
.seg button[aria-pressed=true]{border-color:var(--teal);background:var(--mint);color:var(--teal-d)}
.radios{border:0;margin:0 0 16px;padding:0}
.radios legend{font-size:13px;font-weight:700;color:var(--ink2);text-transform:uppercase;letter-spacing:.6px;margin:0 0 6px;padding:0}
.radio{display:flex;align-items:center;gap:12px;min-height:56px;padding:6px 10px;border:1.5px solid var(--line2);border-radius:12px;margin-bottom:6px;cursor:pointer}
.radio:has(input:checked){border-color:var(--teal);background:var(--mint)}
.radio input{width:22px;height:22px;flex:none;margin:0;accent-color:#0B6B63}
.radio input:focus-visible{outline:none}
.radio .ricon{display:flex;color:var(--teal-d);flex:none}
.radio span{font-weight:600}
.radio small{display:block;font-weight:400;font-size:13px;color:var(--ink2)}
.menu button.item{display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:6px 12px;border:0;border-bottom:1px solid var(--line2);background:none;text-align:left;font-weight:600;font-size:16px}
.menu button.item:last-child{border-bottom:0}
.menu button.item>span{flex:1;min-width:0}
.menu button.item.danger{color:var(--danger)}
.menu button.item small{display:block;font-weight:400;color:var(--ink2);font-size:13px}
.swatches{display:flex;flex-wrap:wrap;gap:8px}
.sw{width:44px;height:44px;border-radius:12px;border:3px solid transparent;display:flex;align-items:center;justify-content:center}
.sw[aria-pressed=true]{border-color:var(--ink)}
.catrow{display:flex;align-items:center;gap:6px;margin-bottom:8px}
.catrow input{flex:1;min-width:0;min-height:44px;border-radius:10px;border:1px solid var(--line);padding:0 10px}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:92px;background:#1E2A28;color:#fff;padding:10px 12px 10px 16px;border-radius:12px;z-index:60;font-weight:600;display:flex;gap:12px;align-items:center;max-width:92vw}
.toast button{background:none;border:0;color:#7FE0D4;font-weight:700;min-height:44px;min-width:44px}
.banner{position:fixed;left:50%;transform:translateX(-50%);top:12px;width:min(92vw,420px);background:rgba(255,255,255,.98);border:1px solid var(--line);border-radius:20px;padding:12px 14px;box-shadow:0 10px 30px rgba(0,0,0,.28);z-index:70}
.banner .acts{display:flex;gap:8px;margin-top:10px}
.banner .acts .btn{flex:1}
.err{color:var(--danger);font-size:13px;font-weight:600;margin-top:6px}
.note{font-size:13px;color:var(--ink2);margin:10px 2px 0}
.tagbtn{margin:0 6px 8px 0;min-height:44px;padding:0 14px;border-radius:999px;border:1.5px solid var(--line);background:#fff;font-weight:700}
.tagbtn[aria-pressed=true]{background:var(--mint);border-color:var(--teal);color:var(--teal-d)}
@media (prefers-reduced-motion:no-preference){.row{transition:transform .15s}.row.dragging,.row.swiping{transition:none}}

.syncline{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--teal-d)}
.viewnote{display:flex;gap:10px;align-items:flex-start;background:#FFF1CC;color:#4D2F00;border-radius:12px;padding:10px 12px;font-weight:600;font-size:14px;margin:0 0 12px}
.viewnote svg{flex:none}
html.modal-open,html.modal-open body{overflow:hidden}
html.modal-open .body{overflow:hidden}
.gate{position:fixed;inset:0;z-index:80;background:rgba(14,22,20,.66);display:flex;align-items:center;justify-content:center;padding:20px;overflow:hidden;overscroll-behavior:contain}
.gate .panel{width:100%;max-width:460px;max-height:100%;overflow-y:auto;overscroll-behavior:contain;background:#fff;border-radius:24px;padding:24px 20px 20px;box-shadow:0 20px 50px rgba(0,0,0,.35)}
.gate h2{margin:14px 0 6px;font-size:24px;font-weight:800;letter-spacing:-.3px}
.gate p{margin:0 0 18px;font-size:15px;color:#3E4A46;line-height:1.45}
.keybox{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:17px;font-weight:600;line-height:1.5;word-break:break-all;background:var(--bg);border:1.5px solid var(--line);border-radius:12px;padding:14px;user-select:all;-webkit-user-select:all}
.warn{display:flex;gap:10px;margin-top:14px;background:#FFF1CC;border-radius:12px;padding:12px;font-size:13px;line-height:1.45;color:#4D2F00;font-weight:600}
.chk{display:flex;align-items:center;gap:12px;min-height:52px;margin-top:8px;font-size:15px;font-weight:600}
.chk input{width:24px;height:24px;flex:none;accent-color:#0B6B63}

/* ---------- emoji picker bits ---------- */
.ico{margin-right:6px;font-family:'Apple Color Emoji','Segoe UI Emoji','Noto Color Emoji',sans-serif}
.mark{width:36px;height:36px;border-radius:12px;border:1.5px solid;display:flex;align-items:center;justify-content:center;font-size:20px;flex:none;font-family:'Apple Color Emoji','Segoe UI Emoji','Noto Color Emoji',sans-serif}
.emoji-in{font-size:22px;text-align:center;max-width:96px;font-family:'Apple Color Emoji','Segoe UI Emoji','Noto Color Emoji',system-ui,sans-serif}
.picks{display:flex;flex-wrap:wrap;gap:6px}
.pick{width:44px;height:44px;border-radius:12px;border:1.5px solid var(--line);background:#fff;font-size:22px;line-height:1;font-family:'Apple Color Emoji','Segoe UI Emoji','Noto Color Emoji',sans-serif}
.pick[aria-pressed=true]{border-color:var(--teal);background:var(--mint)}

/* ---------- list themes (device fonts only: nothing is downloaded) ---------- */
.themes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.theme-tile{min-height:64px;border-radius:12px;border:2px solid var(--line);padding:6px;display:flex;align-items:flex-end;justify-content:flex-start;text-align:left;font-weight:700;font-size:12px;color:#1E2A28}
.theme-tile[aria-pressed=true]{border-color:var(--teal);box-shadow:0 0 0 2px var(--teal)}
.tp-name{background:rgba(255,255,255,.85);border-radius:6px;padding:1px 5px}
.tp-plain{background:#fff}.tp-mint{background:#DDF3EA}.tp-sky{background:#DCEBFA}.tp-blush{background:#FBE3E6}.tp-lilac{background:#E9E2F7}.tp-sand{background:#F1E6D2}.tp-slate{background:#D9DEE3}
.tp-legal{background:#FBF1A0 repeating-linear-gradient(0deg,transparent 0 13px,#8FB4E8 13px 14px)}
.tp-chalk{background:#2B3F37}.tp-chalk .tp-name{background:rgba(0,0,0,.35);color:#F4F1E6}
.tp-graph{background-color:#F7FBF4;background-image:linear-gradient(#CFE3D0 1px,transparent 1px),linear-gradient(90deg,#CFE3D0 1px,transparent 1px);background-size:12px 12px}
.tp-kraft{background:#D7B98E}
.tp-blueprint{background-color:#1F4E8C;background-image:linear-gradient(rgba(255,255,255,.2) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.2) 1px,transparent 1px);background-size:12px 12px}.tp-blueprint .tp-name{background:rgba(0,0,0,.35);color:#EAF3FF}

.themed{--ink:#1E2A28;--ink2:#4A5651;--rule:#D5DCD7;font-family:var(--lf,inherit);font-weight:var(--lw,inherit)}
.themed .rtitle,.themed .title,.themed .top h1,.themed .ghead,.themed .add input,.themed .add select,.themed .search{color:var(--ink);font-family:var(--lf,inherit);font-weight:var(--lw,inherit)}
.themed .sub,.themed .meta,.themed .note,.themed .empty{color:var(--ink2);font-family:var(--lf,inherit)}
.themed .ghead{color:var(--ink)!important}
.themed .icon-btn{background:transparent;color:var(--ink);border-color:currentColor}
.themed .add input,.themed .add select,.themed .search{background:transparent;border-color:var(--rule)}
.themed .circle{background:transparent;border-color:var(--ink)}
.themed .circle.on{background:var(--teal);border-color:var(--teal)}
/* every theme: the background IS the list. Flat full-width rows with a thin rule, no cards. */
.themed .row-wrap{border-radius:0;margin-bottom:0}
.themed .row{background:transparent;border:0;border-bottom:1px solid var(--rule);border-radius:0}
.themed .btn:not(.primary){background:transparent;color:var(--ink);border-color:var(--ink2)}

.theme-mint{--rule:#A9D3C2;background:#DDF3EA}.theme-sky{--rule:#A9C6E3;background:#DCEBFA}.theme-blush{--rule:#E3B4BB;background:#FBE3E6}
.theme-lilac{--rule:#C3B7E3;background:#E9E2F7}.theme-sand{--rule:#D3BF9C;background:#F1E6D2}.theme-slate{--rule:#B0B9C2;background:#D9DEE3}

.theme-legal{--ink:#2A2615;--ink2:#5E5420;--rule:#CDB43F;background:#F5DC55}
.theme-chalk{--ink:#F4F1E6;--ink2:#CFCAB8;--rule:rgba(244,241,230,.35);--over:#FFA39B;background:#26382F radial-gradient(ellipse at 30% 20%,rgba(255,255,255,.07),transparent 60%)}
.theme-chalk .row{border-bottom-style:dashed}
.theme-chalk .done .rtitle{color:#9FB1A8}
.theme-chalk .handle,.theme-blueprint .handle{color:var(--ink2)}
.theme-chalk .add input::placeholder,.theme-chalk .search::placeholder{color:#A9B8AF}
.theme-graph{--ink:#2F3B37;--ink2:#51605A;--rule:#9CB8A2;background-color:#F7FBF4;background-image:linear-gradient(#CFE3D0 1px,transparent 1px),linear-gradient(90deg,#CFE3D0 1px,transparent 1px);background-size:24px 24px}
.theme-kraft{--ink:#3A2A18;--ink2:#5B4630;--rule:#A8895C;background:#D7B98E repeating-linear-gradient(45deg,rgba(255,255,255,.04) 0 3px,rgba(0,0,0,.03) 3px 6px)}
.theme-blueprint{--ink:#EAF3FF;--ink2:#BBD2F0;--rule:rgba(255,255,255,.35);--over:#FFB3AB;background-color:#1F4E8C;background-image:linear-gradient(rgba(255,255,255,.14) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.14) 1px,transparent 1px);background-size:24px 24px}
.theme-blueprint .done .rtitle{color:#9DB8DA}
.theme-blueprint .add input::placeholder,.theme-blueprint .search::placeholder{color:#9DB8DA}

/* text styles: the only fonts in the app. 'auto' = DM Sans (the app default). */
.lf-playpen{--lf:'Playpen Sans','DM Sans',system-ui,sans-serif}
.lf-poppins{--lf:'Poppins','DM Sans',system-ui,sans-serif}
.lf-biorhyme{--lf:'BioRhyme',Georgia,serif}
.lf-worksans{--lf:'Work Sans','DM Sans',system-ui,sans-serif}
.lf-spacemono{--lf:'Space Mono',ui-monospace,Menlo,Consolas,monospace}
.lf-inter{--lf:'Inter','DM Sans',system-ui,sans-serif}
.lf-auto{--lf:'DM Sans',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif}

/* text style picker tiles (each tile previews its own font) */
.fonts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.font-tile{min-height:48px;border-radius:12px;border:2px solid var(--line);background:#fff;color:#1E2A28;font-size:17px;font-family:var(--lf,inherit);font-weight:var(--lw,inherit);padding:6px 10px;text-align:left}
.font-tile[aria-pressed=true]{border-color:var(--teal);box-shadow:0 0 0 2px var(--teal)}
