:root{
  --paper:#F5F3ED;
  --surface:#FFFFFF;
  --surface-2:#EFEBE2;
  --ink:#251F22;
  --muted:#7C7266;
  --line:#E2DCCF;
  --accent:#5B2E48;
  --accent-ink:#FFFFFF;
  --accent-soft:#F0E1EA;
  --accent-soft-line:#DEC3D3;
  --healthy:#3F7D52;
  --healthy-soft:#E4F0E6;
  --moderate:#B8791C;
  --moderate-soft:#F5E9D6;
  --occasional:#B23A48;
  --occasional-soft:#F6E1E3;
  --kids:#8A4E7A;
  --shadow: 0 1px 2px rgba(37,31,34,.04), 0 8px 24px -12px rgba(37,31,34,.18);
}
*{box-sizing:border-box;}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:'Public Sans',system-ui,-apple-system,sans-serif;
  -webkit-font-smoothing:antialiased;
}
h1,h2{font-family:'Instrument Serif',Georgia,serif;font-weight:400;text-wrap:balance;margin:0 0 4px;}
h1{font-size:32px;}
h2{font-size:19px;color:var(--ink);}
button, select, input{font-family:inherit;}

.shell{display:flex;min-height:100vh;}
.sidebar{
  width:232px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--line);
  padding:28px 20px;display:flex;flex-direction:column;gap:32px;
  position:sticky;top:0;height:100vh;
}
.brand{display:flex;flex-direction:column;gap:2px;}
.brand-name{font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-size:25px;line-height:1;}
.brand-sub{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-top:4px;}
.nav-links{display:flex;flex-direction:column;gap:3px;}
.navlink{
  display:flex;align-items:center;gap:10px;background:none;border:none;color:var(--muted);text-align:left;
  font-family:inherit;font-size:15px;padding:10px 12px;border-radius:10px;cursor:pointer;
  transition:background .12s, color .12s;
}
.navlink svg{flex-shrink:0;opacity:.8;}
.navlink:hover{background:var(--surface-2);color:var(--ink);}
.navlink.active{background:var(--accent-soft);color:var(--accent);font-weight:600;}
.navlink.active svg{opacity:1;}
.sidebar-foot{margin-top:auto;display:flex;flex-direction:column;gap:6px;}
.sidebar-version{font-size:11px;color:var(--muted);font-family:'IBM Plex Mono',monospace;}
.sidebar-link{
  background:none;border:none;color:var(--muted);font-size:11px;cursor:pointer;
  text-decoration:underline;padding:0;text-align:left;font-family:inherit;
}
.sidebar-link:hover{color:var(--accent);}
.main{flex:1;min-width:0;padding:36px 28px 90px;}
.wrap{max-width:1140px;margin:0 auto;overflow-x:hidden;}
@media (max-width:720px){
  .shell{flex-direction:column;}
  .sidebar{width:100%;height:auto;position:static;flex-direction:row;align-items:center;justify-content:space-between;padding:14px 16px;}
  .nav-links{flex-direction:row;}
  .navlink span{display:none;}
  .sidebar-foot{display:none;}
}

