:root{--color-primary:#9b59b6;--color-primary-light:#b07cc9;--color-primary-dark:#7d3c98;--color-bg:#fff;--color-text:#2c2c2c;--color-text-muted:#6b6b6b;--color-border:#ececec;--radius:16px;--shadow:0 2px 12px #0000000f;--shadow-lg:0 4px 20px #0000001a;--font-heading:"Cormorant Garamond", Georgia, serif;--font-body:"Lora", Georgia, serif;--max-width:390px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;font-size:16px}body{color:var(--color-text);background:#f5f0f7;min-height:100dvh;font-family:Lora,Georgia,serif;font-weight:400;line-height:1.5}#root{min-height:100dvh}h1,h2,h3,h4{font-family:Cormorant Garamond,Georgia,serif;font-weight:300;line-height:1.2}a{color:inherit;text-decoration:none}button{cursor:pointer;background:0 0;border:none;font-family:Lora,Georgia,serif;font-weight:400}input,select,textarea{font-family:Lora,Georgia,serif;font-weight:400}img{max-width:100%;display:block}.app-shell{max-width:var(--max-width);background:var(--color-bg);min-height:100dvh;margin:0 auto;position:relative;box-shadow:0 0 40px #0000000a}.page{padding:24px 20px 100px}.page-header{margin-bottom:24px}.page-header h1{color:var(--color-primary);letter-spacing:.02em;font-size:2rem}.page-header p{color:var(--color-text-muted);margin-top:4px;font-size:.875rem}.back-link{color:var(--color-primary);align-items:center;gap:6px;margin-bottom:16px;padding:4px 0;font-size:.875rem;display:inline-flex}.back-link:hover{opacity:.8}.card{background:var(--color-bg);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}.btn{border-radius:var(--radius);justify-content:center;align-items:center;gap:8px;padding:12px 24px;font-size:.9375rem;transition:opacity .2s,transform .15s;display:inline-flex}.btn:active{transform:scale(.98)}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover{background:var(--color-primary-dark)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-outline{border:1.5px solid var(--color-primary);color:var(--color-primary);background:0 0}.btn-outline:hover{background:#9b59b60f}.btn-danger{color:#e74c3c;background:0 0;border:1.5px solid #e74c3c}.btn-danger:hover{background:#e74c3c0f}.btn-block{width:100%}.form-group{margin-bottom:20px}.form-group label{color:var(--color-text-muted);letter-spacing:.03em;text-transform:uppercase;margin-bottom:8px;font-size:.8125rem;display:block}.form-group input,.form-group select,.form-group textarea{border:1.5px solid var(--color-border);border-radius:var(--radius);width:100%;color:var(--color-text);background:var(--color-bg);padding:12px 16px;font-size:.9375rem;transition:border-color .2s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--color-primary);outline:none}.form-group textarea{resize:vertical;min-height:80px}.empty-state{text-align:center;color:var(--color-text-muted);padding:48px 20px}.empty-state span{margin-bottom:12px;font-size:2.5rem;display:block}.empty-state p{font-size:.9375rem}.stat-card{background:var(--color-bg);border-radius:var(--radius);box-shadow:var(--shadow);text-align:center;flex:1;min-width:0;padding:14px 12px;position:relative;overflow:hidden}.stat-card:after{content:"";pointer-events:none;opacity:.7;background-image:radial-gradient(circle,#d9d9d9 1.5px,#0000 1.5px);background-repeat:repeat;background-size:7px 7px;width:17px;height:17px;position:absolute;top:8px;right:8px}.stat-card__value{font-family:var(--font-heading);color:var(--color-primary);font-size:1.75rem;font-weight:400;line-height:1;display:block}.stat-card__label{font-family:var(--font-body);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;margin-top:6px;font-size:.6875rem;display:block}.stat-card--warning .stat-card__value{color:#d4651a}.stat-card--accent .stat-card__value{color:var(--color-primary-dark)}.category-tabs{-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:8px;margin-bottom:20px;padding-bottom:4px;display:flex;overflow-x:auto}.category-tabs::-webkit-scrollbar{display:none}.category-tabs__tab{color:var(--color-text-muted);background:#f8f4fa;border-radius:20px;flex-shrink:0;padding:8px 16px;font-size:.8125rem;transition:all .2s}.category-tabs__tab--active{background:var(--color-primary);color:#fff}.category-tabs__tab:hover:not(.category-tabs__tab--active){background:#efe6f4}.product-image{border-radius:12px;flex-shrink:0;overflow:hidden}.product-image img{object-fit:cover;width:100%;height:100%}.product-image--sm{width:56px;height:56px}.product-image--md{border-radius:12px;width:72px;height:72px}.product-image--lg{border-radius:var(--radius);width:100%;height:220px}.product-image--placeholder{justify-content:center;align-items:center;display:flex}.product-image--placeholder span{font-size:2rem;line-height:1}.product-image--lg.product-image--placeholder span{font-size:4rem}.status-badge{font-family:var(--font-body);white-space:nowrap;border-radius:20px;padding:4px 10px;font-size:.75rem;font-weight:400;display:inline-block}.status-badge--unopened{color:#666;background:#f5f5f5}.status-badge--in-use{color:#7b4fa6;background:#f0e8ff}.status-badge--finished{color:#999;background:#f0f0f0}.status-badge--good{color:#27ae60;background:#e8f8ef}.status-badge--caution{color:#c49a0a;background:#fef9e7}.status-badge--warning{color:#d4651a;background:#fef0e6}.status-badge--expired{color:#c0392b;background:#fdedec}.status-badge--unknown{color:#999;background:#f5f5f5}.product-card{background:var(--color-bg);border-radius:var(--radius);box-shadow:var(--shadow);align-items:center;gap:14px;padding:16px;transition:box-shadow .2s,transform .15s;display:flex}.product-card:hover{box-shadow:var(--shadow-lg)}.product-card:active{transform:scale(.99)}.product-card__info{flex:1;min-width:0}.product-card__name{font-family:var(--font-body);color:var(--color-text);white-space:nowrap;text-overflow:ellipsis;font-size:1rem;font-weight:500;overflow:hidden}.product-card__brand{font-family:var(--font-body);color:#999;margin-top:2px;font-size:.8125rem;font-weight:400}.product-card__meta{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}.fab{background:var(--color-primary);color:#fff;z-index:100;width:56px;height:56px;max-width:var(--max-width);border-radius:50%;justify-content:center;align-items:center;font-size:1.75rem;font-weight:300;transition:transform .2s,box-shadow .2s;display:flex;position:fixed;bottom:28px;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #9b59b666}@media (width>=391px){.fab{left:50%}}.fab:hover{transform:translate(-50%)scale(1.05);box-shadow:0 6px 24px #9b59b680}.fab:active{transform:translate(-50%)scale(.95)}.dashboard__stats{grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:24px;display:grid}.dashboard__list{flex-direction:column;gap:12px;display:flex}.dashboard .page-header{margin-bottom:28px}.dashboard .page-header h1{color:#1a1a1a;letter-spacing:.01em;font-family:Cormorant Garamond,Georgia,serif;font-size:36px;font-style:italic;font-weight:300}.dashboard .page-header p{color:#888;letter-spacing:.05em;margin-top:4px;font-family:Lora,Georgia,serif;font-size:14px;font-weight:400}.dashboard .page-header:after{content:"";background:#e8e0f0;height:1px;margin-top:14px;display:block}.status-toggle{gap:8px;display:flex}.status-toggle__btn{border-radius:var(--radius);color:var(--color-text-muted);background:#f8f4fa;border:1.5px solid #0000;flex:1;padding:10px 8px;font-size:.8125rem;transition:all .2s}.status-toggle__btn--active{border-color:var(--color-primary);color:var(--color-primary);background:#9b59b61a}.image-upload__dropzone{border:2px dashed var(--color-border);border-radius:var(--radius);color:var(--color-text-muted);cursor:pointer;justify-content:center;align-items:center;padding:32px;font-size:.875rem;transition:border-color .2s;display:flex}.image-upload__dropzone:hover{border-color:var(--color-primary)}.image-upload__preview{border-radius:var(--radius);position:relative;overflow:hidden}.image-upload__preview img{object-fit:cover;border-radius:var(--radius);width:100%;height:180px}.image-upload__remove{color:#fff;background:#0009;border-radius:8px;padding:6px 12px;font-size:.75rem;position:absolute;top:10px;right:10px}.add-product__form{padding-bottom:24px}.image-upload__compressing{border:2px dashed var(--color-border);border-radius:var(--radius);color:var(--color-text-muted);justify-content:center;align-items:center;gap:10px;padding:32px;font-size:.875rem;display:flex}.image-upload__spinner{border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;width:18px;height:18px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.expiry-progress{margin:20px 0}.expiry-progress__header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.expiry-progress__label{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.03em;font-size:.8125rem}.expiry-progress__days{font-size:.8125rem;font-weight:400}.expiry-progress__days--good{color:#27ae60}.expiry-progress__days--caution{color:#d4a017}.expiry-progress__days--warning{color:#e67e22}.expiry-progress__days--expired{color:#e74c3c}.expiry-progress__track{background:#f0f0f0;border-radius:4px;height:8px;overflow:hidden}.expiry-progress__fill{border-radius:4px;height:100%;transition:width .4s}.expiry-progress__fill--good{background:linear-gradient(90deg,#2ecc71,#27ae60)}.expiry-progress__fill--caution{background:linear-gradient(90deg,#f1c40f,#d4a017)}.expiry-progress__fill--warning{background:linear-gradient(90deg,#f39c12,#e67e22)}.expiry-progress__fill--expired{background:linear-gradient(90deg,#e74c3c,#c0392b);width:100%!important}.product-detail__hero{margin-bottom:20px}.product-detail__header h1{color:var(--color-text);font-size:1.75rem}.product-detail__brand{color:var(--color-text-muted);margin-top:4px;font-size:.9375rem}.product-detail__badges{align-items:center;gap:10px;margin-top:12px;display:flex}.product-detail__category{color:var(--color-text-muted);background:#f8f4fa;border-radius:20px;padding:4px 10px;font-size:.8125rem}.warning-banner{border-radius:var(--radius);background:#fef5e7;border-left:4px solid #e67e22;gap:12px;margin:16px 0;padding:14px 16px;display:flex}.warning-banner--expired{background:#fdedec;border-left-color:#e74c3c}.warning-banner__icon{flex-shrink:0;font-size:1.25rem}.warning-banner strong{color:var(--color-text);font-size:.9375rem;font-weight:400}.warning-banner p{color:var(--color-text-muted);margin-top:2px;font-size:.8125rem}.product-detail__info{margin-top:8px}.info-row{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:baseline;padding:10px 0;display:flex}.info-row:last-child{border-bottom:none}.info-row--notes{flex-direction:column;gap:6px}.info-row__label{color:var(--color-text-muted);font-size:.8125rem}.info-row__value{font-size:.9375rem;font-weight:400}.info-row__notes{color:var(--color-text);font-size:.875rem;line-height:1.6}.product-detail__actions{flex-direction:column;gap:12px;margin-top:24px;padding-bottom:24px;display:flex}
