/*





 * MealGrid – Main Stylesheet





 * Version: 1.2.1





 * Single CSS file | Cache-busted via ?v= query param





 * Digitalis Creative – digitaliscreative.com





 *





 * Design: Clean bright white / light-gray, teal accent,





 *         Playfair Display + DM Sans typography, mobile-first





 */











/* ── Google Fonts ──────────────────────────────────────────────────────────── */





@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800;1,700;1,800&family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400&display=swap');











/* ── CSS Variables ──────────────────────────────────────────────────────────── */





:root {





  /* Backgrounds */





  --mg-bg-start:         #f0f4f8;





  --mg-bg-mid:           #e8eef6;





  --mg-bg-end:           #dde8f2;











  /* Teal accent – primary throughout */





  --mg-accent:           #A1280B;





  --mg-accent-rgb:       13,148,136;





  --mg-accent-hover:     #B8300D;





  --mg-accent-light:     color-mix(in srgb, var(--mg-accent) 10%, transparent);





  --mg-accent-glow:      color-mix(in srgb, var(--mg-accent) 20%, transparent);











  /* Alias kept for backward compat */





  --mg-teal:             #3A8C4A;





  --mg-teal-glow:        color-mix(in srgb, var(--mg-accent) 18%, transparent);











  /* Semantic */





  --mg-danger:           #dc2626;





  --mg-success:          #16a34a;





  --mg-warning:          #d97706;





  --mg-info:             #2563eb;











  /* Text */





  --mg-text-primary:     #1e293b;





  --mg-text-secondary:   #475569;





  --mg-text-muted:       #3D2314;





  --mg-text-dark:        #0f172a;











  /* Surfaces */





  --mg-surface:          #ffffff;





  --mg-surface-2:        #f8fafc;





  --mg-surface-3:        #f1f5f9;











  /* Borders */





  --mg-border:           #e2e8f0;





  --mg-border-strong:    #cbd5e1;











  /* Legacy glass aliases → map to surface */





  --mg-glass:            #ffffff;





  --mg-glass-border:     #e2e8f0;





  --mg-glass-hover:      #f8fafc;





  --mg-glass-strong:     #ffffff;











  /* Sidebar */





  --mg-sidebar-bg:       #ffffff;





  --mg-sidebar-border:   #e2e8f0;





  --mg-sidebar-text:     #1e293b;





  /* Top header bar */





  --mg-topbar-bg:        #ffffff;





  --mg-topbar-text:      #1e293b;





  /* Calendar chip colours — overridable per-install */





  --mg-chip-meal:        #202bbf;





  --mg-chip-takeout:     #af02b3;





  --mg-chip-new:         #f16701;





  --mg-chip-leftovers:   #158113;





  --mg-chip-out:         #eb11b0;





  --mg-chip-unplanned:   #cd0a0a;





  --mg-chip-baking:      #b45309;





  --mg-sidebar-custom-bg:    #ffffff;





  --mg-sidebar-custom-text:  #1e293b;





  --mg-sidebar-custom-link:  #A1280B;





  --mg-sidebar-custom-hover: #B8300D;











  /* Shadows */





  --mg-shadow-sm:        0 1px 3px rgba(15,23,42,0.07), 0 1px 2px rgba(15,23,42,0.04);





  --mg-shadow-md:        0 4px 14px rgba(15,23,42,0.08), 0 2px 6px rgba(15,23,42,0.04);





  --mg-shadow-lg:        0 12px 36px rgba(15,23,42,0.10), 0 4px 12px rgba(15,23,42,0.05);





  --mg-shadow-accent:    0 4px 14px color-mix(in srgb, var(--mg-accent) 25%, transparent);





  --mg-shadow-teal:      0 4px 14px color-mix(in srgb, var(--mg-accent) 20%, transparent);











  /* Layout */





  --mg-radius-sm:        6px;





  --mg-radius-md:        10px;





  --mg-radius-lg:        16px;





  --mg-radius-xl:        22px;





  --mg-sidebar-width:    240px;











  /* Typography */





  --mg-font-display:     'Plus Jakarta Sans', 'DM Sans', system-ui, sans-serif;





  --mg-font-body:        'DM Sans', system-ui, sans-serif;











  /* Transitions */





  --mg-transition:       all 0.2s cubic-bezier(0.4,0,0.2,1);





  --mg-transition-slow:  all 0.4s cubic-bezier(0.4,0,0.2,1);





}











/* ── Reset & Base ───────────────────────────────────────────────────────────── */





*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }











html { font-size: 16px; scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }











body {





  font-family: var(--mg-font-body);





  font-weight: 400;





  color: var(--mg-text-primary);





  background: var(--mg-bg-start);





  min-height: 100vh;





  line-height: 1.6;





}











/* Soft light gradient */





body::before {





  content: '';





  position: fixed;





  inset: 0;





  background:





    radial-gradient(ellipse 70% 50% at 0% 0%,   color-mix(in srgb, var(--mg-accent) 5%, transparent) 0%, transparent 55%),





    radial-gradient(ellipse 55% 65% at 100% 100%, rgba(8,145,178,0.04)  0%, transparent 55%),





    linear-gradient(160deg, #f0f4f8 0%, #e8eef6 55%, #dde8f2 100%);





  z-index: -1;





}











/* When a custom background image is set — tint overlay instead of solid gradient */





body.has-bg-image { background: transparent !important; }

body.has-bg-image::before {





  background:





    linear-gradient(160deg, rgba(240,244,248,0.55) 0%, rgba(232,238,246,0.50) 55%, rgba(221,232,242,0.50) 100%);





}











/* Boost grid cell visibility over background images */





body.has-bg-image .mg-grid-cell {





  border-color: rgba(var(--mg-accent-rgb, 13,148,136), 0.22);





}





body.has-bg-image .mg-grid-cell.lit {





  opacity: calc(var(--cell-opacity, 0.7));





  background: rgba(var(--mg-accent-rgb, 13,148,136), calc(0.11 * var(--cell-opacity, 0.7)));





  border-color: rgba(var(--mg-accent-rgb, 13,148,136), calc(0.38 * var(--cell-opacity, 0.7)));





}











body::after { display: none; }











/* ── Typography ─────────────────────────────────────────────────────────────── */





h1,h2,h3,h4,h5,h6 { font-family: var(--mg-font-display); font-weight: 600; line-height: 1.25; color: var(--mg-text-primary); }





h1 { font-size: clamp(1.8rem,4vw,2.8rem); }





h2 { font-size: clamp(1.4rem,3vw,2rem); }





h3 { font-size: clamp(1.1rem,2.5vw,1.5rem); }





h4 { font-size: 1.1rem; }











p { margin-bottom: 0.75rem; color: var(--mg-text-secondary); }





a { color: var(--mg-accent); text-decoration: none; transition: var(--mg-transition); }





a:hover { color: var(--mg-accent-hover); }





small { font-size: 0.8rem; color: var(--mg-text-muted); }





strong { font-weight: 600; color: var(--mg-text-primary); }





code {





  font-family: 'Courier New', monospace;





  font-size: 0.84em;





  background: var(--mg-surface-3);





  padding: 0.1em 0.4em;





  border-radius: 4px;





  color: var(--mg-accent);





  border: 1px solid var(--mg-border);





}











/* ── Glass Panel (light = white card) ──────────────────────────────────────── */





.glass {





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius-lg);





  box-shadow: var(--mg-shadow-md);





}











.glass-strong {





  background: var(--mg-surface);





  border: 1px solid var(--mg-border-strong);





  box-shadow: var(--mg-shadow-md);





}











/* ── Buttons ────────────────────────────────────────────────────────────────── */





.btn {





  display: inline-flex;





  align-items: center;





  gap: 0.4rem;





  padding: 0.55rem 1.2rem;





  border-radius: 99px;





  font-family: var(--mg-font-body);





  font-size: 0.88rem;





  font-weight: 600;





  cursor: pointer;





  border: 1px solid transparent;





  transition: var(--mg-transition);





  text-decoration: none;





  white-space: nowrap;





  position: relative;





  overflow: hidden;





  letter-spacing: 0.01em;





}