/* ---- passcode lock ---- */
.lock-overlay{
  position:fixed;inset:0;background:var(--paper);z-index:2000;
  display:flex;align-items:center;justify-content:center;padding:20px;
}
.lock-card{
  background:var(--surface);border:1px solid var(--line);border-radius:16px;
  padding:32px 30px;width:320px;max-width:100%;box-shadow:var(--shadow);text-align:center;
}
.lock-card .brand-name{font-size:22px;margin-bottom:20px;}
.lock-title{font-size:16px;font-weight:600;margin-bottom:4px;}
.lock-sub{font-size:13px;color:var(--muted);margin:0 0 18px;}
.lock-input{
  width:100%;text-align:center;font-family:'IBM Plex Mono',monospace;font-size:22px;letter-spacing:.5em;
  padding:12px 10px;border-radius:10px;border:1px solid var(--line);background:var(--surface-2);color:var(--ink);
  margin-bottom:12px;
}
.lock-input::placeholder{letter-spacing:normal;font-family:'Public Sans',sans-serif;font-size:13px;}
.lock-input:focus{outline:none;border-color:var(--accent);}
.lock-card .btn{width:100%;}
.lock-error{color:var(--occasional);font-size:13px;margin-top:10px;min-height:16px;}
.app-loading{
  position:fixed;inset:0;background:var(--paper);z-index:1500;
  display:flex;align-items:center;justify-content:center;padding:20px;
}
.app-loading .lock-card{box-shadow:none;border:none;}
.app-loading .brand-name{margin-bottom:8px;}
.week-actions{display:flex;align-items:center;gap:10px;}
.week-delete{
  background:none;border:none;color:var(--muted);cursor:pointer;padding:4px;opacity:.55;
  display:flex;align-items:center;border-radius:8px;
}
.week-delete:hover{opacity:1;color:var(--occasional);background:var(--occasional-soft);}
.archive-empty{color:var(--muted);font-size:14px;padding:20px 0;}
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:26px;flex-wrap:wrap;}
.sub{color:var(--muted);font-size:15px;margin:0;}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:24px;}
.btn{
  background:var(--surface-2);border:1px solid var(--line);color:var(--ink);
  padding:9px 16px;border-radius:9px;font-size:14.5px;cursor:pointer;
  font-family:inherit;font-weight:500;transition:border-color .12s;
}
.btn:hover{border-color:var(--accent-soft-line);}
.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600;}
.btn.primary:hover{opacity:.92;}
.btn.small{padding:5px 10px;font-size:13px;}
.btn:focus-visible, .navlink:focus-visible, select:focus-visible, input:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
input[type=file]{display:none;}
.count{margin-left:auto;font-size:13px;color:var(--muted);font-family:'IBM Plex Mono',monospace;}

/* ---- score ring (Today) ---- */
.score-ring{display:flex;align-items:center;gap:12px;}
.score-ring svg{width:56px;height:56px;flex-shrink:0;}
.score-ring .ring-label{line-height:1.15;}
.score-ring .ring-label .num{font-family:'IBM Plex Mono',monospace;font-size:20px;font-weight:600;font-variant-numeric:tabular-nums;}
.score-ring .ring-label .num small{color:var(--muted);font-size:13px;font-weight:400;}
.score-ring .ring-label .cap{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;}

/* ---- master list ---- */
.cols{display:grid;grid-template-columns:repeat(3, minmax(0,1fr));gap:16px;margin-bottom:32px;}
.col{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:16px;box-shadow:var(--shadow);}
.col-head{
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--line);
}
.col-head .label{font-size:12.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600;}
.col-head .n{font-size:12px;color:var(--muted);font-family:'IBM Plex Mono',monospace;}
.item-row{
  display:flex;align-items:center;gap:8px;padding:7px 4px;
  border-bottom:1px solid var(--line);
}
.item-row:last-child{border-bottom:none;}
.item-row input{
  flex:1;min-width:0;background:transparent;border:1px solid transparent;color:var(--ink);
  font-family:inherit;font-size:14.5px;padding:5px 6px;border-radius:6px;
}
.item-row input:hover{border-color:var(--line);}
.item-row input:focus{outline:none;border-color:var(--accent);background:var(--surface-2);}
.item-row .badge{
  font-size:11px;padding:1px 7px;border-radius:100px;
  background:var(--accent-soft);color:var(--accent);
  font-family:'IBM Plex Mono',monospace;white-space:nowrap;
}
.item-row.dup-row{background:var(--occasional-soft);border-radius:8px;}
.item-row.dup-row input{color:var(--occasional);}
.dup-badge{background:var(--occasional-soft) !important;color:var(--occasional) !important;}
.health-select{
  font-size:11px;padding:3px 8px;border-radius:100px;border:1px solid var(--line);
  font-family:inherit;cursor:pointer;background:var(--surface-2);color:var(--muted);flex-shrink:0;
  appearance:none;-webkit-appearance:none;
}
.health-select.health-healthy{background:var(--healthy-soft);color:var(--healthy);border-color:transparent;}
.health-select.health-moderate{background:var(--moderate-soft);color:var(--moderate);border-color:transparent;}
.health-select.health-occasional{background:var(--occasional-soft);color:var(--occasional);border-color:transparent;}
.del{background:none;border:none;color:var(--muted);cursor:pointer;font-size:18px;padding:2px 4px;line-height:1;opacity:.55;}
.del:hover{opacity:1;color:var(--occasional);}
.add-item{display:flex;gap:6px;margin-top:10px;}
.add-item input{
  flex:1;background:var(--surface-2);border:1px solid var(--line);color:var(--ink);
  font-family:inherit;font-size:14.5px;padding:8px 10px;border-radius:8px;
}
.add-item input:focus{outline:none;border-color:var(--accent);}
.empty-col{color:var(--muted);font-size:14px;text-align:center;padding:16px 0;}

