:root{--paper: #faf7f0;--paper-raised: #ffffff;--ink: #23241f;--ink-soft: #6b6b60;--line: #dad4c4;--green: #33513b;--green-soft: #e3ebe1;--brick: #9c3b2e;--brick-soft: #f3e3df;--shadow: rgba(35, 36, 31, .1);--radius: 6px}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--paper);color:var(--ink);font-family:Inter,system-ui,sans-serif;-webkit-font-smoothing:antialiased}#root{min-height:100vh;display:flex;flex-direction:column}h1,h2,h3{font-family:Fraunces,Georgia,serif;font-weight:600;margin:0;letter-spacing:-.01em}button{font-family:inherit}.app-shell{max-width:780px;width:100%;margin:0 auto;padding:max(32px,env(safe-area-inset-top)) 20px max(80px,calc(env(safe-area-inset-bottom) + 48px));flex:1}.app-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:28px;padding-bottom:18px;border-bottom:2px solid var(--ink)}.app-header h1{font-size:28px}.app-header .subtitle{font-size:13px;color:var(--ink-soft);font-family:IBM Plex Mono,monospace}.tabs{display:flex;gap:4px;position:sticky;top:0;z-index:20;background:var(--paper);padding:10px 0;margin:0 0 14px}.tab-button{flex:1;background:transparent;border:1.5px solid var(--line);border-radius:var(--radius);padding:10px 6px;min-width:0;font-size:14px;font-weight:500;color:var(--ink-soft);cursor:pointer;transition:all .15s ease}.tab-button:hover{border-color:var(--ink-soft);color:var(--ink)}.tab-button.active{background:var(--ink);border-color:var(--ink);color:var(--paper)}.tab-button:focus-visible,button:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--green);outline-offset:2px}.card{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);padding:20px;margin-bottom:16px;box-shadow:0 1px 2px var(--shadow)}.card h2{font-size:18px;margin-bottom:14px}.empty-state{color:var(--ink-soft);font-size:14px;padding:24px 4px;text-align:center;border:1.5px dashed var(--line);border-radius:var(--radius)}label{display:block;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);margin-bottom:4px}input[type=text],input[type=number],select{width:100%;padding:9px 10px;border:1.5px solid var(--line);border-radius:var(--radius);background:var(--paper);font-size:14px;color:var(--ink);font-family:inherit}input[type=text]:focus,input[type=number]:focus,select:focus{border-color:var(--green)}.field{margin-bottom:12px}.ingredient-row{display:grid;grid-template-columns:1.6fr .7fr .9fr 1.2fr auto;gap:8px;align-items:end;margin-bottom:10px}@media (max-width: 560px){.ingredient-row{grid-template-columns:1fr 1fr}}.btn{border-radius:var(--radius);border:1.5px solid var(--ink);background:var(--ink);color:var(--paper);padding:10px 16px;font-size:14px;font-weight:600;cursor:pointer;transition:opacity .15s ease}.btn:hover{opacity:.85}.btn-secondary{background:transparent;color:var(--ink)}.btn-danger{background:transparent;border-color:var(--brick);color:var(--brick)}.btn-danger:hover{background:var(--brick-soft)}.btn-small{padding:6px 10px;font-size:13px}.btn-row{display:flex;gap:8px;margin-top:6px}.recipe-item{border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;margin-bottom:10px}.recipe-item-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.recipe-item-head h3{font-size:16px}.ingredient-tag-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.ingredient-tag{font-family:IBM Plex Mono,monospace;font-size:12px;background:var(--green-soft);color:var(--green);padding:3px 8px;border-radius:4px}.day-row{display:grid;grid-template-columns:110px 1fr;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line)}.day-row:last-child{border-bottom:none}.day-label{font-family:Fraunces,serif;font-weight:600;font-size:15px}.receipt{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);padding:0;overflow:hidden;box-shadow:0 2px 6px var(--shadow)}.receipt-tear{height:14px;background-image:radial-gradient(circle at 8px 0,transparent 7px,var(--paper-raised) 7.5px);background-size:16px 14px;background-repeat:repeat-x}.receipt-body{padding:22px 24px 26px}.receipt-header{text-align:center;margin-bottom:18px;padding-bottom:14px;border-bottom:1.5px dashed var(--line)}.receipt-header h2{font-size:20px}.receipt-header .receipt-date{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--ink-soft);margin-top:4px}.receipt-category{margin-bottom:18px}.receipt-category-title{font-family:IBM Plex Mono,monospace;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--green);margin-bottom:8px}.receipt-line{display:flex;justify-content:space-between;gap:12px;font-size:14px;padding:4px 0;border-bottom:1px dotted var(--line)}.receipt-line:last-child{border-bottom:none}.receipt-line .amount{font-family:IBM Plex Mono,monospace;color:var(--ink-soft);white-space:nowrap}.receipt-line .source{font-size:11px;color:var(--ink-soft);display:block}.receipt-line.klaar .lijst-vink>span{text-decoration:line-through;color:var(--ink-soft)}.receipt-footer{margin-top:18px;padding-top:14px;border-top:1.5px dashed var(--line);text-align:center;font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--ink-soft)}@media print{.icoon-knop,.tabs,.app-header .subtitle,.no-print{display:none!important}body{background:#fff}}.visueel-verborgen{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.tab-aantal{display:inline-block;min-width:18px;margin-left:6px;padding:0 5px;border-radius:999px;background:var(--brick);color:#fff;font:600 11px/18px IBM Plex Mono,monospace}.segmenten{display:flex;gap:3px;padding:3px;margin-bottom:14px;border:1.5px solid var(--line);border-radius:999px}.segment{flex:1;border:none;background:transparent;border-radius:999px;padding:8px 10px;font-size:13px;font-weight:600;color:var(--ink-soft);cursor:pointer}.segment.actief{background:var(--ink);color:var(--paper)}.bonus-kop-rij{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.bonus-kop h2{margin:0}.bonus-sub{margin:4px 0 0;font:400 12px IBM Plex Mono,monospace;color:var(--ink-soft)}.melding{margin:12px 0 0;padding:8px 10px;border-radius:var(--radius);background:var(--green-soft);color:var(--green);font-size:13px}.melding-fout{background:var(--brick-soft);color:var(--brick)}.zoekveld{display:block;width:100%;margin-top:14px;padding:10px 12px;border:1.5px solid var(--line);border-radius:var(--radius);background:var(--paper);color:var(--ink);font:inherit;font-size:16px}.zoekveld:focus{border-color:var(--green)}.chips{display:flex;gap:6px;overflow-x:auto;padding:12px 0 4px;scrollbar-width:none;-webkit-overflow-scrolling:touch}.chips::-webkit-scrollbar{display:none}.chip{flex:0 0 auto;border:1.5px solid var(--line);background:transparent;border-radius:999px;padding:6px 12px;font-size:13px;color:var(--ink-soft);cursor:pointer;white-space:nowrap}.chip.actief{background:var(--green);border-color:var(--green);color:#fff}.chip-aantal{margin-left:4px;font:400 11px IBM Plex Mono,monospace;opacity:.75}.filterrij{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:10px}.inline-veld,.vink{display:flex;align-items:center;gap:8px;margin:0;text-transform:none;letter-spacing:0;font-size:13px;font-weight:500;color:var(--ink-soft)}.vink{cursor:pointer}.vink input,.lijst-vink input{accent-color:var(--green)}.inline-veld select{width:auto;padding:6px 8px}.bonus-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.bonus-kaart{display:flex;flex-direction:column;gap:4px;padding:10px;background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 1px 2px var(--shadow)}.bonus-kaart.op-lijst{border-color:var(--green);box-shadow:0 0 0 1.5px var(--green)}.bonus-foto{position:relative;aspect-ratio:1;display:flex;align-items:center;justify-content:center;margin-bottom:6px;border-radius:4px;background:var(--paper);overflow:hidden}.bonus-foto img{max-width:100%;max-height:100%;object-fit:contain;mix-blend-mode:multiply}.stempel{position:absolute;top:6px;left:6px;max-width:calc(100% - 12px);padding:2px 6px;border:1.5px solid var(--brick);border-radius:3px;background:var(--paper-raised);color:var(--brick);font:600 10.5px/1.2 IBM Plex Mono,monospace;letter-spacing:.04em;text-transform:uppercase;transform:rotate(-2deg)}.stempel-klein{position:static;display:inline-block;max-width:none;margin-right:4px;font-size:10px;vertical-align:middle;transform:none}.korting-pil{position:absolute;top:6px;right:6px;padding:2px 6px;border-radius:999px;background:var(--brick);color:#fff;font:600 11px IBM Plex Mono,monospace}.bonus-naam{margin:0;min-height:2.6em;font:600 13.5px/1.3 Inter,system-ui,sans-serif;letter-spacing:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.bonus-gewicht{font:400 11.5px IBM Plex Mono,monospace;color:var(--ink-soft)}.bonus-prijs{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin-top:4px}.prijs-hoofd{font:600 20px Fraunces,Georgia,serif}.prijs-was{font:400 12px IBM Plex Mono,monospace;color:var(--ink-soft)}.prijs-sub{font-size:11.5px;color:var(--ink-soft)}.bonus-acties{display:flex;align-items:center;gap:8px;margin-top:auto;padding-top:8px}.bonus-acties .btn{flex:1}.bonus-link{font-size:12px;color:var(--green)}.kandidaat{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px dotted var(--line)}.kandidaat-tekst{display:flex;flex:1;min-width:0;flex-direction:column;gap:2px;font-size:13.5px}.kandidaat-naam a{color:inherit}.kandidaat-gewicht{font:400 12px IBM Plex Mono,monospace;color:var(--ink-soft)}.kandidaat-prijs{font:400 12.5px IBM Plex Mono,monospace}.kandidaat-meer{margin:6px 0 0;font-size:12px;color:var(--ink-soft)}.receipt-sectie{margin-bottom:22px}.receipt-sectietitel{margin-bottom:12px;padding-bottom:4px;border-bottom:2px solid var(--ink);font:600 15px Fraunces,Georgia,serif}.lijst-vink{display:flex;flex:1;min-width:0;align-items:flex-start;gap:10px;margin:0;text-transform:none;letter-spacing:0;font-size:14px;font-weight:400;color:var(--ink);cursor:pointer}.lijst-vink input{flex:none;width:18px;height:18px;margin:2px 0 0}.lijst-prijs{display:flex;align-items:center;gap:2px;white-space:nowrap}.icoon-knop{min-height:32px;padding:4px 8px;border:none;background:none;color:var(--ink-soft);font-size:20px;line-height:1;cursor:pointer}.icoon-knop:hover{color:var(--brick)}@media (min-width: 640px){.bonus-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}}
