*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}button,label,input,a{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}button:focus,input:focus{outline:none}::selection{background:var(--accent-light);color:var(--text)}:root{--mint: #B0EEBB;--cream: #F5EDBA;--blush: #FFB5D0;--lavender: #DDD5F0;--powder: #B0D4F5;--peach: #FFCDA0;--bg: #E4F2E4;--bg-secondary: #D2E6D2;--text: #1A2E1A;--text-light: #5F7060;--accent: #3DAA6A;--accent-hover: #319558;--accent-light: #E2F7EA;--white: #FFFFFF;--border: rgba(0, 0, 0, .06);--shadow: 0 2px 12px rgba(0, 0, 0, .06), 0 0 0 1px rgba(0, 0, 0, .03);--shadow-hover: 0 8px 30px rgba(0, 0, 0, .1), 0 0 0 1px rgba(0, 0, 0, .04);--shadow-elevated: 0 12px 40px rgba(0, 0, 0, .12);--radius: 20px;--radius-sm: 12px;--radius-xs: 8px;--font: "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif}html{font-size:16px}body{font-family:var(--font);background:var(--bg);color:var(--text);min-height:100vh;-webkit-font-smoothing:antialiased}.app{max-width:900px;margin:0 auto;padding:0 16px 100px;position:relative}.app-header{text-align:center;padding:48px 0 8px}.app-title{font-size:2.2rem;font-weight:800;color:var(--text);letter-spacing:-1px;display:flex;align-items:center;justify-content:center;gap:10px}.app-title-icon{width:36px;height:36px;color:var(--accent)}.app-subtitle{font-size:.95rem;color:var(--text-light);margin-top:6px;font-weight:400}.view-toggle{display:flex;justify-content:center;gap:4px;margin:28px auto 32px;background:var(--white);border-radius:50px;padding:4px;max-width:300px;box-shadow:var(--shadow)}.toggle-btn{flex:1;padding:10px 20px;border:none;border-radius:50px;font-family:var(--font);font-size:.85rem;font-weight:600;cursor:pointer;transition:all .25s ease;background:transparent;color:var(--text-light)}.toggle-btn.active{background:var(--accent);color:#fff;box-shadow:0 2px 10px #3daa6a59}.fab{position:fixed;bottom:32px;right:28px;width:60px;height:60px;border-radius:50%;border:none;background:linear-gradient(135deg,#6dd498,#3daa6a);color:#fff;cursor:pointer;box-shadow:0 4px 20px #3daa6a66;transition:all .25s ease;display:flex;align-items:center;justify-content:center;z-index:50;padding:0;outline:none;line-height:1}.fab:hover{transform:scale(1.08);box-shadow:0 6px 28px #3daa6a80}.fab:active{transform:scale(.95)}.fab-icon{width:28px;height:28px;stroke-width:2.5}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes popIn{0%{transform:scale(0)}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes slideUp{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}*{scrollbar-width:thin;scrollbar-color:transparent transparent}*:hover{scrollbar-color:#C4C4D0 transparent}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:transparent;border-radius:3px;transition:background .3s}*:hover::-webkit-scrollbar-thumb{background:#c4c4d0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);display:flex;align-items:flex-end;justify-content:center;z-index:100;animation:fadeIn .2s ease}@media(min-width:540px){.modal-overlay{align-items:center}}.modal{background:var(--white);border-radius:var(--radius) var(--radius) 0 0;padding:28px 24px 36px;width:100%;max-width:440px;max-height:90vh;overflow-y:auto;overscroll-behavior:contain;animation:slideUp .3s ease;box-shadow:var(--shadow-elevated)}@media(min-width:540px){.modal{border-radius:var(--radius);animation:scaleIn .25s ease}}.modal-title{font-size:1.3rem;font-weight:700;margin-bottom:24px;color:var(--text);text-align:center}.form-group{margin-bottom:20px}.form-label{display:block;font-size:.8rem;font-weight:600;color:var(--text-light);margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px}.form-input{width:100%;padding:12px 16px;border:2px solid var(--bg-secondary);border-radius:var(--radius-sm);font-family:var(--font);font-size:1rem;color:var(--text);transition:border-color .2s,box-shadow .2s;background:var(--bg)}.form-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #3daa6a1f}.form-input::placeholder{color:#a0a0b0}.number-input{width:100px;text-align:center;font-size:1.2rem;font-weight:600}.emoji-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(44px,1fr));gap:6px}.emoji-option{width:44px;height:44px;border-radius:var(--radius-sm);border:2px solid transparent;background:var(--bg);display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:1.3rem;transition:all .2s}.emoji-option:hover{background:var(--bg-secondary);transform:scale(1.1)}.emoji-option.selected{border-color:var(--accent);background:var(--accent-light);box-shadow:0 2px 8px #3daa6a33;transform:scale(1.1)}.color-grid{display:flex;gap:10px;flex-wrap:wrap}.color-swatch{width:42px;height:42px;border-radius:50%;border:3px solid transparent;cursor:pointer;transition:all .2s;position:relative}.color-swatch:hover{transform:scale(1.15)}.color-swatch.selected{border-color:var(--text);box-shadow:0 2px 10px #00000026;transform:scale(1.15)}.color-swatch.selected:after{content:"✓";position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:1rem;font-weight:700;color:var(--text)}.color-swatch-custom{background:conic-gradient(#ff9aa2,#ffb7b2,#ffdac1,#e2f0cb,#b5ead7,#c7ceea,#d4a5ff,#ff9aa2);display:flex;align-items:center;justify-content:center;overflow:hidden;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;background-origin:border-box}.color-swatch-custom:after{content:"+";font-size:1.2rem;font-weight:700;color:#00000080}.color-swatch-custom.selected:after{content:"✓";color:var(--text)}.color-picker-modal{max-width:380px}.picker-preview-row{display:flex;align-items:center;gap:16px;margin-bottom:20px}.picker-preview-swatch{width:56px;height:56px;border-radius:50%;flex-shrink:0;border:2px solid rgba(0,0,0,.08);box-shadow:inset 0 1px #ffffff80}.picker-hex-group{flex:1}.picker-hex-input{width:120px;font-family:monospace;font-size:.95rem;font-weight:600;letter-spacing:.5px}.picker-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:4px}.picker-swatch{aspect-ratio:1;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:all .15s ease;padding:0;position:relative}.picker-swatch:hover{transform:scale(1.15);border-color:#0000001a}.picker-swatch.selected{border-color:var(--text);box-shadow:0 2px 8px #00000026;transform:scale(1.15)}.picker-swatch.selected:after{content:"✓";position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:700;color:var(--text)}.picker-swatch.selected[style*="#1D8348"]:after,.picker-swatch.selected[style*="#1A9E7A"]:after,.picker-swatch.selected[style*="#1A6EC0"]:after,.picker-swatch.selected[style*="#7A3ECC"]:after,.picker-swatch.selected[style*="#E63946"]:after,.picker-swatch.selected[style*="#DB2777"]:after,.picker-swatch.selected[style*="#E8650A"]:after,.picker-swatch.selected[style*="#404040"]:after{color:#fff}.pattern-picker{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:12px}.pattern-option{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 6px;border-radius:var(--radius-sm);border:2px solid var(--border);background:var(--white);cursor:pointer;transition:all .2s;-webkit-tap-highlight-color:transparent}.pattern-option:hover{border-color:#0000001f;background:var(--bg)}.pattern-option.selected{border-color:var(--accent);background:var(--accent-light)}.pattern-icon{font-size:1.2rem;line-height:1}.pattern-label{font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--text-light)}.pattern-option.selected .pattern-label{color:var(--accent)}.card-preview-wrap{pointer-events:none}.card-preview-wrap .punch-card{box-shadow:none;border:1px solid rgba(0,0,0,.08)}.card-preview-wrap .card-actions{display:none}.bg-picker{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.bg-option{display:flex;flex-direction:column;align-items:center;gap:4px;padding:6px;border-radius:10px;border:2px solid var(--border);background:var(--white);cursor:pointer;transition:all .2s;-webkit-tap-highlight-color:transparent}.bg-option:hover{border-color:#0000001f}.bg-option.selected{border-color:var(--accent);background:var(--accent-light)}.bg-swatch{width:100%;aspect-ratio:1;border-radius:6px}.bg-label{font-size:.6rem;font-weight:600;text-transform:uppercase;letter-spacing:.02em;color:var(--text-light);white-space:nowrap}.bg-option.selected .bg-label{color:var(--accent)}.modal-actions{display:flex;gap:10px;margin-top:28px}.btn{flex:1;padding:14px 20px;border-radius:50px;border:none;font-family:var(--font);font-size:.95rem;font-weight:600;cursor:pointer;transition:all .2s}.btn-primary{background:linear-gradient(135deg,#6DD498,var(--accent));color:#fff;box-shadow:0 3px 12px #3daa6a59}.btn-primary:hover{box-shadow:0 5px 20px #3daa6a73;transform:translateY(-1px)}.btn-primary:disabled{opacity:.4;cursor:not-allowed;transform:none;box-shadow:none}.btn-secondary{background:var(--bg);color:var(--text-light)}.btn-secondary:hover{background:var(--bg-secondary)}.punch-card{border-radius:var(--radius);padding:20px;box-shadow:0 1px 3px #0000000f,0 4px 16px #0000000a,inset 0 1px #ffffff80;border:1px solid rgba(255,255,255,.6);transition:box-shadow .3s ease,transform .3s ease;position:relative;overflow:hidden}.punch-card:hover{box-shadow:0 2px 6px #00000014,0 8px 24px #0000000f,inset 0 1px #ffffff80;transform:translateY(-2px)}.punch-card.complete{opacity:.85}.card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.card-title-section{flex:1;min-width:0}.card-title{font-size:1rem;font-weight:700;color:var(--text);word-wrap:break-word;line-height:1.3}.card-progress{font-size:.75rem;color:#0006;font-weight:600;margin-top:2px;display:inline-block}.card-actions{display:flex;gap:2px;flex-shrink:0;margin-left:8px}.card-action-btn{background:none;border:none;cursor:pointer;padding:6px;border-radius:var(--radius-xs);transition:all .2s;line-height:1;color:#00000059;display:flex;align-items:center;justify-content:center}.card-action-btn:hover{background:#0000000f;color:#0009}.card-action-btn--danger:hover{background:#dc262614;color:#dc2626b3}.progress-bar-track{height:4px;background:#0000000f;border-radius:4px;margin-bottom:16px;overflow:hidden}.progress-bar-fill{height:100%;background:var(--card-dark);border-radius:4px;transition:width .4s ease}.card-reward{font-size:.78rem;color:#0006;text-align:center;margin-top:10px;margin-bottom:2px;display:flex;align-items:center;justify-content:center;gap:6px}.punch-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:8px;justify-items:center;padding:4px 0}.pattern-zigzag .punch-slot:nth-child(odd){transform:translateY(-4px)}.pattern-zigzag .punch-slot:nth-child(2n){transform:translateY(4px)}.pattern-honeycomb{grid-template-columns:repeat(4,1fr)}.pattern-honeycomb .punch-slot:nth-child(8n+5),.pattern-honeycomb .punch-slot:nth-child(8n+6),.pattern-honeycomb .punch-slot:nth-child(8n+7),.pattern-honeycomb .punch-slot:nth-child(8n+8){transform:translate(20px)}.pattern-wave .punch-slot:nth-child(6n+1){transform:translateY(0)}.pattern-wave .punch-slot:nth-child(6n+2){transform:translateY(-5px)}.pattern-wave .punch-slot:nth-child(6n+3){transform:translateY(-8px)}.pattern-wave .punch-slot:nth-child(6n+4){transform:translateY(-5px)}.pattern-wave .punch-slot:nth-child(6n+5){transform:translateY(0)}.pattern-wave .punch-slot:nth-child(6n+6){transform:translateY(3px)}.punch-slot{width:42px;height:42px;border-radius:50%;border:2px dashed rgba(0,0,0,.1);background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .2s ease,background-color .2s ease;padding:0;position:relative;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none!important;box-shadow:none;-webkit-user-select:none;user-select:none}.punch-slot:hover:not(:disabled){transform:scale(1.1);border-color:#0003;background:#fff}.punch-slot:active:not(:disabled){transform:scale(.92)}.punch-slot.punched{border:2px solid var(--card-dark);background:#fff;cursor:pointer}.punch-slot.next{border-style:solid;border-color:#00000026;animation:pulse 2s ease-in-out infinite}.punch-slot.pop .punch-emoji{animation:popIn .4s ease}.punch-emoji{font-size:1.3rem;line-height:1}.punch-empty{width:6px;height:6px;border-radius:50%;background:#00000014}.complete-banner{text-align:center;margin-top:14px;padding:10px 12px;background:#ffffff80;border-radius:var(--radius-sm);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.complete-banner-title{font-size:.9rem;font-weight:700;color:var(--text)}.reward-text{font-size:.82rem;font-weight:500;color:var(--text-light);margin-top:4px}@keyframes pulse{0%,to{box-shadow:0 0 #3daa6a26}50%{box-shadow:0 0 0 6px #3daa6a0f}}.punch-card.bg-polka:before,.punch-card.bg-stripes:before,.punch-card.bg-diagonal:before,.punch-card.bg-hearts:before,.punch-card.bg-stars:before,.punch-card.bg-confetti:before,.punch-card.bg-checker:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;opacity:.35;border-radius:inherit}.punch-card.bg-polka>*,.punch-card.bg-stripes>*,.punch-card.bg-diagonal>*,.punch-card.bg-hearts>*,.punch-card.bg-stars>*,.punch-card.bg-confetti>*,.punch-card.bg-checker>*{position:relative;z-index:1}.punch-card.bg-polka:before{background-image:radial-gradient(circle,#fff 2.5px,transparent 2.5px);background-size:18px 18px}.punch-card.bg-stripes:before{background-image:repeating-linear-gradient(0deg,#fff 0px,#fff 2px,transparent 2px,transparent 14px)}.punch-card.bg-diagonal:before{background-image:repeating-linear-gradient(45deg,#fff 0px,#fff 2px,transparent 2px,transparent 14px)}.punch-card.bg-hearts:before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'%3E%3Cpath d='M10 17 C4 11 0 8 0 5 C0 2.2 2.2 0 5 0 C7 0 9 1.5 10 3 C11 1.5 13 0 15 0 C17.8 0 20 2.2 20 5 C20 8 16 11 10 17Z' fill='white'/%3E%3C/svg%3E");background-size:18px 18px;background-position:0 0}.punch-card.bg-stars:before{background-image:radial-gradient(circle,#fff 1.5px,transparent 1.5px),radial-gradient(circle,#fff 1px,transparent 1px);background-size:24px 24px,24px 24px;background-position:0 0,12px 12px}.punch-card.bg-confetti:before{background-image:radial-gradient(ellipse 3px 1.5px,#fff 100%,transparent 100%),radial-gradient(ellipse 1.5px 3px,#fff 100%,transparent 100%),radial-gradient(ellipse 3px 1.5px,#fff 100%,transparent 100%);background-size:20px 20px,20px 20px,20px 20px;background-position:0 0,10px 7px,5px 14px}.punch-card.bg-checker:before{background-image:linear-gradient(45deg,#fff 25%,transparent 25%),linear-gradient(-45deg,#fff 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#fff 75%),linear-gradient(-45deg,transparent 75%,#fff 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.bg-swatch.bg-polka{background-image:radial-gradient(circle,rgba(0,0,0,.3) 2px,transparent 2px)!important;background-size:8px 8px!important}.bg-swatch.bg-stripes{background-image:repeating-linear-gradient(0deg,rgba(0,0,0,.25) 0px,rgba(0,0,0,.25) 1px,transparent 1px,transparent 6px)!important}.bg-swatch.bg-diagonal{background-image:repeating-linear-gradient(45deg,rgba(0,0,0,.25) 0px,rgba(0,0,0,.25) 1px,transparent 1px,transparent 6px)!important}.bg-swatch.bg-hearts{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'%3E%3Cpath d='M10 17 C4 11 0 8 0 5 C0 2.2 2.2 0 5 0 C7 0 9 1.5 10 3 C11 1.5 13 0 15 0 C17.8 0 20 2.2 20 5 C20 8 16 11 10 17Z' fill='rgba(0,0,0,0.3)'/%3E%3C/svg%3E")!important;background-size:12px 12px!important}.bg-swatch.bg-stars{background-image:radial-gradient(circle,rgba(0,0,0,.3) 1px,transparent 1px),radial-gradient(circle,rgba(0,0,0,.3) .8px,transparent .8px)!important;background-size:10px 10px,10px 10px!important;background-position:0 0,5px 5px!important}.bg-swatch.bg-confetti{background-image:radial-gradient(ellipse 2px 1px,rgba(0,0,0,.3) 100%,transparent 100%),radial-gradient(ellipse 1px 2px,rgba(0,0,0,.3) 100%,transparent 100%)!important;background-size:8px 8px!important;background-position:0 0,4px 4px!important}.bg-swatch.bg-checker{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%)!important;background-size:8px 8px!important;background-position:0 0,0 4px,4px -4px,-4px 0px!important}.card-grid{column-count:1;column-gap:16px}.card-grid-item{break-inside:avoid;margin-bottom:16px;animation:fadeInUp .4s ease both}@media(min-width:540px){.card-grid{column-count:2;column-gap:20px}.card-grid-item{margin-bottom:20px}}@media(min-width:860px){.card-grid{column-count:3}}.confirm-dialog{background:var(--white);border-radius:var(--radius);padding:28px 24px;width:90%;max-width:360px;text-align:center;box-shadow:var(--shadow-elevated);animation:scaleIn .25s ease;margin:auto}.confirm-title{font-size:1.1rem;font-weight:700;color:var(--text);margin-bottom:12px}.confirm-message{font-size:.9rem;color:var(--text-light);line-height:1.5;margin-bottom:24px}.confirm-actions{display:flex;gap:10px}.btn-danger{flex:1;padding:12px 20px;border-radius:50px;border:none;font-family:var(--font);font-size:.95rem;font-weight:600;cursor:pointer;background:#fee2e2;color:#dc2626;transition:all .2s}.btn-danger:hover{background:#fecaca;box-shadow:0 3px 12px #dc262633}.empty-state{text-align:center;padding:80px 20px;animation:fadeInUp .5s ease}.empty-icon-wrap{width:80px;height:80px;margin:0 auto 20px;display:flex;align-items:center;justify-content:center;background:var(--bg);border:2px solid var(--accent);border-radius:50%;color:var(--accent)}.empty-title{font-size:1.2rem;font-weight:700;color:var(--text);margin-bottom:8px}.empty-text{font-size:.95rem;color:var(--text-light);max-width:280px;margin:0 auto 28px;line-height:1.5}.empty-btn{display:inline-flex;align-items:center;gap:8px;padding:14px 28px;border-radius:50px;border:none;font-family:var(--font);font-size:.95rem;font-weight:600;cursor:pointer;background:linear-gradient(135deg,#6DD498,var(--accent));color:#fff;box-shadow:0 3px 12px #3daa6a59;transition:all .25s ease}.empty-btn:hover{box-shadow:0 5px 20px #3daa6a73;transform:translateY(-2px)}.empty-btn:active{transform:scale(.97)}
