:root { --ink: #111312; --muted: #69716d; --paper: #f7f3ea; --panel: #fffdf7; --line: #ded8cd; --line-strong: #c5bdae; --mint: #7dcfb6; --mint-dark: #27735f; --coral: #f05d4e; --coral-dark: #b63429; --gold: #d49a3a; --blue: #4c78a8; --shadow: 0 14px 40px rgba(30, 28, 24, 0.09); } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; color: var(--ink); background: linear-gradient(90deg, rgba(17, 19, 18, 0.035) 1px, transparent 1px), linear-gradient(180deg, rgba(17, 19, 18, 0.035) 1px, transparent 1px), var(--paper); background-size: 52px 52px; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } button, input, select, textarea { font: inherit; } button { border: 0; cursor: pointer; } button:disabled { cursor: wait; opacity: 0.62; } .app-shell { width: min(1480px, 100%); margin: 0 auto; padding: 22px; } .app-header, .section-heading, .panel-heading, .panel-actions, .header-actions, .week-controls, .sync-row { display: flex; align-items: center; gap: 10px; } .app-header { justify-content: space-between; padding: 8px 0 18px; } .eyebrow { margin: 0 0 5px; color: var(--muted); font-size: 0.76rem; font-weight: 750; letter-spacing: 0; text-transform: uppercase; } h1, h2, h3, p { margin: 0; } h1 { font-size: clamp(2.1rem, 5vw, 4.7rem); line-height: 0.95; letter-spacing: 0; } h2 { font-size: 1rem; letter-spacing: 0; } .status-pill, .mini-status { display: inline-flex; align-items: center; justify-content: center; min-height: 34px; border: 1px solid var(--line); border-radius: 999px; padding: 7px 11px; color: var(--muted); background: rgba(255, 253, 247, 0.78); font-size: 0.84rem; white-space: nowrap; } .mini-status { min-height: 28px; font-size: 0.76rem; } .metric-strip { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; margin-bottom: 14px; } .metric-strip article, .panel, .week-section { border: 1px solid var(--line); border-radius: 8px; background: rgba(255, 253, 247, 0.94); box-shadow: var(--shadow); } .metric-strip article { min-height: 92px; padding: 15px; } .metric-strip span { display: block; color: var(--muted); font-size: 0.78rem; font-weight: 750; text-transform: uppercase; } .metric-strip strong { display: block; margin-top: 9px; font-size: clamp(1.26rem, 2.8vw, 2.15rem); line-height: 1; } .layout-grid { display: grid; grid-template-columns: minmax(350px, 0.95fr) minmax(350px, 1.05fr) minmax(320px, 0.85fr); gap: 14px; align-items: start; } .setup-panel { grid-row: span 2; } .panel, .week-section { padding: 16px; } .panel-heading, .section-heading { justify-content: space-between; margin-bottom: 14px; } .section-heading { margin-bottom: 16px; } .form-grid, .quick-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 11px; } .quick-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } label span { display: block; margin-bottom: 6px; color: var(--muted); font-size: 0.78rem; font-weight: 700; } input, select, textarea { width: 100%; border: 1px solid var(--line); border-radius: 7px; padding: 10px 11px; color: var(--ink); background: #ffffff; outline: none; } input:focus, select:focus, textarea:focus { border-color: var(--mint-dark); box-shadow: 0 0 0 3px rgba(125, 207, 182, 0.22); } textarea { display: block; min-height: 72px; resize: vertical; line-height: 1.45; } .wide-field { display: block; margin-top: 12px; } .date-chip { width: 158px; min-height: 38px; } .primary-button, .ghost-button, .danger-button { display: inline-flex; align-items: center; justify-content: center; min-height: 38px; border-radius: 7px; padding: 9px 13px; font-weight: 800; white-space: nowrap; } .primary-button { color: #ffffff; background: var(--ink); } .ghost-button { border: 1px solid var(--line); color: var(--ink); background: #ffffff; } .danger-button { color: #ffffff; background: var(--coral-dark); } .plan-note { margin-top: 14px; border-left: 4px solid var(--gold); padding: 11px 12px; color: #59462a; background: #fff6df; border-radius: 6px; line-height: 1.45; } .panel-actions { justify-content: flex-end; margin-top: 13px; flex-wrap: wrap; } .file-drop { display: grid; place-items: center; min-height: 124px; border: 1px dashed var(--line-strong); border-radius: 8px; background: linear-gradient(135deg, rgba(125, 207, 182, 0.18), rgba(240, 93, 78, 0.11)), #ffffff; color: var(--muted); font-weight: 850; text-align: center; } .file-drop input { position: absolute; inline-size: 1px; block-size: 1px; opacity: 0; } .food-result { margin-top: 13px; } .food-estimate { border: 1px solid var(--line); border-radius: 8px; padding: 12px; background: #ffffff; } .food-estimate h3 { font-size: 1rem; margin-bottom: 8px; } .macro-row, .food-item, .day-total-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; } .macro-row span, .food-item span, .day-total-row span { border-radius: 7px; padding: 8px; background: #f5f1e8; color: var(--muted); font-size: 0.82rem; } .macro-row strong, .food-item strong, .day-total-row strong { display: block; color: var(--ink); font-size: 1rem; } .food-list { display: grid; gap: 8px; margin: 10px 0; } .food-item { grid-template-columns: 1.5fr 0.8fr 0.8fr 0.8fr; align-items: stretch; } .assumption-list { margin: 10px 0 0; padding-left: 18px; color: var(--muted); line-height: 1.45; } .manual-food-form { display: grid; grid-template-columns: 1.6fr 0.9fr 0.9fr auto; gap: 8px; align-items: end; border: 1px solid var(--line); border-radius: 8px; padding: 10px; background: #ffffff; } .apple-panel textarea, .export-panel textarea { min-height: 158px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.85rem; } .sync-row { margin-top: 11px; align-items: end; } .sync-row label { flex: 1; } .week-section { margin-top: 14px; } .week-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 10px; } .day-card { min-height: 190px; border: 1px solid var(--line); border-radius: 8px; padding: 11px; background: #ffffff; } .day-card.today { border-color: var(--mint-dark); box-shadow: inset 0 0 0 2px rgba(125, 207, 182, 0.23); } .day-card header { display: flex; justify-content: space-between; gap: 8px; margin-bottom: 10px; } .day-card h3 { font-size: 0.95rem; } .day-card time { color: var(--muted); font-size: 0.78rem; } .day-stat { display: flex; justify-content: space-between; gap: 8px; border-top: 1px solid var(--line); padding: 7px 0; font-size: 0.86rem; } .day-stat span { color: var(--muted); } .progress-track { overflow: hidden; height: 8px; border-radius: 999px; background: #e9e2d6; } .progress-fill { height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, var(--mint), var(--blue)); } .bottom-grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(330px, 0.65fr); gap: 14px; margin-top: 14px; } .chart-panel canvas { display: block; width: 100%; min-height: 260px; border: 1px solid var(--line); border-radius: 8px; background: #ffffff; } .empty-state, .error-state, .success-state { border-radius: 8px; padding: 12px; line-height: 1.45; } .empty-state { color: var(--muted); background: #f5f1e8; } .error-state { color: #7f2119; background: #ffe5e1; } .success-state { color: #155b4a; background: #e3f7ee; } @media (max-width: 1180px) { .metric-strip { grid-template-columns: repeat(3, minmax(0, 1fr)); } .layout-grid, .bottom-grid { grid-template-columns: 1fr; } .setup-panel { grid-row: auto; } .week-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 720px) { .app-shell { padding: 14px; } .app-header, .section-heading, .panel-heading { align-items: flex-start; flex-direction: column; } .header-actions, .week-controls { width: 100%; flex-wrap: wrap; } .metric-strip, .form-grid, .quick-grid, .week-grid, .manual-food-form, .macro-row, .food-item, .day-total-row { grid-template-columns: 1fr; } .date-chip { width: 100%; } .sync-row { display: grid; grid-template-columns: 1fr; } }