:root{--porcelain:#FBFAF6;--card:#FFFFFF;--ink:#1F2A24;--ink-soft:#5A6A61;--pandan:#1E6B52;--pandan-deep:#11402F;--pandan-tint:#E7F0EA;--kaya:#E9B84C;--sambal:#C8452A;--grain:#D9A94B;--protein:#B7623F;--veg:#3F7D5C;--line:#E6E3DA;--radius:14px;--shadow:0 1px 2px rgba(31,42,36,.05),0 8px 24px rgba(31,42,36,.06)}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--porcelain);color:var(--ink);font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff}:focus-visible{outline:3px solid var(--kaya);outline-offset:2px;border-radius:6px}.serif{font-family:Fraunces,serif}.mono{font-family:Spline Sans Mono,monospace}.topbar{display:flex;align-items:center;gap:28px;padding:16px 32px;border-bottom:1px solid var(--line);flex-wrap:wrap}.brand{display:flex;align-items:center;gap:11px;background:none;border:0}.brand-plate{width:28px;height:28px;border-radius:50%;background:conic-gradient(from -90deg,var(--grain) 0 25%,var(--protein) 25% 50%,var(--veg) 50% 100%);box-shadow:inset 0 0 0 3px #fff,0 0 0 1.5px var(--ink)}.brand-name{font-family:Fraunces,serif;font-size:20px;font-weight:600}.nav{display:flex;gap:4px;flex-wrap:wrap}.nav button{background:none;border:0;font-weight:600;font-size:14px;color:var(--ink-soft);padding:7px 12px;border-radius:999px}.nav button[aria-current]{color:#fff;background:var(--pandan)}.nav button:hover{color:var(--ink)}.nav button[aria-current]:hover{color:#fff}.account{margin-left:auto;display:flex;align-items:center;gap:10px;font-weight:600;font-size:13.5px;color:var(--ink-soft)}.demo-pill{font-family:Spline Sans Mono,monospace;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;background:var(--kaya);color:var(--pandan-deep);border-radius:999px;padding:3px 10px}.page{max-width:1220px;margin:0 auto;padding:26px 32px 64px}.page-title{font-family:Fraunces,serif;font-weight:600;font-size:26px;margin-bottom:4px}.page-sub{color:var(--ink-soft);margin-bottom:22px}.btn{border:0;border-radius:999px;padding:10px 20px;font-weight:700;font-size:14px;display:inline-flex;align-items:center;gap:8px}.btn-primary{background:var(--pandan);color:#fff}.btn-primary:hover{background:var(--pandan-deep)}.btn-primary:disabled{background:#9db9ac;cursor:default}.btn-ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--line)}.btn-ghost:hover{box-shadow:inset 0 0 0 1.5px var(--pandan);color:var(--pandan)}.btn-danger{background:transparent;color:var(--sambal);box-shadow:inset 0 0 0 1.5px #efd5ce}.btn-sm{padding:6px 13px;font-size:12.5px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px}.grid{display:grid;gap:14px}.login{min-height:100vh;display:grid;place-items:center;background:var(--pandan-deep);color:#f4f1e6;text-align:center;padding:24px}.login h1{font-family:Fraunces,serif;font-style:italic;font-weight:500;font-size:clamp(34px,5vw,52px);max-width:16ch;margin:18px auto 10px}.login p{color:#d8e2d4;max-width:44ch;margin:0 auto 26px}.login .brand-plate{width:52px;height:52px;margin:0 auto}.login .btn{font-size:15px;padding:13px 26px;background:#fff;color:var(--ink)}.login .btn:hover{background:var(--kaya)}.login .fine{font-size:12.5px;color:#afc5b4;margin-top:16px}.wizard{max-width:640px;margin:0 auto}.wizard-step{font-family:Spline Sans Mono,monospace;font-size:11.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--pandan);margin-bottom:8px}.field{display:grid;gap:6px;margin-bottom:14px}.field label{font-weight:600;font-size:13.5px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.member-row{display:flex;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff}.avatar{width:32px;height:32px;border-radius:50%;color:#fff;display:grid;place-items:center;font-family:Fraunces,serif;font-style:italic;flex:none}.switch{display:flex;gap:10px;align-items:center;padding:10px 0}.hero{background:var(--pandan-deep);color:#f4f1e6;border-radius:18px;padding:28px 30px;display:flex;gap:40px;align-items:center;flex-wrap:wrap;margin-bottom:20px}.hero-copy{flex:1 1 320px}.eyebrow{font-family:Spline Sans Mono,monospace;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--kaya);margin-bottom:8px}.hero h2{font-family:Fraunces,serif;font-weight:500;font-style:italic;font-size:clamp(22px,3vw,32px);line-height:1.15;margin-bottom:12px}.hero-tips{list-style:none;display:grid;gap:7px;font-size:14px;color:#d8e2d4}.hero-tips .mark{color:var(--kaya);font-family:Spline Sans Mono,monospace;margin-right:8px}.plate-dial{position:relative;width:150px;height:150px;flex:none}.plate-ring{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:conic-gradient(var(--kaya) calc(var(--score)*1%),rgba(255,255,255,.14) 0);-webkit-mask:radial-gradient(closest-side,transparent 78%,#000 79%);mask:radial-gradient(closest-side,transparent 78%,#000 79%)}.plate-face{position:absolute;top:11px;right:11px;bottom:11px;left:11px;border-radius:50%;background:radial-gradient(closest-side,#fffdf7 0,#fffdf7 62%,#f1ede0 63%,#f1ede0 74%,#fbf9f1 75%,#fbf9f1);box-shadow:inset 0 2px 6px #1f2a241f,0 10px 30px #00000047;display:grid;place-items:center;text-align:center;color:var(--ink)}.plate-face .num{font-family:Fraunces,serif;font-weight:600;font-size:44px;line-height:1}.plate-face .of{font-family:Spline Sans Mono,monospace;font-size:10px;letter-spacing:.1em;color:var(--ink-soft)}.plate-face .grade{font-weight:700;font-size:11px;color:var(--pandan)}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:18px}.toolbar-note{margin-left:auto;font-size:13px;color:var(--ink-soft)}.week{display:grid;grid-template-columns:repeat(7,1fr);gap:12px}@media(max-width:1080px){.week{grid-template-columns:repeat(7,minmax(230px,1fr));overflow-x:auto;padding-bottom:10px}}.day{display:grid;gap:9px;min-width:0;align-content:start}.day-head{display:flex;align-items:baseline;gap:8px;font-size:16px}.day-head .dow{font-family:Fraunces,serif;font-weight:600}.day-head .date{font-family:Spline Sans Mono,monospace;font-size:11.5px;color:var(--ink-soft)}.meal{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px;display:flex;flex-direction:column;gap:7px;min-width:0}.meal.eatingout{background:transparent;border-style:dashed}.meal.leftover{background:var(--pandan-tint);border-color:#cbdfd2}.meal-type{font-family:Spline Sans Mono,monospace;font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-soft);display:flex;justify-content:space-between;gap:6px}.meal-name{font-family:Fraunces,serif;font-weight:600;font-size:14.5px;line-height:1.25}.meal-benefit{font-size:12px;color:var(--ink-soft);line-height:1.4}.meal-meta{margin-top:auto;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.mini-plate{flex:none;width:20px;height:20px;border-radius:50%;box-shadow:inset 0 0 0 2px #fff,0 0 0 1px var(--line)}.chip{font-size:11px;font-weight:600;color:var(--ink-soft);background:var(--porcelain);border:1px solid var(--line);border-radius:999px;padding:2px 8px;white-space:nowrap}.chip.method{color:var(--pandan);border-color:var(--pandan-tint);background:var(--pandan-tint)}.chip.fry{color:#fff;border-color:var(--sambal);background:var(--sambal)}.chip.wish{color:#7a5a10;border-color:#f0d9a0;background:#fbf1d8}.flag{font-family:Spline Sans Mono,monospace;font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:#fff;background:var(--pandan-deep);border-radius:7px;padding:4px 8px;line-height:1.35}.swap-btn{background:none;border:1px solid var(--line);border-radius:7px;font-size:11px;color:var(--ink-soft);padding:2px 8px}.swap-btn:hover{border-color:var(--pandan);color:var(--pandan)}.day-foot{display:flex;align-items:center;gap:7px;font-family:Spline Sans Mono,monospace;font-size:11.5px;color:var(--ink-soft)}.day-foot b{color:var(--pandan)}.serves{font-family:Spline Sans Mono,monospace;font-size:10.5px;color:var(--ink-soft)}.safety{font-size:10.5px;color:var(--ink-soft);border-top:1px dashed var(--line);padding-top:5px;line-height:1.4}.recipe-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}.recipe-card{display:flex;flex-direction:column;gap:8px}.recipe-emoji{font-size:30px;line-height:1}.recipe-name{font-family:Fraunces,serif;font-weight:600;font-size:16.5px}.benefit-tags{display:flex;gap:6px;flex-wrap:wrap}.steps{padding-left:20px;display:grid;gap:6px;font-size:13.5px}.stack{display:grid;gap:10px}.list-row{display:flex;align-items:center;gap:10px;padding:9px 12px;background:#fff;border:1px solid var(--line);border-radius:10px}.list-row .grow{flex:1}.muted{color:var(--ink-soft);font-size:13px}.empty{border:1.5px dashed var(--line);border-radius:var(--radius);padding:28px;text-align:center;color:var(--ink-soft)}.banner{background:var(--pandan-tint);border:1px solid #CBDFD2;color:var(--pandan-deep);border-radius:10px;padding:10px 14px;font-size:13.5px;margin-bottom:16px}.banner.warn{background:#fbf1d8;border-color:#f0d9a0;color:#7a5a10}dialog{border:0;border-radius:16px;box-shadow:var(--shadow);padding:22px;max-width:560px;width:92vw}dialog::backdrop{background:#1f2a2459}@media(max-width:720px){.topbar{padding:12px 16px;gap:10px}.page{padding:18px 16px 48px}.hero{padding:22px 18px;gap:22px}}.print-only{display:none}@media print{body>#root>header.topbar,.page>*:not(.print-only){display:none!important}.page{padding:0;max-width:none}.print-only{display:block;font-size:11px;color:#000}.print-only h1{font-family:Fraunces,serif;font-size:18px;margin:0 0 8px}.print-week{width:100%;border-collapse:collapse;page-break-after:always}.print-week th,.print-week td{border:1px solid #999;padding:5px 6px;vertical-align:top;text-align:left}.print-week thead th{text-transform:capitalize;background:#eee}.print-flag{font-weight:700;text-transform:uppercase;font-size:9.5px;border:1.5px solid #000;padding:1px 4px;display:inline-block;margin-bottom:2px}.print-meta{color:#444;font-size:9.5px}.print-tip{color:#444;font-size:9.5px;font-style:italic}.print-safety{font-size:9.5px;border-top:1px dashed #999;margin-top:2px;padding-top:2px}.print-list h1{margin-top:0}.print-group{break-inside:avoid;margin-bottom:8px}.print-group h2{font-size:13px;margin:6px 0 4px}.print-group ul{list-style:none;padding:0;margin:0}.print-group li{padding:1.5px 0}}