.btn-primary {
  background: var(--mg-teal);
  color: var(--mg-teal-text, #fff);
  border-color: var(--mg-teal);
  padding: .38rem .85rem;
  font-size: .82rem;
}
.btn-primary:hover {
  background: var(--mg-surface);
  border-color: var(--mg-teal);
  color: var(--mg-teal);
  transform: translateY(-1px);
  box-shadow: none;
}











.btn-secondary {





  background: var(--mg-surface);





  border-color: var(--mg-border);





  color: var(--mg-text-secondary);





  box-shadow: var(--mg-shadow-sm);





}





.btn-secondary:hover {





  border-color: var(--mg-accent);





  color: var(--mg-accent);





  background: color-mix(in srgb, var(--mg-accent) 4%, transparent);





  transform: translateY(-1px);





}











.btn-teal {





  background: var(--mg-accent);





  color: var(--mg-accent-text, #ffffff);





  border-color: var(--mg-accent);





  font-weight: 700;





  box-shadow: var(--mg-shadow-teal);





}





.btn-teal:hover {





  background: var(--mg-accent-hover);





  transform: translateY(-1px);





  box-shadow: 0 6px 20px color-mix(in srgb, var(--mg-accent) 32%, transparent);





  color: #ffffff;





}











.btn-danger {





  background: rgba(220,38,38,0.06);





  border-color: rgba(220,38,38,0.22);





  color: var(--mg-danger);





}





.btn-danger:hover {





  background: rgba(220,38,38,0.11);





  border-color: var(--mg-danger);





  transform: translateY(-1px);





}











.btn-ghost {





  background: #ffffff;





  border-color: var(--mg-border);





  color: var(--mg-accent);





}





.btn-ghost:hover {





  color: var(--mg-teal);





  background: #ffffff;





  border-color: var(--mg-border);





}











/* Flat button — white bg, accent text, teal hover, no visible border */





.btn-flat {





  background: #ffffff;





  border-color: transparent;





  color: var(--mg-accent);





  box-shadow: none;





}





.btn-flat:hover {





  background: #ffffff;





  border-color: transparent;





  color: var(--mg-teal);





  transform: translateY(-1px);





}











/* Destructive button — white bg, red text; hover inverts to red bg + white text */





.clear-month-btn {





  background: #ffffff;





  color: var(--mg-danger, #dc2626);





  border-color: var(--mg-border);





}





.clear-month-btn:hover {





  background: var(--mg-danger, #dc2626);





  color: #ffffff;





  border-color: var(--mg-danger, #dc2626);





  transform: translateY(-1px);





}











.btn-sm { padding: 0.35rem 0.8rem; font-size: 0.8rem; border-radius: 99px; }





.btn-lg { padding: 0.8rem 1.8rem; font-size: 1rem; border-radius: 99px; }





.btn-icon { padding: 0.5rem; border-radius: 50%; }











.btn:disabled, .btn.disabled {





  opacity: 0.45;





  cursor: not-allowed;





  transform: none !important;





  box-shadow: none !important;





}











/* ── Forms ──────────────────────────────────────────────────────────────────── */





.form-group { margin-bottom: 1.25rem; }











label {





  display: block;





  font-size: 0.78rem;





  font-weight: 600;





  color: var(--mg-text-secondary);





  text-transform: uppercase;





  letter-spacing: 0.07em;





  margin-bottom: 0.4rem;





}











input[type="text"],





input[type="email"],





input[type="password"],





input[type="number"],





input[type="search"],





input[type="date"],





input[type="url"],





select,





textarea {





  width: 100%;





  background: var(--mg-surface);





  border: 1.5px solid var(--mg-border);





  border-radius: var(--mg-radius-md);





  padding: 0.62rem 1rem;





  font-family: var(--mg-font-body);





  font-size: 0.92rem;





  color: var(--mg-text-primary);





  outline: none;





  transition: var(--mg-transition);





  -webkit-appearance: none;





  appearance: none;





  box-shadow: inset 0 1px 2px rgba(15,23,42,0.04);





}











input:focus, select:focus, textarea:focus {





  border-color: var(--mg-accent);





  background: #ffffff;





  box-shadow: 0 0 0 3px color-mix(in srgb, var(--mg-accent) 12%, transparent);





}











input::placeholder, textarea::placeholder { color: var(--mg-text-muted); }











select {





  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%2394a3b8' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");





  background-repeat: no-repeat;





  background-position: right 0.8rem center;





  padding-right: 2.5rem;





  cursor: pointer;





}











select option { background: #ffffff; color: var(--mg-text-primary); }











textarea { resize: vertical; min-height: 100px; }











.input-inline { display: flex; gap: 0.5rem; align-items: center; }





.input-inline input { flex: 1; }











/* ── Badges ─────────────────────────────────────────────────────────────────── */





.badge {





  display: inline-flex;





  align-items: center;





  gap: 0.25rem;





  padding: 0.2rem 0.65rem;





  border-radius: 99px;





  font-size: 0.65rem;





  font-weight: 600;





  letter-spacing: 0.04em;





  text-transform: uppercase;





}











.badge-accent  { background: color-mix(in srgb, var(--mg-accent) 9%, transparent);  color: var(--mg-accent);    border: 1px solid color-mix(in srgb, var(--mg-accent) 20%, transparent); }





.badge-teal    { background: color-mix(in srgb, var(--mg-accent) 9%, transparent);  color: var(--mg-accent);    border: 1px solid color-mix(in srgb, var(--mg-accent) 20%, transparent); }





.badge-danger  { background: rgba(220,38,38,0.07);   color: var(--mg-danger);    border: 1px solid rgba(220,38,38,0.18); }





.badge-success { background: rgba(22,163,74,0.07);   color: var(--mg-success);   border: 1px solid rgba(22,163,74,0.20); }





.badge-muted   { background: var(--mg-surface-3);    color: var(--mg-text-muted);border: 1px solid var(--mg-border); }





.badge-warning { background: rgba(217,119,6,0.07);   color: var(--mg-warning);   border: 1px solid rgba(217,119,6,0.18); }





.badge-main       { background: color-mix(in srgb, var(--mg-accent) 9%, transparent);  color: var(--mg-accent); border: 1px solid color-mix(in srgb, var(--mg-accent) 20%, transparent); }





.badge-side       { background: rgba(37,99,235,0.07);   color: #2563eb;   border: 1px solid rgba(37,99,235,0.18); }





.badge-dessert    { background: rgba(168,85,247,0.07);  color: #7c3aed;   border: 1px solid rgba(168,85,247,0.18); }





.badge-soup       { background: rgba(234,88,12,0.07);   color: #c2410c;   border: 1px solid rgba(234,88,12,0.18); }





.badge-appetizer  { background: rgba(236,72,153,0.07);  color: #be185d;   border: 1px solid rgba(236,72,153,0.18); }





.badge-breakfast  { background: rgba(245,158,11,0.09);  color: #b45309;   border: 1px solid rgba(245,158,11,0.22); }





.badge-lunch      { background: rgba(16,185,129,0.08);  color: #059669;   border: 1px solid rgba(16,185,129,0.20); }





.badge-snack      { background: rgba(251,146,60,0.09);  color: #ea580c;   border: 1px solid rgba(251,146,60,0.22); }





.badge-bread      { background: rgba(161,98,7,0.08);    color: #92400e;   border: 1px solid rgba(161,98,7,0.20); }





.badge-salad      { background: rgba(34,197,94,0.08);   color: #15803d;   border: 1px solid rgba(34,197,94,0.20); }





.badge-drink      { background: rgba(6,182,212,0.08);   color: #0e7490;   border: 1px solid rgba(6,182,212,0.20); }





.badge-sauce      { background: rgba(239,68,68,0.07);   color: #dc2626;   border: 1px solid rgba(239,68,68,0.18); }





.badge-vegetarian { background: rgba(74,222,128,0.08);  color: #16a34a;   border: 1px solid rgba(74,222,128,0.20); }





.badge-vegan      { background: rgba(52,211,153,0.08);  color: #047857;   border: 1px solid rgba(52,211,153,0.20); }











/* ── Cards ──────────────────────────────────────────────────────────────────── */





.card {





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius-lg);





  box-shadow: var(--mg-shadow-sm);





  overflow: hidden;





  transition: var(--mg-transition);





  display: flex;





  flex-direction: column;





}











.card:hover {





  box-shadow: var(--mg-shadow-md);





  transform: translateY(-2px);





  border-color: var(--mg-border-strong);





}











.card-header {





  padding: 1.1rem 1.5rem 0.9rem;





  border-bottom: 1px solid var(--mg-border);





  display: flex;





  align-items: center;





  justify-content: space-between;





  gap: 0.75rem;





  background: var(--mg-surface-2);





}











.card-body   { padding: 1.5rem; }











.card-footer {





  padding: 0.9rem 1.5rem;





  border-top: 1px solid var(--mg-border);





  display: flex;





  align-items: center;





  gap: 0.75rem;





  background: var(--mg-surface-2);





  margin-top: auto;





}











.card-img { position: relative; overflow: hidden; }





.card-img img { width: 100%; aspect-ratio: 16/9; object-fit: cover; display: block; transition: transform 0.4s ease; }





.card-img:hover img { transform: scale(1.04); }





.card-img-overlay {





  position: absolute;





  inset: auto 0 0;





  background: linear-gradient(transparent, rgba(15,23,42,0.55));





  padding: 1rem;





}











/* ── Stat Cards ─────────────────────────────────────────────────────────────── */





.stat-card {





  padding: 1.5rem;





  text-align: center;





  position: relative;





  overflow: hidden;





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius-lg);





  box-shadow: var(--mg-shadow-sm);





  transition: var(--mg-transition);





}











.stat-card:hover { box-shadow: var(--mg-shadow-md); transform: translateY(-2px); }











.stat-card::before {





  content: '';





  position: absolute;





  inset: 0;





  background: radial-gradient(circle at 50% 0%, var(--card-glow, color-mix(in srgb, var(--mg-accent) 6%, transparent)) 0%, transparent 70%);





}











.stat-number {





  font-family: var(--mg-font-display);





  font-size: clamp(2rem,5vw,3rem);





  font-weight: 700;





  color: var(--card-color, var(--mg-accent));





  line-height: 1;





  display: block;





}











.stat-label {





  font-size: 0.78rem;





  font-weight: 600;





  color: var(--mg-text-muted);





  text-transform: uppercase;





  letter-spacing: 0.1em;





  margin-top: 0.3rem;





  display: block;





}











.stat-icon {





  font-size: 1.8rem;





  opacity: 0.10;





  position: absolute;





  top: 1rem;





  right: 1rem;





  color: var(--mg-accent);





}











/* ── Tables ─────────────────────────────────────────────────────────────────── */





.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }











table { width: 100%; border-collapse: collapse; font-size: 0.88rem; }











th {





  background: var(--mg-surface-2);





  padding: 0.8rem 1rem;





  text-align: left;





  font-size: 0.72rem;





  font-weight: 700;





  color: var(--mg-text-muted);





  text-transform: uppercase;





  letter-spacing: 0.08em;





  border-bottom: 2px solid var(--mg-border);





  white-space: nowrap;





}











td {





  padding: 0.85rem 1rem;





  border-bottom: 1px solid var(--mg-border);





  color: var(--mg-text-secondary);





  vertical-align: middle;





}











tr:last-child td { border-bottom: none; }





tr:hover td { background: color-mix(in srgb, var(--mg-accent) 2%, transparent); color: var(--mg-text-primary); }











.td-img { width: 48px; }





.td-img img { width: 40px; height: 40px; border-radius: var(--mg-radius-sm); object-fit: cover; }





.td-img .no-img {





  width: 40px; height: 40px; border-radius: var(--mg-radius-sm);





  background: var(--mg-surface-3); border: 1px solid var(--mg-border);





  display: flex; align-items: center; justify-content: center;





  font-size: 1.2rem;





}











/* ── Alerts ──────────────────────────────────────────────────────────────────── */





.alert {





  padding: 0.85rem 1.1rem;





  border-radius: var(--mg-radius-md);





  border: 1px solid transparent;





  font-size: 0.9rem;





  display: flex;





  align-items: center;





  gap: 0.6rem;





  animation: alertSlide 0.3s ease;





  margin-bottom: 1rem;





}











@keyframes alertSlide {





  from { opacity: 0; transform: translateY(-8px); }





  to   { opacity: 1; transform: translateY(0); }





}











.alert-success { background: rgba(22,163,74,0.06);   border-color: rgba(22,163,74,0.22);  color: #15803d; }





.alert-error   { background: rgba(220,38,38,0.06);   border-color: rgba(220,38,38,0.22);  color: #b91c1c; }





.alert-warning { background: rgba(217,119,6,0.06);   border-color: rgba(217,119,6,0.22);  color: #b45309; }





.alert-info    { background: rgba(37,99,235,0.05);   border-color: rgba(37,99,235,0.18);  color: #1d4ed8; }











/* ── Admin Layout ───────────────────────────────────────────────────────────── */





.admin-wrap { display: flex; min-height: 100vh; }











.sidebar {





  width: var(--mg-sidebar-width);





  flex-shrink: 0;





  background: var(--mg-sidebar-bg);





  border-right: 1px solid var(--mg-sidebar-border);





  color: var(--mg-sidebar-text);





  display: flex;





  flex-direction: column;





  position: fixed;





  top: 0; left: 0;





  height: 100vh;





  overflow-y: auto;





  z-index: 100;





  transition: transform 0.3s cubic-bezier(0.4,0,0.2,1);





  box-shadow: 2px 0 8px rgba(15,23,42,0.05);





}











.sidebar-logo {





  padding: 1.25rem 1.25rem 1rem;





  display: flex;





  align-items: center;





  gap: 0.75rem;





  border-bottom: 1px solid var(--mg-border);





}











.sidebar-logo img {





  width: 40px;





  height: 40px;





  object-fit: contain;





  filter: drop-shadow(0 2px 6px color-mix(in srgb, var(--mg-accent) 22%, transparent));





}











.sidebar-logo-text h1 {





  font-size: 1.05rem;





  margin: 0;





  font-weight: 700;





  /* colour set via inline style from PHP (auto-contrasts with sidebar bg) */





}











.sidebar-logo-text small {





  display: block;





  font-size: 0.63rem;





  color: var(--mg-text-muted);





  margin-top: 1px;





  letter-spacing: 0.02em;





}











.sidebar-nav { flex: 1; padding: 0.5rem 0.6rem; }











.nav-section-label {





  font-size: 0.8rem;





  font-weight: 700;





  color: var(--mg-sidebar-custom-text, #2b2b2b);





  text-transform: uppercase;





  letter-spacing: 0.12em;





  padding: 0.85rem 0.65rem 0.3rem;





}











.nav-item {





  display: flex;





  align-items: center;





  gap: 0.6rem;





  padding: 0.58rem 0.75rem;





  color: var(--mg-sidebar-custom-link, var(--mg-text-secondary));





  font-size: 0.87rem;





  font-weight: 500;





  border-radius: var(--mg-radius-md);





  transition: var(--mg-transition);





  position: relative;





  cursor: pointer;





  text-decoration: none;





  margin-bottom: 1px;





}











.nav-item i {





  font-size: 0.88rem;





  width: 1rem;





  text-align: center;





  color: var(--mg-sidebar-custom-text, var(--mg-text-muted));





  opacity: 0.7;





  transition: color 0.2s;





  flex-shrink: 0;





}











.nav-item:hover {





  color: var(--mg-sidebar-custom-hover, var(--mg-text-primary));





  background: var(--mg-surface-3);





}











.nav-item:hover i { color: var(--mg-sidebar-custom-hover, var(--mg-accent)); }











.nav-item.active {





  color: var(--mg-sidebar-custom-link, var(--mg-accent));





  background: color-mix(in srgb, var(--mg-sidebar-custom-link, var(--mg-accent)) 12%, transparent);





  font-weight: 600;





}











.nav-item.active i { color: var(--mg-sidebar-custom-link, var(--mg-accent)); opacity: 1; }











.nav-item.active::before {





  content: '';





  position: absolute;





  left: -0.6rem;





  top: 25%;





  bottom: 25%;





  width: 3px;





  background: var(--mg-accent);





  border-radius: 0 2px 2px 0;





}











.sidebar-user-pill {





  display: flex;





  align-items: center;





  gap: .45rem;





  padding: .45rem .85rem;





  margin: .3rem .6rem .1rem;





  background: var(--mg-surface-2);





  border: 1px solid var(--mg-border);





  border-radius: 8px;





  font-size: .78rem;





  flex-shrink: 0;





  transition: background .15s, border-color .15s;





}





a.sidebar-user-pill:hover {





  background: #ffffff;





  border-color: var(--mg-teal);





  color: var(--mg-teal);





}





a.sidebar-user-pill:hover .sidebar-user-name,





a.sidebar-user-pill:hover .sidebar-version {





  color: var(--mg-teal);





}





a.sidebar-user-pill:hover i {





  color: var(--mg-teal) !important;





}





.sidebar-user-name {





  flex: 1;





  font-weight: 600;





  color: var(--mg-text-primary);





  overflow: hidden;





  text-overflow: ellipsis;





  white-space: nowrap;





}





.sidebar-version {





  font-size: .7rem;





  color: var(--mg-accent);





  font-family: monospace;





  white-space: nowrap;





  font-weight: 700;





}











.sidebar-footer {





  padding: .65rem 1rem;





  border-top: 1px solid var(--mg-border);





  background: var(--mg-surface-2);





}





.sidebar-logout {





  display: inline-flex;





  align-items: center;





  gap: .4rem;





  font-size: .78rem;





  color: var(--mg-danger);





  text-decoration: none;





  padding: .25rem .35rem;





  border-radius: 6px;





  transition: background .15s;





}





.sidebar-logout:hover { background: rgba(239,68,68,.08); }











.admin-main {





  flex: 1;





  margin-left: var(--mg-sidebar-width);





  display: flex;





  flex-direction: column;





  min-height: 100vh;





  background: var(--mg-bg-start);





}











.admin-topbar {





  background: var(--mg-topbar-bg);





  border-bottom: 1px solid var(--mg-border);





  padding: 1.35rem 1.5rem;





  display: flex;





  align-items: center;





  justify-content: space-between;





  gap: 1rem;





  position: sticky;





  top: 0;





  z-index: 400;





  box-shadow: 0 1px 4px rgba(15,23,42,0.06);





}











.topbar-title {





  font-family: var(--mg-font-display);





  font-size: 1.3rem;





  font-weight: 700;





  color: #ffffff;





}











.topbar-actions { display: flex; align-items: center; gap: 1rem; padding-left: .5rem; }











.topbar-btn {





  display: inline-flex;





  align-items: center;





  gap: 0.35rem;





  padding: 0;





  border-radius: 0;





  background: transparent;





  color: #ffffff;





  border: none;





  cursor: pointer;





  font-family: var(--mg-font-display);





  font-size: 0.875rem;





  font-weight: 500;





  transition: color 0.2s;





  line-height: 1;





}





.topbar-btn:hover {





  background: none;





  color: var(--mg-nav-hover, #fdd79c);





}





.topbar-btn-pill {





  background: #ffffff !important;





  color: var(--mg-accent) !important;





  border-radius: 100px !important;





  padding: 6px 16px !important;





  font-weight: 700 !important;





  font-size: 14px !important;





  min-width: 32px;





  text-align: center;





  transition: transform 0.2s, box-shadow 0.2s;





}

/* View MealGrid standout pill in topbar */
.topbar-btn-viewmg {
  background: #fff !important;
  color: var(--mg-accent) !important;
  border-radius: 100px !important;
  padding: 6px 14px !important;
  font-weight: 700 !important;
  font-size: .82rem !important;
  box-shadow: 0 1px 5px rgba(0,0,0,.18);
  transition: opacity .18s;
}
.topbar-btn-viewmg:hover { opacity: .88; color: var(--mg-accent) !important; }
/* Hide label text on smaller screens for extra topbar links */
@media (max-width: 900px) { .topbar-link-label { display: none !important; } }






.topbar-btn-pill:hover {





  color: var(--mg-accent) !important;





  background: #ffffff !important;





  transform: translateY(-1px);





  box-shadow: 0 4px 14px rgba(0,0,0,0.2) !important;





}











.topbar-user {





  display: flex;





  align-items: center;





  gap: 0.5rem;





  font-size: 0.82rem;





  color: var(--mg-text-muted);





}











.avatar {





  width: 32px;





  height: 32px;





  border-radius: 50%;





  background: linear-gradient(135deg, var(--mg-accent), #0891b2);





  display: flex;





  align-items: center;





  justify-content: center;





  font-size: 0.75rem;





  font-weight: 700;





  color: #ffffff;





  flex-shrink: 0;





}











.admin-content {





  flex: 1;





  padding: 1.5rem;





  width: 100%;





  min-width: 0;





}





/* Wide layout for pages that need full viewport (calendar) */





.admin-content.admin-content--wide {





  max-width: none;





  margin: 0;





}











.menu-toggle {





  display: none;





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  color: var(--mg-text-primary);





  padding: 0.4rem 0.6rem;





  border-radius: var(--mg-radius-sm);





  cursor: pointer;





  font-size: 1rem;





}











/* Admin Font Scale (scoped - does not affect member/.pub-* pages) */





/* 5-tier: xl=page titles | lg=card titles | base=body | sm=labels | xs=badges */





.admin-content h2,





.admin-content .page-header-text h2 { font-size: 1.25rem; font-weight: 700; }





.admin-content h3                   { font-size: 0.95rem; font-weight: 600; }





.admin-content p,





.admin-content td,





.admin-content th                   { font-size: 0.9rem; }





.admin-content label                { font-size: 0.82rem; font-weight: 500; color: var(--mg-text-secondary); }











/* ── Page Header ────────────────────────────────────────────────────────────── */





.page-header {





  display: flex;





  align-items: flex-start;





  justify-content: space-between;





  gap: 1rem;





  margin-bottom: 1.5rem;





  flex-wrap: wrap;





}











.page-header-text h2 { margin-bottom: 0.2rem; }





.page-header-text p  { font-size: 0.88rem; margin: 0; color: #414449; }











/* ── Help Panel ─────────────────────────────────────────────────────────────── */





.help-panel {





  margin-bottom: 1.25rem;





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius);





  background: var(--mg-surface);





  overflow: hidden;





}





.help-panel-inner {





  padding: 1.1rem 1.4rem 1.25rem;





}





.help-panel-header {





  display: flex;





  align-items: center;





  justify-content: space-between;





  font-size: .82rem;





  font-weight: 700;





  color: var(--mg-text-primary);





  margin-bottom: .9rem;





}





.help-panel-close {





  background: none;





  border: none;





  cursor: pointer;





  color: var(--mg-text-muted);





  font-size: .85rem;





  padding: .1rem .3rem;





  border-radius: 4px;





  line-height: 1;





  transition: color .15s;





}





.help-panel-close:hover { color: var(--mg-text-primary); }





.help-panel-grid {





  display: grid;





  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));





  gap: .75rem 1.5rem;





}





.help-panel-item-title {





  margin: 0 0 .2rem;





  font-size: .79rem;





  font-weight: 700;





  color: var(--mg-text-primary);





}





.help-panel-item-body {





  margin: 0;





  font-size: .77rem;





  color: #414449;





  line-height: 1.6;





}











/* ── Calendar Grid ──────────────────────────────────────────────────────────── */





.cal-wrap {





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius-xl);





  overflow: hidden;





  box-shadow: var(--mg-shadow-md);





}











.cal-header {





  display: flex;





  align-items: center;





  justify-content: space-between;





  padding: 1.1rem 1.5rem;





  border-bottom: 1px solid var(--mg-border);





  background: var(--mg-accent);





}











.cal-month-title {





  font-family: var(--mg-font-display);





  font-size: 1.3rem;





  font-weight: 700;





  color: var(--mg-cal-header-text, #ffffff);





}











.cal-weekdays {





  display: grid;





  grid-template-columns: repeat(7,1fr);





  border-bottom: 1px solid var(--mg-border);





  background: var(--mg-surface-2);





}











.cal-weekday {





  padding: 0.6rem;





  text-align: center;





  font-size: 0.85rem;





  font-weight: 700;





  color: #2f2f2f;





  text-transform: uppercase;





  letter-spacing: 0.08em;





}











.cal-grid {





  display: grid;





  grid-template-columns: repeat(7,1fr);





  /* Taller rows to accommodate 2-line chips with vote counts */





  grid-auto-rows: minmax(160px, 1fr);





}











.cal-day {





  height: 160px;





  border-right: 1px solid var(--mg-border);





  border-bottom: 1px solid var(--mg-border);





  padding: 0.5rem;





  position: relative;





  overflow: hidden;





  transition: background 0.2s;





  cursor: pointer;





  background: var(--mg-surface);





}











.cal-day:nth-child(7n) { border-right: none; }





.cal-day:hover { background: color-mix(in srgb, var(--mg-accent) 2%, transparent); }











.cal-day.today { background: rgb(33 33 33 / 12%); }





.cal-day.today .cal-day-number {





  width: 22px; height: 22px;





  background: var(--mg-accent);





  color: #ffffff;





  border-radius: 50%;





  display: flex;





  align-items: center;





  justify-content: center;





  font-size: 0.72rem;





  font-weight: 700;





}











.cal-day.other-month { background: var(--mg-surface-2); opacity: 0.6; }





.cal-day.drag-over   { background: color-mix(in srgb, var(--mg-accent) 7%, transparent); outline: 2px dashed var(--mg-accent); outline-offset: -2px; }











.cal-day-number {





  font-size: 0.78rem;





  font-weight: 600;





  color: var(--mg-text-muted);





  margin-bottom: 0.3rem;





}











.cal-meal-chip {





  background: color-mix(in srgb, var(--mg-accent) 7%, transparent);





  border: 1px solid color-mix(in srgb, var(--mg-accent) 18%, transparent);





  border-radius: var(--mg-radius-sm);





  padding: 0.2rem 0.5rem;





  font-size: 0.72rem;





  font-weight: 500;





  color: var(--mg-accent);





  margin-bottom: 0.2rem;





  display: flex;





  align-items: center;





  gap: 0.3rem;





  overflow: hidden;





  text-overflow: ellipsis;





  white-space: nowrap;





  cursor: grab;





  transition: background 0.2s;





}











.chip-time {





  font-size: 0.58rem;





  text-transform: uppercase;





  letter-spacing: 0.06em;





  opacity: 0.7;





  font-weight: 600;





  background: rgba(currentColor, 0.12);





  border-radius: 3px;





  padding: 0 3px;





  flex-shrink: 0;





}











.cal-meal-chip:hover { filter: brightness(1.12); }





.cal-meal-chip.dragging { opacity: 0.5; cursor: grabbing; }











/* ── 2-line chip layout (v2.0.9) ──────────────────────────────────────────── */





.cal-meal-chip.chip-2line {





  flex-direction: column;





  align-items: flex-start;





  gap: 0;





  padding: 0.25rem 0.45rem;





  white-space: normal;





  height: auto;





  min-height: 2.0rem;





}











.chip-line1 {





  display: flex;





  align-items: center;





  gap: 0.25rem;





  width: 100%;





  line-height: 1.2;





}











.chip-line2 {





  display: flex;





  align-items: center;





  gap: 0.2rem;





  font-size: 0.72rem;





  font-weight: 600;





  line-height: 1.3;





  overflow: hidden;





  text-overflow: ellipsis;





  white-space: nowrap;





  width: 100%;





  max-width: 100%;





}











.chip-icon {





  font-size: 0.75rem;





  flex-shrink: 0;





  line-height: 1;





}











/* Vote counts inside chip */





.chip-votes {





  display: flex;





  align-items: center;





  gap: 0.2rem;





  margin-left: auto;





  flex-shrink: 0;





}





.chip-vote-item {





  font-size: 0.6rem;





  font-weight: 700;





  opacity: 0.85;





  letter-spacing: -0.01em;





  white-space: nowrap;





}





.cal-meal-chip.type-meal      { background: color-mix(in srgb, var(--mg-chip-meal)      7%, transparent); border-color: color-mix(in srgb, var(--mg-chip-meal)      18%, transparent); color: var(--mg-chip-meal); }





.cal-meal-chip.type-takeout   { background: color-mix(in srgb, var(--mg-chip-takeout)   7%, transparent); border-color: color-mix(in srgb, var(--mg-chip-takeout)   18%, transparent); color: var(--mg-chip-takeout); }





.cal-meal-chip.type-new       { background: color-mix(in srgb, var(--mg-chip-new)       7%, transparent); border-color: color-mix(in srgb, var(--mg-chip-new)       18%, transparent); color: var(--mg-chip-new); }





.cal-meal-chip.type-leftovers { background: color-mix(in srgb, var(--mg-chip-leftovers) 7%, transparent); border-color: color-mix(in srgb, var(--mg-chip-leftovers) 18%, transparent); color: var(--mg-chip-leftovers); }





.cal-meal-chip.type-out       { background: color-mix(in srgb, var(--mg-chip-out)       7%, transparent); border-color: color-mix(in srgb, var(--mg-chip-out)       18%, transparent); color: var(--mg-chip-out); }





.cal-meal-chip.type-unplanned { background: color-mix(in srgb, var(--mg-chip-unplanned) 7%, transparent); border-color: color-mix(in srgb, var(--mg-chip-unplanned) 18%, transparent); color: var(--mg-chip-unplanned); }





.cal-meal-chip.type-baking    { background: color-mix(in srgb, var(--mg-chip-baking)    7%, transparent); border-color: color-mix(in srgb, var(--mg-chip-baking)    18%, transparent); color: var(--mg-chip-baking); }











.cal-add-btn {





  position: absolute;





  bottom: 0.3rem;





  right: 0.3rem;





  width: 22px;





  height: 22px;





  border-radius: 50%;





  background: var(--mg-surface-3);





  border: 1px solid var(--mg-border);





  color: var(--mg-text-muted);





  font-size: 0.85rem;





  display: flex;





  align-items: center;





  justify-content: center;





  opacity: 0;





  transition: all 0.2s;





  cursor: pointer;





  line-height: 1;





}











.cal-day:hover .cal-add-btn {





  opacity: 1;





  background: var(--mg-accent);





  border-color: var(--mg-accent);





  color: #ffffff;





}











/* ── Shopping List ──────────────────────────────────────────────────────────── */





.shopping-list { list-style: none; }











.shopping-item {





  display: flex;





  align-items: center;





  gap: 1rem;





  padding: 0.9rem 1.2rem;





  border-bottom: 1px solid var(--mg-border);





  transition: var(--mg-transition);





  cursor: pointer;





}











.shopping-item:last-child { border-bottom: none; }





.shopping-item:hover { background: color-mix(in srgb, var(--mg-accent) 2%, transparent); }





.shopping-item.checked { opacity: 0.5; }





.shopping-item.checked .item-name { text-decoration: line-through; color: var(--mg-text-muted); }











.shop-checkbox {





  width: 22px;





  height: 22px;





  border-radius: 50%;





  border: 2px solid var(--mg-border-strong);





  flex-shrink: 0;





  display: flex;





  align-items: center;





  justify-content: center;





  transition: var(--mg-transition);





  font-size: 0.75rem;





  color: transparent;





}











.shopping-item.checked .shop-checkbox {





  border-color: var(--mg-accent);





  background: var(--mg-accent);





  color: #ffffff;





}











.item-name  { font-size: 0.85rem; font-weight: 500; color: var(--mg-text-primary); flex: 1; }





.item-qty   { font-size: 0.82rem; color: var(--mg-accent); white-space: nowrap; font-weight: 600; }





.item-notes { font-size: 0.75rem; color: var(--mg-text-muted); }











/* ── Modal ──────────────────────────────────────────────────────────────────── */





.modal-overlay {





  position: fixed;





  inset: 0;





  background: rgba(15,23,42,0.3);





  backdrop-filter: blur(4px);





  z-index: 1000;





  display: flex;





  align-items: center;





  justify-content: center;





  padding: 1rem;





  opacity: 0;





  pointer-events: none;





  transition: opacity 0.25s;





}











.modal-overlay.active { opacity: 1; pointer-events: all; }











.modal {





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius-xl);





  padding: 2rem;





  max-width: 560px;





  width: 100%;





  max-height: 90vh;





  overflow-y: auto;





  box-shadow: var(--mg-shadow-lg);





  transform: scale(0.95) translateY(10px);





  transition: transform 0.25s cubic-bezier(0.4,0,0.2,1);





}











.modal-overlay.active .modal { transform: scale(1) translateY(0); }











.modal-header {





  display: flex;





  align-items: center;





  justify-content: space-between;





  margin-bottom: 1.5rem;





  padding-bottom: 1rem;





  border-bottom: 1px solid var(--mg-border);





}











.modal-close {





  background: var(--mg-surface-3);





  border: 1px solid var(--mg-border);





  color: var(--mg-text-muted);





  width: 30px;





  height: 30px;





  border-radius: 50%;





  cursor: pointer;





  display: flex;





  align-items: center;





  justify-content: center;





  transition: var(--mg-transition);





  font-size: 0.9rem;





}











.modal-close:hover { color: var(--mg-danger); border-color: rgba(220,38,38,0.3); background: rgba(220,38,38,0.05); }











.modal-footer {





  display: flex;





  gap: 0.75rem;





  justify-content: flex-end;





  margin-top: 1.5rem;





  padding-top: 1rem;





  border-top: 1px solid var(--mg-border);





  flex-wrap: wrap;





}











/* ── Ingredient / Step rows ──────────────────────────────────────────────────── */





.ingredient-row, .step-row {





  display: flex;





  gap: 0.5rem;





  align-items: flex-start;





  margin-bottom: 0.5rem;





  animation: rowSlide 0.2s ease;





}











@keyframes rowSlide {





  from { opacity: 0; transform: translateY(-6px); }





  to   { opacity: 1; transform: translateY(0); }





}











.ingredient-row input:first-child  { flex: 3; }





.ingredient-row input:nth-child(2) { flex: 1.5; }





.ingredient-row input:nth-child(3) { flex: 1.5; }











.drag-handle { cursor: grab; color: var(--mg-text-muted); padding: 0.7rem 0.3rem; font-size: 0.85rem; }





.drag-handle:hover { color: var(--mg-accent); }











/* ── Search ─────────────────────────────────────────────────────────────────── */





.search-wrap {





  position: relative;





  z-index: 300;  /* Above sticky table headers (z-index: 90) and all admin content */





}





.search-wrap input { padding-left: 2.5rem; }











@media (max-width: 768px) {





  .search-wrap   { z-index: 98; }





  .search-results { z-index: 98; }





}











.search-icon {





  position: absolute;





  left: 0.85rem;





  top: 50%;





  transform: translateY(-50%);





  color: var(--mg-text-muted);





  font-size: 0.85rem;





  pointer-events: none;





}











.search-results {





  position: fixed; /* overridden by JS portal; fixed here as safe fallback */





  top: calc(100% + 4px);





  left: 0;





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius-md);





  max-height: 280px;





  overflow-y: auto;





  z-index: 99999;





  box-shadow: var(--mg-shadow-lg);





  display: none;





}











.search-results.active { display: block; }











.search-result-item {





  display: flex;





  align-items: center;





  gap: 0.75rem;





  padding: 0.65rem 1rem;





  cursor: pointer;





  border-bottom: 1px solid var(--mg-border);





  transition: background 0.15s;





  color: var(--mg-text-secondary);





  font-size: 0.88rem;





}











.search-result-item:last-child { border-bottom: none; }





.search-result-item:hover,





.search-result-item.highlighted { background: color-mix(in srgb, var(--mg-accent) 7%, transparent); color: var(--mg-text-primary); }





.search-result-item img { width: 36px; height: 36px; border-radius: var(--mg-radius-sm); object-fit: cover; }











/* ── Public / Family View ───────────────────────────────────────────────────── */





.public-header { text-align: center; padding: 2.5rem 1rem 1.5rem; }











.public-logo {





  width: 72px;





  height: 72px;





  object-fit: contain;





  filter: drop-shadow(0 4px 12px color-mix(in srgb, var(--mg-accent) 25%, transparent));





  animation: logoFloat 4s ease-in-out infinite;





}











@keyframes logoFloat {





  0%, 100% { transform: translateY(0); }





  50%       { transform: translateY(-6px); }





}











.public-title {





  font-family: var(--mg-font-display);





  font-size: clamp(2rem,5vw,3rem);





  margin-top: 0.75rem;





  background: linear-gradient(135deg, var(--mg-accent), #0891b2);





  -webkit-background-clip: text;





  -webkit-text-fill-color: transparent;





  background-clip: text;





}











/* ══════════════════════════════════════════════════════════════════════════════





   GRID VIEW — Shared Public Navigation





   ══════════════════════════════════════════════════════════════════════════════ */











/* Nav bar */





.pub-nav {





  position: sticky;





  top: 0;





  z-index: 10001;





  box-shadow: 0 4px 20px rgba(0,0,0,.28);





}





.pub-nav-inner {





  max-width: 1600px;





  margin: 0 auto;





  padding: 0 1.5rem;





  height: 100px;





  display: flex;





  align-items: center;





  gap: 1rem;





}





.pub-nav-brand {





  display: flex;





  align-items: center;





  gap: .6rem;





  text-decoration: none;





  flex-shrink: 0;





}





.pub-nav-logo {





  width: 34px;





  height: 34px;





  object-fit: contain;





  border-radius: 8px;





  filter: drop-shadow(0 2px 6px rgba(0,0,0,.25));





}





.pub-nav-title {





  font-family: var(--mg-font-display);





  font-size: 1.1rem;





  font-weight: 700;





  white-space: nowrap;





}





.pub-nav-links {





  display: flex;





  gap: .15rem;





  margin-left: auto;





  align-items: center;





}





.pub-nav-link {





  display: flex;





  align-items: center;





  gap: .35rem;





  padding: .38rem .8rem;





  border-radius: 20px;





  font-size: .82rem;





  font-weight: 500;





  text-decoration: none;





  opacity: .78;





  transition: opacity .18s, background .18s;





  white-space: nowrap;





}





.pub-nav-link:hover {





  opacity: 1;





  background: rgba(255,255,255,.16);





}





.pub-nav-link.pub-nav-active {





  opacity: 1;





  background: rgba(255,255,255,.22);





  font-weight: 700;





}

/* Planner nav link - solid white pill standout */
/* Planner nav link - solid white rounded pill */
.pub-nav-planner {
  background: #fff !important;
  color: var(--mg-accent) !important;
  font-weight: 700 !important;
  opacity: 1 !important;
  border-radius: 50px !important;
  padding: .38rem 1.1rem !important;
  box-shadow: 0 1px 6px rgba(0,0,0,.18);
}
.pub-nav-planner:hover { background: #fff !important; opacity: .88 !important; }
.pub-nav-planner.pub-nav-active { background: #fff !important; color: var(--mg-accent) !important; }












.pub-nav-right {





  display: flex;





  align-items: center;





  gap: .4rem;





  flex-shrink: 0;





  margin-left: .5rem;





}





.pub-nav-avatar {





  width: 32px;





  height: 32px;





  border-radius: 50%;





  border: 2px solid;





  display: flex;





  align-items: center;





  justify-content: center;





  font-size: .78rem;





  font-weight: 700;





  text-decoration: none;





  opacity: .9;





  transition: opacity .18s;





  background: rgba(255,255,255,.15);





}





.pub-nav-avatar:hover { opacity: 1; }





.pub-nav-daybtn {





  display: flex;





  align-items: center;





  gap: .25rem;





  padding: .32rem .65rem;





  border: 1px solid rgba(255,255,255,.3);





  border-radius: 6px;





  font-size: .78rem;





  font-weight: 500;





  text-decoration: none;





  opacity: .85;





  transition: background .18s, opacity .18s;





}





.pub-nav-daybtn:hover {





  background: rgba(255,255,255,.15);





  opacity: 1;





}





.pub-nav-daybtn-label { font-size: .76rem; }











/* Hide link labels on small screens, keep icons */





@media (max-width: 640px) {





  .pub-nav-link span { display: none; }
  .nav-label { display: none; }





  .pub-nav-title     { display: none; }





  .pub-nav-daybtn-label { display: none; }





  .pub-nav-link { padding: .38rem .5rem; }
  .pub-nav-links { gap: .05rem; overflow: hidden; flex-shrink: 1; }
  .pub-nav-inner { overflow: visible; }
  .pub-nav-logo-text { flex-shrink: 0; }





}











/* Tonight card animation */





@keyframes tonightSlideIn {





  from { opacity: 0; transform: translateY(-16px) scale(0.97); }





  to   { opacity: 1; transform: translateY(0)     scale(1); }





}











/* ── Grid View — Two-column layout ───────────────────────────────────────────────────────── */





.pub-layout {





  max-width: 1600px;





  margin: 0 auto;





  padding: 2rem 1.25rem 1.25rem;





  display: grid;





  grid-template-columns: 300px 1fr;





  gap: 1.25rem;





  align-items: start;





  position: relative;





  z-index: 1;





}





.pub-lcol,





.pub-rcol {





  display: flex;





  flex-direction: column;





  gap: 1rem;





}











/* Floating card — the core surface */





.pub-card {





  background: var(--mg-surface, #fff);





  border-radius: 16px;





  box-shadow: 0 4px 24px rgba(0,0,0,.13);





  border: 1px solid rgba(255,255,255,.5);





  padding: 1.25rem;





  overflow: hidden;





  position: relative;





  z-index: 1;





}





.pub-card.pub-card-nopad { padding: 0; }











/* Graphic link button */





.pub-glink {





  display: flex;





  align-items: center;





  gap: .85rem;





  background: var(--mg-surface, #fff);





  border: 1px solid var(--mg-border, #e2e8f0);





  border-radius: 14px;





  padding: .85rem 1rem;





  text-decoration: none;





  color: var(--mg-text-primary, #1e293b);





  box-shadow: 0 3px 14px rgba(0,0,0,.09);





  cursor: pointer;





  transition: all .22s;





}





.pub-glink:hover {





  border-color: var(--mg-accent);





  box-shadow: 0 6px 20px rgba(0,0,0,.15);





  transform: translateY(-2px);





}





.pub-glink-icon {





  width: 44px;





  height: 44px;





  border-radius: 10px;





  background: color-mix(in srgb, var(--mg-accent) 10%, white);





  border: 1px solid color-mix(in srgb, var(--mg-accent) 20%, transparent);





  display: flex;





  align-items: center;





  justify-content: center;





  font-size: 1.35rem;





  flex-shrink: 0;





}





.pub-glink-body { flex: 1; min-width: 0; }





.pub-glink-title { font-weight: 700; font-size: .88rem; }





.pub-glink-sub   { font-size: .73rem; color: var(--mg-text-muted, #94a3b8); margin-top: .1rem; }





.pub-glink-arrow { color: var(--mg-text-muted, #94a3b8); font-size: .85rem; flex-shrink: 0; }











/* 3-across compact link row */





.pub-glinks-3 {





  display: grid;





  grid-template-columns: repeat(3, 1fr);





  gap: .85rem;





}





.pub-glink.pub-glink-compact {





  flex-direction: column;





  text-align: center;





  padding: .85rem .6rem;





  gap: .4rem;





  align-items: center;





}





.pub-glink.pub-glink-compact .pub-glink-icon {





  width: 40px;





  height: 40px;





  margin: 0 auto;





}





.pub-glink.pub-glink-compact .pub-glink-title { font-size: .8rem; }











/* "This week" day strip */





.pub-week-strip {





  display: flex;





  flex-direction: column;





  gap: 0;





  margin: 0 -.25rem; /* compensate for card padding so rows align nicely */





}





.pub-week-row {





  display: flex;





  align-items: center;





  gap: .65rem;





  padding: .75rem 1rem;





  border-radius: 6px;





  cursor: pointer;





  transition: background .15s;





  text-decoration: none;





  color: #2f2f2f;





  border: none;





  position: relative;





  margin: 0 .05rem;





}





/* 75% width separator above each row (except first) */





.pub-week-row + .pub-week-row::before {





  content: '';





  position: absolute;





  top: 0;





  left: 12.5%;





  width: 75%;





  height: 1px;





  background: var(--mg-border, #e2e8f0);





}





.pub-week-row:hover {





  background: var(--mg-surface-2, #f8fafc);





}





.pub-week-row.pub-week-today {





  background: color-mix(in srgb, var(--mg-accent) 15%, #ffffff);





}





.pub-week-dow  { font-size: .9rem; font-weight: 700; text-transform: uppercase; color: #2f2f2f; width: 28px; letter-spacing: .04em; flex-shrink: 0; }





.pub-week-date { font-size: .9rem; font-weight: 700; width: 22px; text-align: center; color: #2f2f2f; flex-shrink: 0; }





.pub-week-meal { font-size: .9rem; flex: 1; white-space: normal; line-height: 1.35; word-break: break-word; color: #3D2314; }





.pub-week-row.pub-week-today .pub-week-dow,





.pub-week-row.pub-week-today .pub-week-date { color: var(--mg-accent); }





.pub-week-badge {





  font-size: .62rem;





  font-weight: 700;





  background: var(--mg-accent);





  color: #fff;





  padding: .1rem .42rem;





  border-radius: 10px;





  flex-shrink: 0;





}





.pub-week-badge.pub-week-badge-out {





  background: color-mix(in srgb, var(--mg-chip-takeout, #af02b3) 15%, transparent);





  color: var(--mg-chip-takeout, #af02b3);





}











/* Right col: view tabs bar */





.pub-view-bar {





  padding: .7rem 1rem;





  display: flex;





  align-items: center;





  gap: .4rem;





  border-bottom: 1px solid var(--mg-border, #e2e8f0);





  background: var(--mg-surface, #fff);





  border-radius: 16px 16px 0 0;





}





.pub-view-bar .pub-month-nav {





  display: flex;





  align-items: center;





  gap: .35rem;





  font-size: 1.19rem;





  font-weight: 600;





}





.pub-view-bar .pub-month-nav a {





  display: flex;





  align-items: center;





  justify-content: center;





  width: 28px;





  height: 28px;





  border-radius: 6px;





  border: 1px solid var(--mg-border, #e2e8f0);





  color: var(--mg-text-muted);





  text-decoration: none;





  transition: all .15s;





}





.pub-view-bar .pub-month-nav a:hover {





  border-color: var(--mg-accent);





  color: var(--mg-accent);





}











/* Calendar inside card (no extra wrapping padding) */





.pub-cal-card {





  background: var(--mg-surface, #fff);





  border-radius: 16px;





  box-shadow: 0 4px 24px rgba(0,0,0,.13);





  border: 1px solid rgba(255,255,255,.5);





  overflow: hidden;





}





.pub-cal-card .cal-wrap { padding: .75rem 1rem 1rem; }





.pub-cal-card .pub-view-bar { border-radius: 16px 16px 0 0; }











@media (max-width: 820px) {





  /* Shopping list: center Reset/Lock buttons on mobile */
  .shop-progress-btns { justify-content: center !important; width: 100%; padding-bottom: .5rem; }
  .shop-item-recipes { display: none; }
  /* Stock note (pantry status) wraps below on mobile */
  .pub-shop-item { flex-wrap: wrap; align-items: flex-start; }
  .shop-item-qty { padding-top: .1rem; }
  .shop-stock-note { order: 3; flex: 1 1 100%; margin: 0 !important; font-size: .72rem !important; text-align: right; padding-right: .1rem; }
  /* Cookbook filter card: solid white body, keep header accent */
  #cbSidebarPanel .pub-card { background: #fff !important; }
  #cbSidebarPanel .cb-card-body { background: #fff !important; }
  .pub-layout { grid-template-columns: 1fr; padding: .85rem; width: 100%; box-sizing: border-box; overflow-x: hidden; }





  .pub-glinks-3 { grid-template-columns: 1fr 1fr; }





}





/* Back navigation button (meal.php, cookbook) */





.pub-back-btn {





  display: inline-flex;





  align-items: center;





  gap: .35rem;





  color: rgba(255,255,255,.8);





  font-size: .82rem;





  font-weight: 500;





  text-decoration: none;





  transition: color .15s;





  position: relative;





  z-index: 1;





}





.pub-back-btn:hover { color: #fff; }











.pub-day-slot {





  border: 1px solid var(--mg-border);





  border-radius: 9px;





  overflow: hidden;





}





.pub-day-slot-active {





  border-color: color-mix(in srgb, var(--mg-accent) 35%, transparent);





  background: color-mix(in srgb, var(--mg-accent) 4%, white);





}





.pub-day-slot-head {





  display: flex;





  align-items: center;





  gap: .45rem;





  padding: .45rem .75rem;





  background: #ffffff;





  border-bottom: 1px solid var(--mg-border);





}





.pub-day-slot-lbl {





  font-size: .75rem;





  font-weight: 700;





  text-transform: uppercase;





  letter-spacing: .08em;





  color: var(--mg-text-muted);





  flex: 1;





}





.pub-day-dflt {





  font-size: .62rem;





  background: var(--mg-accent);





  color: #fff;





  padding: .1rem .42rem;





  border-radius: 10px;





}





.pub-day-meal-row {





  display: flex;





  align-items: center;





  gap: .6rem;





  padding: .6rem .75rem;





  text-decoration: none;





  color: var(--mg-text-primary);





  background: #ffffffa6;





  transition: background .15s;





}





.pub-day-meal-row:hover { background: color-mix(in srgb, var(--mg-accent) 12%, white); color: var(--mg-accent) !important; }





.pub-day-meal-row-active { background: color-mix(in srgb, var(--mg-accent) 6%, white) !important; }





.pub-day-special, .pub-day-empty {





  display: flex;





  align-items: center;





  gap: .6rem;





  padding: .6rem .75rem;





  font-size: .84rem;





  color: var(--mg-text-muted);





  background: var(--mg-surface);





  font-style: italic;





}





/* Recipe accordions inside meal detail */





.pub-recipe-acc {





  border: 1px solid var(--mg-border);





  border-radius: 9px;





  overflow: hidden;





  margin-bottom: .5rem;





}





.pub-recipe-acc-h {





  display: flex;





  align-items: center;





  gap: .65rem;





  padding: .65rem .85rem;





  cursor: pointer;





  background: var(--mg-surface);





  transition: background .15s;





}





.pub-recipe-acc-h:hover { background: var(--mg-surface-2); }





.pub-recipe-acc-body {





  padding: .75rem .85rem;





  background: var(--mg-surface-2);





  border-top: 1px solid var(--mg-border);





}























/* ── Shopping List — shared styles (shopping-list.php + day.php) ─────────────── */





.shop-cat-header {





  font-size: .9rem;





  font-weight: 700;





  text-transform: capitalize;








  color: var(--mg-accent);





  padding: .45rem 1rem;





  border-bottom: 1px solid var(--mg-border);





  background: #dddddd;





  display: flex;





  align-items: center;





  gap: .5rem;





}





.pub-shop-item {





  display: flex;





  align-items: center;





  gap: .85rem;





  padding: .75rem 1rem;





  border-bottom: 1px solid var(--mg-border);





  cursor: pointer;





  user-select: none;





  transition: opacity .2s;





  background: #ffffffcf;





  border-radius: 0;





}





.pub-shop-item:last-child { border-bottom: none; }





.pub-shop-item.checked { opacity: .45; }





.pub-shop-item.checked .shop-item-name { text-decoration: line-through; color: var(--mg-text-muted); }





.pub-shop-checkbox {





  width: 22px;





  height: 22px;





  border: 2px solid var(--mg-accent);





  border-radius: 6px;





  flex-shrink: 0;





  display: flex;





  align-items: center;





  justify-content: center;





  transition: background .15s, border-color .15s;





  font-size: .7rem;





  color: transparent;





  background: transparent;





}





.pub-shop-item.checked .pub-shop-checkbox { background: var(--mg-accent); border-color: var(--mg-accent); color: #fff; }





.shop-item-name { flex: 1; font-size: .9rem; color: var(--mg-text-primary); font-weight: 500; }





.shop-item-qty  { font-size: .82rem; color: var(--mg-accent); font-weight: 700; white-space: nowrap; }





.shop-item-recipes { font-size: .7rem; color: #3D2314; font-style: italic; margin-top: .1rem; }





.progress-bar-wrap { background: var(--mg-surface-3); border-radius: 99px; height: 6px; overflow: hidden; margin: .6rem 0 .3rem; }





.progress-bar-fill { height: 100%; background: linear-gradient(90deg, var(--mg-accent), var(--mg-teal)); border-radius: 99px; width: 0; transition: width .4s ease; }











/* ── Login Page ─────────────────────────────────────────────────────────────── */





.login-bg {





  min-height: 100vh;





  background: var(--mg-bg-start, #f0f4f8);





}











.login-wrap {





  min-height: 100vh;





  display: flex;





  flex-direction: column;





  align-items: center;





  justify-content: center;





  padding: 2rem 1rem;





  gap: 0;





}











.login-card {





  width: 100%;





  max-width: 420px;





  padding: 2.5rem;





  text-align: center;





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius-xl);





  box-shadow: var(--mg-shadow-lg);





}











.login-logo {





  display: flex;





  flex-direction: column;





  align-items: center;





  margin-bottom: 1.25rem;





  text-decoration: none;





}











.login-logo img {





  width: 72px;





  height: 72px;





  object-fit: contain;





  filter: drop-shadow(0 4px 12px color-mix(in srgb, var(--mg-accent) 22%, transparent));





  margin-bottom: 0.5rem;





}











.login-title {





  font-size: 1.5rem;





  font-weight: 800;





  color: var(--mg-accent, #A1280B);





  margin: 0 0 0.15rem;





  letter-spacing: -.02em;





}











.login-sub {





  font-size: .85rem;





  color: var(--mg-text-muted, #64748b);





  margin: 0;





}











/* login.php uses <img class="login-logo"> directly */





img.login-logo {





  display: block;





  width: 72px;





  height: 72px;





  object-fit: contain;





  margin: 0 auto 0.75rem;





  filter: drop-shadow(0 4px 12px color-mix(in srgb, var(--mg-accent) 22%, transparent));





}











.login-card h2 { margin-bottom: 0.3rem; }











/* ── Charts ─────────────────────────────────────────────────────────────────── */





.chart-wrap { position: relative; padding: 0.5rem 0; }











.chart-bar-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.6rem; }











.chart-bar-label {





  font-size: 0.78rem;





  color: var(--mg-text-muted);





  width: 80px;





  flex-shrink: 0;





  text-align: right;





}











.chart-bar-track {





  flex: 1;





  height: 8px;





  background: var(--mg-surface-3);





  border: 1px solid var(--mg-border);





  border-radius: 99px;





  overflow: hidden;





}











.chart-bar-fill {





  height: 100%;





  border-radius: 99px;





  background: linear-gradient(90deg, var(--mg-accent), #0891b2);





  width: 0;





  transition: width 1s cubic-bezier(0.4,0,0.2,1);





}











.chart-bar-value { font-size: 0.78rem; font-weight: 600; color: var(--mg-accent); width: 30px; flex-shrink: 0; }











/* ── Utility ─────────────────────────────────────────────────────────────────── */





.flex           { display: flex; }





.flex-col       { flex-direction: column; }





.items-center   { align-items: center; }





.justify-between{ justify-content: space-between; }





.gap-sm         { gap: 0.5rem; }





.gap-md         { gap: 1rem; }





.gap-lg         { gap: 1.5rem; }





.flex-wrap      { flex-wrap: wrap; }





.flex-1         { flex: 1; }











.grid-2    { display: grid; grid-template-columns: repeat(2,1fr); gap: 1rem; }





.grid-3    { display: grid; grid-template-columns: repeat(3,1fr); gap: 1rem; }





.grid-4    { display: grid; grid-template-columns: repeat(4,1fr); gap: 1rem; }





.grid-auto { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px,1fr)); gap: 1rem; }











.mb-0 { margin-bottom: 0 !important; }





.mb-1 { margin-bottom: 0.5rem; }





.mb-2 { margin-bottom: 1rem; }





.mb-3 { margin-bottom: 1.5rem; }





.mb-4 { margin-bottom: 2rem; }





.mt-2 { margin-top: 1rem; }





.mt-3 { margin-top: 1.5rem; }











.text-center   { text-align: center; }





.text-right    { text-align: right; }





.text-accent   { color: var(--mg-accent); }





.text-teal     { color: var(--mg-accent); }





.text-muted    { color: var(--mg-text-muted); }





.text-danger   { color: var(--mg-danger); }





.text-sm       { font-size: 0.85rem; }





.text-xs       { font-size: 0.75rem; }





.font-bold     { font-weight: 700; }











.divider { border: none; border-top: 1px solid var(--mg-border); margin: 1.5rem 0; }











.empty-state { text-align: center; padding: 3rem 1rem; color: var(--mg-text-muted); }





.empty-state i { font-size: 2.5rem; opacity: 0.20; display: block; margin-bottom: 0.75rem; color: var(--mg-accent); }





.empty-state p { font-size: 0.9rem; }











/* Scrollbar */





::-webkit-scrollbar { width: 6px; height: 6px; }





::-webkit-scrollbar-track { background: var(--mg-surface-3); }





::-webkit-scrollbar-thumb { background: var(--mg-border-strong); border-radius: 3px; }





::-webkit-scrollbar-thumb:hover { background: var(--mg-text-muted); }











/* ── Page Fade ───────────────────────────────────────────────────────────────── */





.page-transition { animation: pageFadeIn 0.3s ease; }











@keyframes pageFadeIn {





  from { opacity: 0; transform: translateY(6px); }





  to   { opacity: 1; transform: translateY(0); }





}











/* ── Pill tabs ───────────────────────────────────────────────────────────────── */





.pill-tabs {





  display: flex;





  gap: 0.2rem;





  background: var(--mg-surface);





  border: 1px solid var(--mg-border);





  padding: 0.2rem;





  border-radius: 99px;





  flex-wrap: wrap;





  box-shadow: var(--mg-shadow-sm);





  width: fit-content;





  margin-bottom: 1rem;





}











.pill-tab {





  padding: 0.38rem 1rem;





  border-radius: 99px;





  font-size: 0.82rem;





  font-weight: 500;





  color: #2f2f2f;





  cursor: pointer;





  transition: var(--mg-transition);





  border: 1px solid transparent;





  text-decoration: none;





}











.pill-tab:hover { color: var(--mg-text-primary); background: var(--mg-surface-3); }





.pill-tab.active { background: var(--mg-accent); color: #ffffff; font-weight: 600; }











/* Public calendar pill tabs — white container, matches admin/calendar.php toggle */





.pub-pill-tabs {





  display: flex;





  gap: 0.2rem;





  background: #ffffff;





  border: 1px solid var(--mg-border);





  padding: 0.2rem;





  border-radius: 99px;





  box-shadow: 0 1px 4px rgba(0,0,0,.10);





  width: fit-content;





}





.pub-pill-tabs .pill-tab {





  color: var(--mg-text-muted);





  background: transparent;





}





.pub-pill-tabs .pill-tab:hover {





  background: var(--mg-surface-3);





  color: var(--mg-text-primary);





}





.pub-pill-tabs .pill-tab.active {





  background: var(--mg-accent);





  color: #ffffff;





  font-weight: 600;





}











/* ── Responsive ──────────────────────────────────────────────────────────────── */





@media (max-width: 1024px) {





  .grid-4 { grid-template-columns: repeat(2,1fr); }





}











@media (max-width: 768px) {





  :root { --mg-sidebar-width: 100%; }











  body { max-width: 100vw; overflow-x: clip; }











  .admin-wrap { width: 100%; max-width: 100vw; overflow-x: clip; }











  .sidebar {





    transform: translateX(-100%);





    width: 260px;





    height: calc(100vh - 60px);





    height: calc(100dvh - 60px);





    top: 60px !important;





    padding-top: env(safe-area-inset-top, 0px);





    padding-bottom: env(safe-area-inset-bottom, 0px);





    overflow-y: auto;





    -webkit-overflow-scrolling: touch;





    box-sizing: border-box;





  }











  .sidebar.open { transform: translateX(0); }





  .admin-main { margin-left: 0 !important; width: 100%; max-width: 100vw; overflow-x: clip; }





  .menu-toggle { display: flex; align-items: center; gap: 0.4rem; }











  .sidebar-backdrop {





    position: fixed;





    inset: 0;





    background: rgba(15,23,42,0.30);





    backdrop-filter: blur(2px);





    z-index: 99;





    display: none;





  }











  .sidebar-backdrop.active { display: block; }











  .admin-content { padding: 0.85rem !important; overflow-x: clip; width: 100% !important; max-width: 100% !important; margin: 0 !important; box-sizing: border-box !important; }
  /* Direct ingredient rows: 3-row layout on mobile */
  .direct-ing-row {
    display: grid !important;
    grid-template-columns: 65px 1fr 32px;
    grid-template-rows: auto auto auto;
    gap: .3rem !important;
    width: 100%; max-width: 100%; box-sizing: border-box;
    margin-bottom: .6rem;
  }
  /* Row 1: name + its wrapper div span all 3 columns */
  .direct-ing-row .direct-ing-name,
  .direct-ing-row input[name="direct_ingredient[]"],
  .direct-ing-row div:has(> .direct-ing-name) {
    grid-row: 1 !important; grid-column: 1 / 4 !important;
    width: 100% !important; flex: none !important;
  }
  /* Row 2: qty | unit | remove */
  .direct-ing-row input[name="direct_qty[]"]   { grid-row: 2 !important; grid-column: 1 !important; min-width: 0; width: auto !important; flex: none !important; }
  .direct-ing-row select[name="direct_unit[]"] { grid-row: 2 !important; grid-column: 2 !important; min-width: 0; width: 100% !important; flex: none !important; }
  .direct-ing-row .remove-direct-ing           { grid-row: 2 !important; grid-column: 3 !important; }
  /* Row 3: notes full width */
  .direct-ing-row input[name="direct_notes[]"] { grid-row: 3 !important; grid-column: 1 / 4 !important; min-width: 0; width: 100% !important; flex: none !important; }
  /* Profile: hide Last Login column on mobile */
  .hm-col-login { display: none; }
  /* Recipe list buttons: 2x2 grid on mobile */
  .recipe-list-btns {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: .3rem !important; white-space: normal !important;
    flex-direction: unset !important;
  }
  .recipe-list-btns form { display: contents; }
  .recipe-list-btns .btn,
  .recipe-list-btns a { justify-content: center; text-align: center; min-width: 0; }
  /* Recipe ingredient rows: name full-width top, then qty/unit/remove, then note */
  .ingredient-row {
    display: grid !important;
    grid-template-columns: 22px 1fr !important;
    grid-template-rows: auto auto auto !important;
    gap: .3rem !important;
    align-items: center; margin-bottom: .5rem;
    width: 100%; box-sizing: border-box;
  }
  /* Drag handle: row 1-3, col 1 */
  .ingredient-row .drag-handle { grid-row: 1 / 4; grid-column: 1; align-self: start; padding-top: .5rem; }
  /* Name wrapper: row 1, col 2 */
  .ingredient-row > div[style*="position:relative"] { grid-row: 1; grid-column: 2; width: 100% !important; flex: none !important; }
  /* Qty + unit + remove: row 2, col 2 - using a sub-flex */
  .ingredient-row input[name="ingredients[quantity][]"]  { grid-row: 2; grid-column: 2; width: 70px !important; max-width: 70px !important; justify-self: start; }
  .ingredient-row select[name="ingredients[unit][]"]     { grid-row: 2; grid-column: 2; margin-left: 78px; width: calc(100% - 110px) !important; max-width: none !important; }
  .ingredient-row button.remove-ing,
  .ingredient-row .remove-ing                            { grid-row: 2; grid-column: 2; justify-self: end; }
  /* Note: row 3, col 2 */
  .ingredient-row input[name="ingredients[notes][]"]     { grid-row: 3; grid-column: 2; width: 100% !important; max-width: none !important; }
  #mealListView .td-img { width: 56px; padding-right: 0; }
  #mealListView .td-img img,
  #mealListView .td-img .no-img { width: 52px; height: 52px; }
  /* Vertical center all cells */
  #mealListView td, #mealListView th { vertical-align: middle; }
  /* Hide description column on mobile - no room */
  #mealListView .meal-col-desc,
  #mealListView .meal-col-type { display: none; }
  #mealListView td[style*="white-space:nowrap"] { white-space: normal; }
  #mealListView td[style*="white-space"] > div {
    display: grid !important;
    grid-template-columns: 1fr 1fr;
    gap: .3rem;
  }
  #mealListView td[style*="white-space"] > div form { display: contents; }
  .top-fav-grid,
  .card:has(> div > h3):has(.card-img) > div:last-child {
    display: flex !important; overflow-x: auto; gap: .6rem;
    padding-bottom: .25rem; scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    grid-template-columns: none !important;
    scrollbar-width: none;
  }
  .top-fav-grid::-webkit-scrollbar,
  .card:has(> div > h3):has(.card-img) > div:last-child::-webkit-scrollbar { display: none; }
  .top-fav-grid > *,
  .card:has(> div > h3):has(.card-img) > div:last-child > * {
    flex: 0 0 100% !important; scroll-snap-align: start;
  }





  .grid-3 { grid-template-columns: repeat(2,1fr); }





  .grid-2 { grid-template-columns: 1fr; }





  .cal-day { height: 90px; overflow: hidden; }





  .cal-grid { grid-auto-rows: minmax(90px, 1fr); }





  .cal-weekday { font-size: 0.6rem; }





  .page-header { flex-direction: column; align-items: flex-start; }





  .modal { padding: 1.5rem; }
  /* iOS Safari: overlay scrolls, modal aligns top so it's never clipped */
  .modal-overlay {
    align-items: flex-start;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 1rem;
  }
  .modal {
    max-height: none;
    margin: auto;
    width: calc(100% - 2rem);
  }





  .login-card { padding: 1.75rem; }











  /* Reduce card padding on mobile */





  .card-header { padding: 0.75rem 1rem; }





  .card-body   { padding: 1rem; }





  .card-footer { padding: 0.75rem 1rem; }











  /* pill-tabs: horizontal scroll on mobile */
  .pill-tabs {
    display: flex !important;
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
    border-radius: 12px !important;
  }
  .pill-tabs::-webkit-scrollbar { display: none; }
  .pill-tab { white-space: nowrap !important; flex-shrink: 0 !important; }





  .pill-tab {





    text-align: center !important;





    border-radius: 8px !important;





    padding: 0.45rem 0.25rem !important;





    font-size: 0.75rem !important;





    white-space: nowrap;





  }











  /* Hide elements on mobile */





  .hide-mobile { display: none !important; }











  /* Prevent flex items in card-header overflowing */





  .card-header > * { min-width: 0; }





  .card-header h3  { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }











  /* Prevent overflow-y:auto containers from creating horizontal scroll */





  .card-body[style*="overflow-y"] { overflow-x: hidden !important; }











  /* Topbar — hide text labels, keep icons only */





  .topbar-btn span { display: none; }





  .topbar-logout-label { display: none; }





  .topbar-title { font-size: 0.95rem; }





  .admin-topbar { padding: 0.75rem 0.75rem; gap: 0.5rem; }





  .topbar-actions { gap: 0.25rem; }





}











@media (max-width: 480px) {





  .grid-3 { grid-template-columns: 1fr; }





  .grid-4 { grid-template-columns: repeat(2,1fr); }





  .cal-grid { grid-template-columns: repeat(7,1fr); }





  .cal-day { height: 72px; overflow: hidden; padding: 0.25rem; }





  .cal-grid { grid-auto-rows: minmax(72px, 1fr); }





  .cal-meal-chip { font-size: 0.62rem; padding: 0.15rem 0.3rem; }





  .chip-line2 { font-size: 0.6rem; }





  .stat-card { padding: 1rem; }





  .page-header-text h2 { font-size: 1.3rem; }





  .admin-content { padding: 0.85rem !important; margin: 0; width: 100%; box-sizing: border-box; }




}











/* ── Loader ──────────────────────────────────────────────────────────────────── */





.loader {





  display: inline-block;





  width: 20px;





  height: 20px;





  border: 2px solid var(--mg-border);





  border-top-color: var(--mg-accent);





  border-radius: 50%;





  animation: spin 0.7s linear infinite;





}











@keyframes spin { to { transform: rotate(360deg); } }











.page-loader {





  position: fixed;





  inset: 0;





  background: rgba(240,244,248,0.85);





  display: flex;





  align-items: center;





  justify-content: center;





  z-index: 9999;





  opacity: 0;





  pointer-events: none;





  transition: opacity 0.2s;





}





.page-loader.active { opacity: 1; pointer-events: all; }











/* ── Changelog / Version ─────────────────────────────────────────────────────── */





.changelog-entry {





  border-left: 3px solid var(--mg-accent);





  padding-left: 1.25rem;





  margin-bottom: 1.5rem;





  position: relative;





}











.changelog-entry::before {





  content: '';





  position: absolute;





  left: -5px;





  top: 7px;





  width: 8px;





  height: 8px;





  background: var(--mg-accent);





  border-radius: 50%;





}











.changelog-version { font-family: var(--mg-font-display); font-size: 1.1rem; font-weight: 700; color: var(--mg-accent); }





.changelog-date    { font-size: 0.78rem; color: var(--mg-text-muted); }











.code-block {





  background: var(--mg-surface-2);





  border: 1px solid var(--mg-border);





  border-radius: var(--mg-radius-md);





  padding: 1rem;





  font-family: 'Courier New', monospace;





  font-size: 0.8rem;





  color: var(--mg-accent);





  overflow-x: auto;





  line-height: 1.7;





}











/* Token field */





.token-field { position: relative; }











.token-field input {





  font-family: 'Courier New', monospace;





  font-size: 0.82rem;





  letter-spacing: 0.05em;





  padding-right: 3rem;





  color: var(--mg-accent);





}











.token-copy-btn {





  position: absolute;





  right: 0.5rem;





  top: 50%;





  transform: translateY(-50%);





  background: transparent;





  border: none;





  color: var(--mg-text-muted);





  cursor: pointer;





  font-size: 0.85rem;





  padding: 0.3rem;





  transition: color 0.2s;





}











.token-copy-btn:hover { color: var(--mg-accent); }











/* ── Print ───────────────────────────────────────────────────────────────────── */





@media print {





  body { background: #fff !important; color: #000 !important; }





  .sidebar, .admin-topbar, .btn, .admin-content > *:not(.print-area) { display: none !important; }





  .print-area { display: block !important; }





  .shopping-item { border-bottom: 1px solid #ddd; padding: 0.5rem; }





  .item-name { color: #000; }





}











/* ── Settings Page ───────────────────────────────────────────────────────────── */





.settings-grid {





  display: grid;





  grid-template-columns: 1fr 1fr;





  gap: 1.5rem;





  align-items: start;





}











@media (max-width: 900px) {





  .settings-grid { grid-template-columns: 1fr; }





}











.toggle-row {





  display: flex;





  align-items: center;





  justify-content: space-between;





  gap: 1rem;





  cursor: pointer;





  padding: 0.5rem 0;





  border-bottom: 1px solid var(--mg-border);





}





.toggle-row:last-child { border-bottom: none; }





.toggle-row p { margin-top: 0.2rem; }











input.toggle {





  appearance: none;





  -webkit-appearance: none;





  width: 44px;





  height: 24px;





  background: var(--mg-border);





  border-radius: 12px;





  position: relative;





  cursor: pointer;





  flex-shrink: 0;





  transition: background 0.2s;





  border: none;





}





input.toggle::after {





  content: '';





  position: absolute;





  width: 18px;





  height: 18px;





  background: #fff;





  border-radius: 50%;





  top: 3px;





  left: 3px;





  transition: transform 0.2s;





  box-shadow: 0 1px 3px rgba(0,0,0,.2);





}





input.toggle:checked { background: var(--mg-accent); }





input.toggle:checked::after { transform: translateX(20px); }











/* ── Tag Input (Settings: units & categories) ────────────────────────────────── */





.tag-input-wrap {





  display: flex;





  flex-wrap: wrap;





  gap: 0.375rem;





  align-items: center;





  min-height: 44px;





  padding: 0.4rem 0.6rem;





  border: 1px solid var(--mg-border);





  border-radius: 8px;





  background: var(--mg-surface);





  cursor: text;





  transition: border-color 0.15s, box-shadow 0.15s;





}





.tag-input-wrap:focus-within {





  border-color: var(--mg-accent);





  box-shadow: 0 0 0 3px color-mix(in srgb, var(--mg-accent) 12%, transparent);





}





.tag-chip {





  display: inline-flex;





  align-items: center;





  gap: 0.3rem;





  padding: 0.2rem 0.55rem;





  background: color-mix(in srgb, var(--mg-accent) 10%, transparent);





  color: var(--mg-accent);





  border: 1px solid color-mix(in srgb, var(--mg-accent) 25%, transparent);





  border-radius: 99px;





  font-size: 0.78rem;





  font-weight: 500;





  white-space: nowrap;





  user-select: none;





}





.tag-remove {





  background: none;





  border: none;





  color: var(--mg-accent);





  opacity: 0.6;





  cursor: pointer;





  padding: 0;





  font-size: 0.95rem;





  line-height: 1;





  transition: opacity 0.15s;





}





.tag-remove:hover { opacity: 1; }





.tag-input-field {





  border: none !important;





  outline: none !important;





  background: transparent !important;





  box-shadow: none !important;





  padding: 0.2rem 0.3rem !important;





  font-size: 0.875rem;





  min-width: 100px;





  flex: 1;





}











/* ═══════════════════════════════════════════════════════════════════════════════





   ANIMATIONS & EFFECTS (v1.4.8)





   ═══════════════════════════════════════════════════════════════════════════════ */











/* ── Page Transition Overlay ─────────────────────────────────────────────────── */





#mg-page-transition {





  position: fixed;





  inset: 0;





  z-index: 9999;





  pointer-events: none;





  background: linear-gradient(135deg, var(--mg-accent, #A1280B), var(--mg-teal, #3A8C4A));





  clip-path: circle(0% at 50% 50%);





  transition: clip-path 0.45s cubic-bezier(0.76, 0, 0.24, 1);





}





#mg-page-transition.active {





  clip-path: circle(150% at 50% 50%);





  pointer-events: all;





}





#mg-page-transition.exit {





  clip-path: circle(0% at 50% 50%);





}











/* ── Owl Chef Spinner ─────────────────────────────────────────────────────────── */





#mg-owl-spinner {





  position: fixed;





  inset: 0;





  z-index: 9998;





  background: rgba(15,23,42,0.55);





  backdrop-filter: blur(6px);





  display: flex;





  align-items: center;





  justify-content: center;





  flex-direction: column;





  gap: 1rem;





  opacity: 0;





  pointer-events: none;





  transition: opacity 0.3s;





}





#mg-owl-spinner.active {





  opacity: 1;





  pointer-events: all;





}





.mg-owl {





  position: relative;





  width: 80px;





  height: 80px;





}





.mg-owl-body {





  position: absolute;





  inset: 0;





  background: #1e293b;





  border-radius: 50% 50% 45% 45%;





  border: 3px solid var(--mg-accent, #A1280B);





  overflow: visible;





}





.mg-owl-eye {





  position: absolute;





  top: 22px;





  width: 18px;





  height: 18px;





  background: #fff;





  border-radius: 50%;





  border: 2px solid var(--mg-accent, #A1280B);





  display: flex;





  align-items: center;





  justify-content: center;





}





.mg-owl-eye::after {





  content: '';





  width: 8px;





  height: 8px;





  background: #1e293b;





  border-radius: 50%;





  animation: mg-owl-blink 2.5s ease-in-out infinite;





}





.mg-owl-eye.left  { left: 12px; }





.mg-owl-eye.right { right: 12px; }





.mg-owl-hat {





  position: absolute;





  top: -22px;





  left: 50%;





  transform: translateX(-50%);





  width: 38px;





  height: 30px;





  background: #fff;





  border-radius: 3px 3px 0 0;





  border: 2px solid var(--mg-accent, #A1280B);





}





.mg-owl-hat::before {





  content: '';





  position: absolute;





  bottom: -2px;





  left: -8px;





  right: -8px;





  height: 8px;





  background: #fff;





  border: 2px solid var(--mg-accent, #A1280B);





  border-radius: 2px;





}





.mg-owl-hat::after {





  content: '🍴';





  position: absolute;





  top: 3px;





  left: 50%;





  transform: translateX(-50%);





  font-size: 12px;





}





.mg-owl-wing {





  position: absolute;





  bottom: 10px;





  width: 20px;





  height: 28px;





  background: var(--mg-accent, #A1280B);





  border-radius: 50%;





  transform-origin: top center;





}





.mg-owl-wing.left  { left: -8px; animation: mg-owl-flap-l 0.5s ease-in-out infinite alternate; }





.mg-owl-wing.right { right: -8px; animation: mg-owl-flap-r 0.5s ease-in-out infinite alternate; }





.mg-owl-beak {





  position: absolute;





  top: 38px;





  left: 50%;





  transform: translateX(-50%);





  width: 0;





  height: 0;





  border-left: 6px solid transparent;





  border-right: 6px solid transparent;





  border-top: 8px solid #f59e0b;





}





.mg-owl-label {





  color: #fff;





  font-size: .875rem;





  font-weight: 600;





  letter-spacing: .04em;





  animation: mg-owl-pulse-text 1.2s ease-in-out infinite;





}











@keyframes mg-owl-blink {





  0%,90%,100% { transform: scaleY(1); }





  95%          { transform: scaleY(0.1); }





}





@keyframes mg-owl-flap-l {





  from { transform: rotate(-25deg); }





  to   { transform: rotate(10deg); }





}





@keyframes mg-owl-flap-r {





  from { transform: rotate(25deg); }





  to   { transform: rotate(-10deg); }





}





@keyframes mg-owl-pulse-text {





  0%,100% { opacity: .7; }





  50%     { opacity: 1; }





}











/* ── Typing Text Effect ───────────────────────────────────────────────────────── */





.mg-typing {





  display: inline-block;





  overflow: hidden;





  white-space: nowrap;





  border-right: 2px solid var(--mg-accent, #A1280B);





  animation: mg-typing-cursor 0.7s step-end infinite;





}





.mg-typing.done {





  border-right-color: transparent;





  animation: none;





}





@keyframes mg-typing-cursor {





  0%,100% { border-color: var(--mg-accent, #A1280B); }





  50%     { border-color: transparent; }





}











/* ── Background Image Layer (behind grid + gradient) ────────────────────────── */





#mg-bg-image {





  position: fixed;





  inset: 0;





  z-index: -2;





  background-size: cover;





  background-position: center;





  background-repeat: no-repeat;





  pointer-events: none;





}











/* ── Background Grid Effect ──────────────────────────────────────────────────── */





#mg-bg-grid {





  position: fixed;





  inset: 0;





  z-index: 0;





  pointer-events: none;





  overflow: hidden;





  opacity: 0;





  transition: opacity 1s;





}





#mg-bg-grid.active { opacity: 1; }





.mg-grid-cell {





  position: absolute;





  border: 1px solid rgba(var(--mg-accent-rgb, 13,148,136), 0.12);





  border-radius: 3px;





  opacity: 0;





  background: transparent;





  transition: opacity 1s ease, background 1s ease;





  pointer-events: none;





}





.mg-grid-cell.lit {





  opacity: calc(var(--cell-opacity, 0.7));





  background: rgba(var(--mg-accent-rgb, 13,148,136), calc(0.06 * var(--cell-opacity, 0.7)));





  border-color: rgba(var(--mg-accent-rgb, 13,148,136), calc(0.2 * var(--cell-opacity, 0.7)));





}











/* ── Fade-in Animation Utility ───────────────────────────────────────────────── */





.mg-fade-up {





  opacity: 0;





  transform: translateY(18px);





  transition: opacity 0.5s ease, transform 0.5s ease;





}





.mg-fade-up.visible {





  opacity: 1;





  transform: translateY(0);





}






/* Topbar Avatar Dropdown */
.topbar-avatar-wrap { position: relative; }

.topbar-avatar-drop {
  display: none;
  position: absolute;
  right: 0;
  top: calc(100% + 10px);
  background: var(--mg-surface);
  border: 1px solid var(--mg-border);
  border-radius: var(--mg-radius-md);
  box-shadow: var(--mg-shadow-md);
  min-width: 185px;
  z-index: 300;
  overflow: hidden;
  animation: dropFadeIn 0.15s ease;
}
.topbar-avatar-drop.open { display: block; }

@keyframes dropFadeIn {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}

.topbar-avatar-drop a {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.65rem 1rem;
  font-size: 0.875rem;
  color: var(--mg-text-secondary);
  text-decoration: none;
  transition: background 0.15s, color 0.15s;
  border-bottom: 1px solid var(--mg-border);
}
.topbar-avatar-drop a:last-child { border-bottom: none; }
.topbar-avatar-drop a:hover { background: var(--mg-surface-2); color: var(--mg-text-primary); }
.topbar-avatar-drop a i { width: 1rem; text-align: center; opacity: 0.7; }
.topbar-drop-logout       { color: var(--mg-danger) !important; }
.topbar-drop-logout:hover { background: rgba(220,38,38,0.06) !important; }

/* Page Action Bar */
.page-action-bar {
  margin: -1.5rem -1.5rem 1.5rem;
  padding: .6rem 1.5rem;
  background: transparent;
  border-bottom: none;
  box-shadow: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .75rem;
  flex-wrap: wrap;
  position: relative;
  z-index: 10;
}
.page-action-blurb {
  font-size: 0.82rem;
  color: var(--mg-text-muted);
  margin: 0;
  flex: 1;
  min-width: 180px;
}
.page-action-buttons {
  display: flex;
  align-items: center;
  gap: .45rem;
  flex-wrap: wrap;
}
.page-action-bar .help-toggle-btn {
  background: transparent;
  border: none;
  color: var(--mg-text-muted);
  font-size: 1.3rem;
  padding: .2rem .4rem;
}
.page-action-bar .help-toggle-btn:hover { color: var(--mg-accent); background: transparent; }
@media (max-width: 820px) {
  .page-action-bar { margin: -.75rem -.75rem 1rem; padding: .6rem .75rem; }
}

/* Grid Settings action bar button active state */
#gridSettingsToggleBar.active {
  background: color-mix(in srgb, var(--mg-accent) 10%, transparent);
  color: var(--mg-accent);
  border-color: var(--mg-accent);
}

/* Flash Toast Container - fixed bottom-right */
#flashContainer {
  position: fixed;
  bottom: 1.5rem;
  right: 1.5rem;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: .5rem;
  max-width: 360px;
  width: calc(100vw - 3rem);
  pointer-events: none;
}
#flashContainer .alert {
  pointer-events: all;
  margin-bottom: 0;
  box-shadow: 0 4px 20px rgba(0,0,0,.15);
  animation: toastSlideIn 0.3s cubic-bezier(0.4,0,0.2,1);
}
@keyframes toastSlideIn {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}
@media (max-width: 820px) {
  #flashContainer { bottom: 1rem; right: 1rem; left: 1rem; width: auto; max-width: none; }
}

/* Remove top padding gap when page starts with action bar */
.admin-content:has(> .page-action-bar:first-child) { padding-top: 0; }
.admin-content--wide .page-action-bar { margin-left: -1.5rem; margin-right: -1.5rem; }

/* ── Unified Action Bar Pill Buttons (v2) ─────────────────────────────────── */
.cal-action-bar {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: 0 0 1.5rem;
  flex-wrap: wrap;
}
.cal-action-bar-spacer { flex: 1; }
.cal-seg {
  display: flex;
  background: var(--mg-surface-2);
  border: 1px solid var(--mg-border);
  border-radius: 50px;
  padding: 3px;
  gap: 2px;
}
.cal-seg-btn {
  padding: .38rem .85rem;
  border-radius: 50px;
  border: none;
  background: transparent;
  font-size: .82rem;
  font-weight: 600;
  color: var(--mg-text-muted);
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: .4rem;
  transition: background .15s, color .15s;
  white-space: nowrap;
  text-decoration: none;
}
.cal-seg-btn.active { background: var(--mg-teal); color: var(--mg-teal-text, #fff); }
.cal-seg-btn:not(.active):hover { background: var(--mg-surface-3); color: var(--mg-text-primary); }
.cal-action-btn {
  padding: .38rem .85rem;
  border-radius: 50px;
  border: 1.5px solid var(--mg-border);
  background: var(--mg-surface);
  font-size: .82rem;
  font-weight: 600;
  line-height: 1.4;
  color: var(--mg-text-primary);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  transition: border-color .15s, background .15s, color .15s;
  white-space: nowrap;
  text-decoration: none;
  box-sizing: border-box;
}
.cal-action-btn:hover { border-color: var(--mg-accent); color: var(--mg-accent); background: var(--mg-surface); }
.cal-action-btn.danger:hover { border-color: var(--mg-danger); color: #fff; background: var(--mg-danger); }
/* Top 5 Favourites grid */
.top-fav-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: .75rem;
}
.fav-dots { display: none; }
@media (max-width: 768px) {
  .fav-dots {
    display: flex; justify-content: center; gap: .4rem;
    padding: .4rem 0; margin-top: -1.1rem;
    position: relative; z-index: 1;
  }
  .fav-dot {
    display: block; flex-shrink: 0;
    width: 7px; height: 7px; border-radius: 50%;
    background: var(--mg-border); transition: background .2s, transform .2s;
  }
  .fav-dot.active { background: var(--mg-accent); transform: scale(1.35); }
}
.range-short { display: none; }
.range-long { display: inline; }
.shop-period-row { display: none; }
.help-toggle-btn.cal-action-btn:hover { border-color: var(--mg-teal); color: var(--mg-teal); background: var(--mg-surface); }

/* ── Help Panel v2 ────────────────────────────────────────────────────────── */
.help-panel-v2 { border: 1px solid var(--mg-border); border-radius: var(--mg-radius); background: var(--mg-surface); overflow: hidden; margin-bottom: 1.25rem; }
.help-panel-v2-head { padding: .85rem 1.25rem; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--mg-border); background: var(--mg-surface-2); }
.help-panel-v2-intro { padding: .9rem 1.25rem; border-bottom: 1px solid var(--mg-border); font-size: .86rem; color: var(--mg-text-muted); line-height: 1.6; }
.help-panel-v2-grid { display: grid; grid-template-columns: repeat(3,1fr); }
.help-panel-v2-item { padding: .9rem 1.25rem; border-right: 1px solid var(--mg-border); border-bottom: 1px solid var(--mg-border); }
.help-panel-v2-item:nth-child(3n) { border-right: none; }
.help-panel-v2-item:nth-last-child(-n+3) { border-bottom: none; }
.help-panel-v2-item-title { font-size: .83rem; font-weight: 700; color: var(--mg-text-primary); display: flex; align-items: center; gap: .45rem; margin-bottom: .3rem; }
.help-panel-v2-item-body { font-size: .78rem; color: var(--mg-text-muted); line-height: 1.55; }
@media(max-width:720px) {
  .help-panel-v2-grid { grid-template-columns: 1fr 1fr; }
  .help-panel-v2-item:nth-child(3n) { border-right: 1px solid var(--mg-border); }
  .help-panel-v2-item:nth-child(2n) { border-right: none; }
}
@media(max-width:480px) {
  .help-panel-v2-grid { grid-template-columns: 1fr; }
  .help-panel-v2-item { border-right: none; }
  .cal-action-bar { gap: .35rem; flex-wrap: nowrap; }
  .cal-action-btn { font-size: .76rem; padding: .38rem .55rem; }
  .cal-seg-btn { font-size: .76rem; padding: .3rem .6rem; }
  /* Secondary action buttons: icon-only on small screens */
  .cal-action-btn .btn-label { display: none; }
  /* Calendar-specific (already wrapped) */
  #autoFillBtn .btn-label,
  #clearMonthBtn .btn-label,
  #gridSettingsToggleBar .btn-label { display: none; }
  /* Autofill-lists: hide Meals (col 2) and Days (col 3) on mobile */
  #aflListView .mg-table th:nth-child(2),
  #aflListView .mg-table td:nth-child(2),
  #aflListView .mg-table th:nth-child(3),
  #aflListView .mg-table td:nth-child(3) { display: none; }
  /* Shopping list: hide period row on mobile (it's in the second HTML row) */
  .shop-action-bar .cal-seg:first-child { display: none; }
  .shop-action-bar .cal-action-bar-spacer { display: none; }
  .shop-desktop-only { display: none !important; }
  /* Right-align the view/help row */
  .shop-action-bar { justify-content: flex-end; }
  /* Period row: centered, slightly bigger text */
  .shop-period-row { display: flex; justify-content: center; margin-top: .2rem; margin-bottom: 1.25rem; max-width: 100%; overflow: hidden; }
  .shop-period-row .cal-seg-btn { font-size: .9rem; }
  /* Prevent action bar overflow */
  .shop-action-bar { max-width: 100%; }
  /* Center the date label + month nav */
  .shop-period-header { text-align: center; max-width: 100%; overflow: hidden; }
  .shop-period-header > div { justify-content: center; max-width: 100%; }
  /* Allow long date labels to wrap on small screens */
  .shop-period-header span[style*="white-space:nowrap"],
  .shop-period-header span { white-space: normal !important; word-break: break-word; }
  /* Range label */
  .range-long { display: none; }
  .range-short { display: inline; }
}

/* ═══════════════════════════════════════════════════════════════════
   MG UTILITY CLASSES — extracted from inline styles v3.7.329
   These replace repeated style="" attributes across member + admin pages
═══════════════════════════════════════════════════════════════════ */

/* Flex */
.mg-flex-1 { flex: 1; }
.mg-flex-1-min0 { flex: 1; min-width: 0; }
.mg-col { display: flex; flex-direction: column; }
.mg-col-gap-1 { display: flex; flex-direction: column; gap: .1rem; }
.mg-col-gap-5 { display: flex; flex-direction: column; gap: .5rem; }
.mg-col-gap-75 { display: flex; flex-direction: column; gap: .75rem; }
.mg-col-gap-1r { display: flex; flex-direction: column; gap: 1rem; }
.mg-col-gap-125 { display: flex; flex-direction: column; gap: 1.25rem; }
.mg-row-gap-3 { display: flex; align-items: center; gap: .3rem; }
.mg-row-gap-4 { display: flex; align-items: center; gap: .4rem; }
.mg-row-gap-5 { display: flex; align-items: center; gap: .5rem; }
.mg-row-gap-75 { display: flex; align-items: center; gap: .75rem; }
.mg-row-wrap { display: flex; flex-wrap: wrap; }
.mg-row-wrap-3 { display: flex; flex-wrap: wrap; gap: .3rem; }
.mg-row-wrap-5 { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.mg-justify-end { justify-content: flex-end; }
.mg-justify-between { justify-content: space-between; }

/* Typography */
.mg-text-accent { color: var(--mg-accent); }
.mg-text-teal { color: var(--mg-teal); }
.mg-text-muted { color: var(--mg-text-muted); }
.mg-text-secondary { color: var(--mg-text-secondary); }
.mg-text-primary { color: var(--mg-text-primary); }
.mg-font-xs { font-size: .7rem; }
.mg-font-sm { font-size: .875rem; }
.mg-font-md { font-size: .95rem; }
.mg-fw-5 { font-weight: 500; }
.mg-fw-6 { font-weight: 600; }
.mg-fw-7 { font-weight: 700; }
.mg-eyebrow { text-transform: uppercase; letter-spacing: .06em; }

/* Spacing */
.mg-p-0 { padding: 0; }
.mg-p-85-1 { padding: .85rem 1rem; }
.mg-p-125 { padding: 1.25rem; }
.mg-mb-0 { margin-bottom: 0; }
.mg-mb-1 { margin-bottom: 1rem; }
.mg-mt-0 { margin-top: 0; }

/* Layout */
.mg-pos-rel { position: relative; }
.mg-p-0-oh { padding: 0; overflow: hidden; }
.mg-w-full { width: 100%; }
.mg-d-none { display: none; }
.mg-d-inline { display: inline; }

/* Images */
.mg-img-cover { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Admin UI */
.mg-icon-btn-muted {
  background: none; border: none; cursor: pointer;
  color: var(--mg-text-muted); font-size: .9rem;
  padding: .1rem .3rem; border-radius: 4px;
}
.mg-icon-btn-muted:hover { color: var(--mg-accent); background: var(--mg-surface-2); }

.mg-overlay-badge {
  background: rgba(0,0,0,.55); color: #fff;
  border-radius: 99px; padding: .15rem .45rem;
  font-size: .72rem; backdrop-filter: blur(4px);
}

.mg-surface-card {
  background: var(--mg-surface-2);
  border: 1px solid var(--mg-border);
  border-radius: var(--mg-radius-md);
  padding: 1rem;
}

.mg-check-accent {
  width: 16px; height: 16px;
  accent-color: var(--mg-accent);
}

.mg-mono { font-family: monospace; font-size: .85rem; }

/* Search icon positioning (used in multiple search inputs) */
.mg-search-icon {
  position: absolute; left: .65rem; top: 50%;
  transform: translateY(-50%);
  color: var(--mg-text-muted); font-size: .8rem;
  pointer-events: none;
}

/* Section header pattern */
.mg-section-hdr {
  font-size: .85rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .09em;
  display: flex; align-items: center; gap: .4rem;
}
