.app{background:var(--cream);flex-direction:column;max-width:640px;min-height:100vh;margin:0 auto;display:flex}.app-header{text-align:center;padding:30px 20px 18px;position:relative}.settings-btn{background:var(--white);border:1.5px solid var(--cream-deep);color:var(--crust-deep);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;transition:background .15s;display:flex;position:absolute;top:22px;right:16px}.settings-btn:active{background:var(--cream-deep)}.lockup-icon{filter:drop-shadow(0 2px 4px #3d20101f)}.app-header .sub{color:var(--ink-soft);letter-spacing:.5px;text-transform:uppercase;margin-top:10px;font-size:12.5px;font-weight:600}.app-header .sub:before,.app-header .sub:after{content:"";background:var(--wheat);vertical-align:middle;width:18px;height:1px;margin:0 8px;display:inline-block}nav.tabs{gap:6px;margin-bottom:8px;padding:0 16px;display:flex;overflow-x:auto}nav.tabs button{white-space:nowrap;font-family:var(--font-nunito), "Nunito", sans-serif;color:var(--ink-soft);cursor:pointer;background:0 0;border:none;border-bottom:3px solid #0000;flex:1;padding:10px 8px;font-size:13px;font-weight:600;transition:color .2s,border-color .2s}nav.tabs button.active{color:var(--crust-deep);border-bottom-color:var(--wheat)}main{flex:1;padding:8px 16px 140px}.view{animation:.25s fadeIn}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.tide-card{padding-bottom:14px}.tide-head{justify-content:space-between;align-items:baseline;margin-bottom:6px;display:flex}.tide-time{font-family:var(--font-nunito), "Nunito", sans-serif;color:var(--wheat);letter-spacing:.3px;font-size:12px;font-weight:700}#tide-svg{margin:4px 0 2px;display:block;overflow:visible}.tide-labels{letter-spacing:.5px;color:var(--ink-soft);text-transform:uppercase;justify-content:space-between;padding:0 2px;font-size:10px;font-weight:700;display:flex}.tide-caption{text-align:center;color:var(--crust-deep);margin-top:8px;font-size:12.5px;font-weight:600}.card{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);border:1px solid #5b3a220f;margin-bottom:14px;padding:18px}.card h3{margin-bottom:10px;font-size:15px}.stat-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.stat{background:var(--cream-deep);border-radius:var(--radius-sm);text-align:center;padding:14px 12px}.stat .num{font-family:var(--font-playfair), "Playfair Display", serif;color:var(--crust-deep);font-size:26px;font-weight:700;line-height:1.1}.stat .label{color:var(--ink-soft);letter-spacing:.3px;margin-top:4px;font-size:11px}.status-line{align-items:center;gap:10px;padding:4px 0;display:flex}.status-dot{background:var(--sage);border-radius:50%;flex-shrink:0;width:10px;height:10px}.status-dot.warn{background:var(--wheat)}.status-dot.overdue{background:var(--danger)}.status-text .headline{color:var(--crust-deep);font-size:15px;font-weight:700}.status-text .detail{color:var(--ink-soft);font-size:12.5px}.btn{background:var(--crust-deep);color:var(--white);border-radius:var(--radius-sm);font-family:var(--font-nunito), "Nunito", sans-serif;cursor:pointer;border:none;justify-content:center;align-items:center;gap:6px;padding:12px 18px;font-size:14px;font-weight:700;transition:transform .15s,box-shadow .15s;display:inline-flex}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.6;cursor:default}.btn.block{width:100%}.btn.secondary{background:var(--cream-deep);color:var(--crust-deep)}.btn.wheat{background:var(--wheat);color:var(--crust-deep)}.btn.small{padding:7px 12px;font-size:12.5px}.fab{z-index:20;width:calc(100% - 32px);max-width:608px;position:fixed;bottom:22px;left:50%;transform:translate(-50%)}.entry{border-bottom:1px solid var(--cream-deep);padding:12px 0}.entry:last-child{border-bottom:none}.entry-top{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.entry-title{color:var(--crust-deep);font-size:14px;font-weight:700}.entry-date{color:var(--ink-soft);flex-shrink:0;font-size:11.5px}.entry-meta{color:var(--ink-soft);margin-top:3px;font-size:12.5px}.entry-notes{color:var(--ink);margin-top:5px;font-size:12.5px;font-style:italic}.pill{background:var(--cream-deep);color:var(--crust-deep);letter-spacing:.4px;text-transform:uppercase;border-radius:6px;margin-top:4px;margin-right:5px;padding:3px 9px;font-size:10px;font-weight:700;display:inline-block}.pill.ready{background:var(--sage);color:var(--white)}.pill.use-soon{background:var(--wheat);color:var(--crust-deep)}.pill.stale{background:var(--danger);color:var(--white)}.empty{text-align:center;color:var(--ink-soft);padding:30px 10px}.empty p{margin:4px 0 0;font-size:13.5px}.modal-backdrop{z-index:50;background:#3a2a1e73;justify-content:center;align-items:flex-end;display:none;position:fixed;inset:0}.modal-backdrop.open{display:flex}.modal{background:var(--cream);border-radius:20px 20px 0 0;width:100%;max-width:640px;max-height:88vh;padding:20px 20px 28px;animation:.25s slideUp;overflow-y:auto}@keyframes slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.modal-head{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.modal-head h2{font-size:19px}.modal-close{color:var(--ink-soft);cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:20px}.field{margin-bottom:14px}.field label{color:var(--crust-deep);margin-bottom:5px;font-size:12.5px;font-weight:700;display:block}.field .hint{color:var(--ink-soft);margin-left:4px;font-size:11px;font-weight:400}.field input,.field select,.field textarea{border-radius:var(--radius-sm);border:1.5px solid var(--cream-deep);background:var(--white);width:100%;font-family:var(--font-nunito), "Nunito", sans-serif;color:var(--ink);padding:11px 12px;font-size:14px}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--wheat);outline:none}.field textarea{resize:vertical;min-height:70px}.row2{grid-template-columns:1fr 1fr;gap:10px;display:grid}.row3{grid-template-columns:1fr 1fr 1fr;gap:10px;display:grid}.checkbox-field{align-items:center;gap:8px;display:flex}.checkbox-field input{width:auto}.checkbox-field label{margin:0}.ingredient-row{grid-template-columns:2fr 1fr 1fr auto;align-items:center;gap:8px;margin-bottom:8px;display:grid}.ingredient-row input,.ingredient-row select{border-radius:var(--radius-sm);border:1.5px solid var(--cream-deep);background:var(--white);width:100%;font-family:var(--font-nunito), "Nunito", sans-serif;color:var(--ink);padding:9px 10px;font-size:13px}.ingredient-row input:focus,.ingredient-row select:focus{border-color:var(--wheat);outline:none}.ingredient-remove-btn{color:var(--danger);cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:18px;line-height:1}.chip-row{flex-wrap:wrap;gap:6px;display:flex}.chip{background:var(--white);border:1.5px solid var(--cream-deep);color:var(--ink);font-family:var(--font-nunito), "Nunito", sans-serif;cursor:pointer;border-radius:20px;padding:7px 13px;font-size:12.5px;font-weight:600;transition:background .15s,border-color .15s,color .15s}.chip.selected{background:var(--wheat);border-color:var(--wheat);color:var(--crust-deep)}.peak-checks{background:var(--white);border-radius:var(--radius-sm);border:1.5px solid var(--cream-deep);flex-direction:column;gap:8px;padding:12px;display:flex}.peak-checks .checkbox-field{color:var(--ink);font-size:12.5px}.section-label{letter-spacing:1px;text-transform:uppercase;color:var(--sage);margin:18px 0 8px;font-size:11px;font-weight:700}.recipe-card{background:var(--white);border-radius:var(--radius-sm);cursor:pointer;color:inherit;border:1px solid #5b3a220f;margin-bottom:10px;padding:14px;text-decoration:none;display:block}.recipe-card h4{font-family:var(--font-playfair), "Playfair Display", serif;color:var(--crust-deep);margin:0 0 4px;font-size:16px}.recipe-card .rmeta{color:var(--ink-soft);font-size:12px}.toast{background:var(--crust-deep);color:var(--white);z-index:60;opacity:0;pointer-events:none;border-radius:30px;padding:10px 18px;font-size:13px;font-weight:600;transition:opacity .25s,transform .25s;position:fixed;bottom:90px;left:50%;transform:translate(-50%)}.toast.show{opacity:1;transform:translate(-50%)translateY(-6px)}