.toast-container{
  position:fixed;top:20px;right:20px;z-index:1000;
  display:flex;flex-direction:column;gap:8px;
  max-width:320px;
}
.toast{
  background:var(--surface);border:1px solid var(--accent);color:var(--ink);
  padding:12px 16px;border-radius:10px;font-size:14.5px;
  box-shadow:var(--shadow);
  animation:toast-in .2s ease-out;
}
.toast.err{border-color:var(--occasional);}
.toast.toast-out{animation:toast-out .35s ease-in forwards;}
@keyframes toast-in{from{opacity:0;transform:translateX(20px);}to{opacity:1;transform:translateX(0);}}
@keyframes toast-out{from{opacity:1;transform:translateX(0);}to{opacity:0;transform:translateX(20px);}}
@media (max-width:720px){ .cols{grid-template-columns:1fr;} }

.view{display:none;}
.view.active{display:block;}

/* ---- weekly plan ---- */
.plan-toolbar{
  display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap;margin-bottom:22px;
  padding:14px 16px;background:var(--surface);border:1px solid var(--line);border-radius:14px;
}
.field{display:flex;flex-direction:column;gap:4px;}
.field label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;}
.field input{
  width:70px;background:var(--surface-2);border:1px solid var(--line);color:var(--ink);
  font-family:inherit;font-size:14.5px;padding:7px 9px;border-radius:8px;
}
.field input:focus{outline:none;border-color:var(--accent);}
.layout-toggle{display:flex;border:1px solid var(--line);border-radius:9px;overflow:hidden;}
.layout-btn{
  background:var(--surface-2);border:none;color:var(--muted);font-family:inherit;font-size:13.5px;
  padding:8px 14px;cursor:pointer;
}
.layout-btn:hover{color:var(--ink);}
.layout-btn.active{background:var(--accent);color:var(--accent-ink);}
.layout-view{display:none;}
.layout-view.active{display:block;}
.week-block{margin-bottom:28px;}
.week-title{font-size:13px;color:var(--muted);margin:0;text-transform:uppercase;letter-spacing:.06em;}
.week-title-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-bottom:12px;}
.week-total{
  font-size:12px;font-weight:600;padding:4px 12px;border-radius:100px;white-space:nowrap;
  background:var(--surface-2);color:var(--ink);border:1px solid var(--line);font-family:'IBM Plex Mono',monospace;
}
.history-divider{
  font-size:12.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;
  margin:28px 0 16px;padding-top:16px;border-top:1px solid var(--line);
}
.day-grid{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:12px;}
@media (max-width:900px){ .day-grid{grid-template-columns:repeat(2, minmax(0, 1fr));} }
@media (max-width:520px){ .day-grid{grid-template-columns:1fr;} }

.day-list{display:flex;flex-direction:column;gap:12px;}
.day-row{
  background:var(--surface);border:1px solid var(--line);border-radius:14px;
  padding:16px;
}
.day-row-head{
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--line);
}
.day-row-head .dow{font-size:16px;font-weight:600;}
.day-row-head .date{color:var(--muted);font-family:'IBM Plex Mono',monospace;font-size:13px;}
.day-row-head-right{display:flex;align-items:center;gap:12px;}
.day-row-meals{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:14px;}
@media (max-width:700px){ .day-row-meals{grid-template-columns:1fr;} }
.day-card{
  background:var(--surface);border:1px solid var(--line);border-radius:14px;
  padding:14px;min-width:0;box-shadow:var(--shadow);
}
.day-card-head{
  margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--line);
  display:flex;align-items:flex-start;justify-content:space-between;gap:6px;
}
.day-card-head .dow{font-size:15px;font-weight:600;}
.day-card-head .date{color:var(--muted);font-family:'IBM Plex Mono',monospace;font-size:12.5px;}
.day-card-head-right{display:flex;flex-direction:column;align-items:flex-end;gap:5px;}
.day-total{
  font-size:11px;font-weight:600;padding:2px 9px;border-radius:100px;white-space:nowrap;
  background:var(--surface-2);color:var(--ink);border:1px solid var(--line);font-family:'IBM Plex Mono',monospace;
}
.lock-btn{
  background:none;border:none;cursor:pointer;padding:2px;
  opacity:.4;line-height:1;color:var(--muted);display:flex;align-items:center;flex-shrink:0;
}
.lock-btn:hover{opacity:1;color:var(--ink);}
.lock-btn.locked{opacity:1;color:var(--accent);}
.meal-card{
  margin-bottom:10px;padding:12px;border:1px solid var(--line);border-radius:12px;
  background:var(--surface);
}
.meal-card:last-child{margin-bottom:0;}
.meal-card-head{
  font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600;
  margin-bottom:9px;display:flex;align-items:center;justify-content:space-between;gap:6px;
}
.score-badge{
  font-size:11.5px;font-weight:600;padding:2px 9px;border-radius:100px;text-transform:none;letter-spacing:0;
  background:var(--surface-2);color:var(--muted);border:1px solid var(--line);flex-shrink:0;
  font-family:'IBM Plex Mono',monospace;
}
.score-badge.health-healthy{background:var(--healthy-soft);color:var(--healthy);border-color:transparent;}
.score-badge.health-moderate{background:var(--moderate-soft);color:var(--moderate);border-color:transparent;}
.score-badge.health-occasional{background:var(--occasional-soft);color:var(--occasional);border-color:transparent;}
.meal-card-split{display:grid;grid-template-columns:repeat(auto-fit, minmax(80px, 1fr));gap:9px;}
.split-col{min-width:0;}
.split-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--kids);margin-bottom:4px;font-weight:600;}
.split-label.kids-label{color:var(--accent);}
.meal-card-split select{
  width:100%;min-width:0;background:var(--surface-2);border:1px solid var(--line);color:var(--ink);
  font-family:inherit;font-size:13.5px;padding:7px 8px;border-radius:8px;cursor:pointer;
}
.meal-card-split select:hover, .meal-card-split select:focus{outline:none;border-color:var(--accent);}
.meal-card-split select.locked-select{border-color:var(--line);opacity:.55;cursor:not-allowed;}
.changed-flag{color:var(--moderate);text-transform:none;letter-spacing:0;font-weight:600;}
.actual-note{
  margin-top:5px;font-size:12px;color:var(--occasional);font-weight:600;
}
.combo-section{margin-top:8px;}
.combo-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:5px;}
.combo-chip{
  display:inline-flex;align-items:center;gap:4px;font-size:12px;padding:3px 8px;border-radius:100px;
  background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-soft-line);
}
.combo-chip button{
  background:none;border:none;color:inherit;cursor:pointer;padding:0;font-size:13px;line-height:1;opacity:.7;
}
.combo-chip button:hover{opacity:1;}
select.combo-add{
  width:100%;min-width:0;background:transparent;border:1px dashed var(--line);color:var(--muted);
  font-family:inherit;font-size:12.5px;padding:6px 8px;border-radius:8px;cursor:pointer;
}
select.combo-add:hover{border-color:var(--accent);color:var(--ink);}
.comment-field{
  width:100%;min-width:0;margin-top:8px;background:transparent;border:1px dashed var(--line);color:var(--ink);
  font-family:inherit;font-size:12.5px;padding:6px 8px;border-radius:8px;
}
.comment-field::placeholder{color:var(--muted);}
.comment-field:hover{border-color:var(--accent);}
.comment-field:focus{outline:none;border-color:var(--accent);background:var(--surface-2);}
.plan-flag{
  display:flex;align-items:center;gap:8px;font-size:13.5px;padding:9px 14px;border-radius:10px;margin-bottom:12px;
  background:var(--moderate-soft);color:var(--moderate);border:1px solid transparent;
  max-width:460px;
}
.plan-flag.compromised{
  background:var(--healthy-soft);color:var(--healthy);font-weight:600;
}
.plan-flag.locked-flag{
  background:var(--accent-soft);color:var(--accent);border-color:var(--accent-soft-line);
}
