:root{--bg:#fbf7f4;--card:#fff;--text:#221d22;--muted:#7d6f73;--line:#eadedb;--accent:#b97869;--accent-dark:#7f1830;--soft:#f2dfdb;--shadow:0 18px 45px rgba(73,36,31,.08)}*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:var(--bg);color:var(--text)}a{color:var(--accent);text-decoration:none}.hidden{display:none!important}.app-shell{max-width:1120px;margin:0 auto;min-height:100vh}.topbar{display:flex;align-items:center;justify-content:space-between;padding:24px 18px}.brand{font-size:28px;font-weight:900;color:var(--text)}nav{display:flex;gap:16px;align-items:center;flex-wrap:wrap}nav a{font-weight:700;color:var(--muted)}.page{padding:8px 18px 90px}.auth-card,.hero-card,.form-card,.location-card,.stat-card,.detail-card,.empty-card,.inline-card,.wine-list-card{background:rgba(255,255,255,.86);border:1px solid var(--line);border-radius:28px;box-shadow:var(--shadow)}.auth-card{max-width:520px;margin:48px auto;padding:34px}.hero-card{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:30px;margin-bottom:22px}.hero-card.compact{display:block}.eyebrow{text-transform:uppercase;letter-spacing:.12em;color:var(--accent);font-weight:900;font-size:12px}h1{font-size:clamp(34px,5vw,58px);line-height:1.02;margin:8px 0 12px}h2{font-size:28px;margin:0}h3{font-size:22px;margin:10px 0 6px}.muted{color:var(--muted);font-size:18px;line-height:1.45}.muted-small{color:var(--muted);font-size:14px;font-weight:800}.form-card{padding:22px;display:grid;gap:18px}.form-card.wide{max-width:none}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}label{display:grid;gap:8px;font-weight:800;color:#402a31}input,select,textarea{width:100%;border:1px solid var(--line);background:#fff;border-radius:18px;padding:17px 18px;font:inherit;color:var(--text);outline:none}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 4px rgba(185,120,105,.12)}.btn{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:18px;padding:15px 22px;font-weight:900;font-size:16px;cursor:pointer}.btn.primary{background:var(--accent-dark);color:#fff}.grid{display:grid;gap:18px}.stats-grid{grid-template-columns:repeat(3,minmax(0,1fr));margin-bottom:28px}.stat-card{padding:22px}.stat-card strong{display:block;font-size:42px;color:var(--accent-dark)}.stat-card span{color:var(--muted);font-weight:800}.section-head{display:flex;align-items:center;justify-content:space-between;margin:28px 0 14px}.location-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.location-card{position:relative;display:block;padding:24px;transition:.18s ease;color:var(--text)}.location-card:hover{transform:translateY(-3px);box-shadow:0 24px 55px rgba(73,36,31,.12)}.location-main{display:block;color:inherit}.location-card .icon{width:48px;height:48px;border-radius:16px;background:var(--soft);display:flex;align-items:center;justify-content:center;color:var(--accent-dark);font-size:24px}.location-card p{color:var(--muted);font-weight:700}.location-edit-form{display:grid;grid-template-columns:1fr auto;gap:10px;margin-top:16px}.mini-ok{border:0;border-radius:16px;background:var(--accent-dark);color:#fff;font-weight:900;padding:0 16px}.icon-btn{width:38px;height:38px;border-radius:14px;border:1px solid var(--line);background:#fff;color:var(--accent-dark);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;font-weight:900}.edit-location-btn{position:absolute;right:18px;top:18px}.empty-card{padding:24px;color:var(--muted)}.inline-card{display:flex;gap:12px;padding:14px;margin-bottom:20px}.flash{border-radius:18px;padding:14px 18px;margin:0 0 16px;font-weight:800}.flash-success{background:#eaf7ee;color:#246b3d}.flash-error{background:#ffe9e7;color:#9b1c1c}.flash-warning{background:#fff4df;color:#8a5b13}.centered{text-align:center}.fab{position:fixed;right:24px;bottom:24px;width:66px;height:66px;border-radius:24px;background:var(--accent-dark);color:#fff;font-size:40px;display:flex;align-items:center;justify-content:center;box-shadow:0 18px 35px rgba(127,24,48,.28)}.detail-card{padding:26px;font-size:18px;line-height:1.55;margin-bottom:18px}.detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 22px}.span-2{grid-column:span 2}.wine-list-card{padding:10px}.wine-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px;border-bottom:1px solid var(--line)}.wine-row:last-child{border-bottom:0}.wine-row-main{display:flex;align-items:center;gap:14px;min-width:0;color:var(--text);flex:1}.wine-row-main h3{margin:0 0 4px;font-size:21px}.wine-row-main p{margin:0;color:var(--muted);font-weight:700;line-height:1.35}.wine-thumb{width:62px;height:62px;flex:0 0 62px;border-radius:20px;background:linear-gradient(135deg,var(--soft),#fff);display:flex;align-items:center;justify-content:center;color:var(--accent-dark);font-size:28px;font-weight:900;border:1px solid var(--line)}.wine-thumb.library{background:linear-gradient(135deg,#fff,#f7ece8)}.wine-row-side{display:flex;align-items:center;gap:8px;color:var(--muted)}.wine-row-side strong{font-size:28px;color:var(--accent-dark)}.stars{color:var(--accent-dark);letter-spacing:2px;font-weight:900}.round-add{width:44px;height:44px;border-radius:16px;border:0;background:var(--accent-dark);color:#fff;font-size:28px;font-weight:900;cursor:pointer}.library-results{margin-top:16px}@media(max-width:760px){.topbar{padding:18px}.brand{font-size:24px}nav{gap:10px;font-size:14px}.hero-card{align-items:flex-start;flex-direction:column;border-radius:26px;padding:24px}.auth-card{margin:20px 0;padding:24px}.stats-grid,.location-grid,.form-grid,.detail-grid{grid-template-columns:1fr}.span-2{grid-column:auto}h1{font-size:40px}.muted{font-size:16px}.inline-card{border-radius:24px}.page{padding-left:14px;padding-right:14px}.wine-row{align-items:flex-start}.wine-row-main h3{font-size:19px}.wine-thumb{width:54px;height:54px;flex-basis:54px}.wine-row-side{flex-direction:column;align-items:flex-end}.topbar{align-items:flex-start;gap:12px;flex-direction:column}}
.btn.dark{background:#221d22;color:#fff}.btn:disabled{opacity:.65;cursor:wait}.scan-modal{position:fixed;inset:0;z-index:30;display:grid;place-items:center;padding:18px}.scan-backdrop{position:absolute;inset:0;background:rgba(20,14,17,.62)}.scan-dialog{position:relative;width:min(760px,100%);max-height:calc(100vh - 36px);overflow:auto;background:#fff;border-radius:24px;border:1px solid var(--line);box-shadow:0 30px 80px rgba(0,0,0,.24);padding:22px}.scan-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:18px}.scan-head h2{margin:0 0 6px}.scan-slots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.scan-slot{display:grid;gap:12px}.scan-drop{position:relative;display:grid;place-items:center;gap:8px;min-height:220px;width:100%;border:2px dashed var(--line);border-radius:20px;background:#fff;color:var(--text);font:inherit;font-weight:900;cursor:pointer;overflow:hidden}.scan-drop small{color:var(--muted);font-weight:800}.scan-drop img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.scan-drop.has-image span,.scan-drop.has-image small{position:relative;z-index:1;background:rgba(255,255,255,.86);border-radius:12px;padding:5px 9px}.camera-panel{margin-top:18px;display:grid;gap:12px}.camera-panel video{width:100%;max-height:360px;object-fit:cover;border-radius:20px;background:#111}.camera-actions,.scan-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}.scan-status{min-height:24px;margin:16px 0 0;color:var(--accent-dark);font-weight:900}.scan-submit{width:100%;margin-top:10px}@media(max-width:760px){.scan-slots{grid-template-columns:1fr}.scan-dialog{border-radius:20px;padding:16px}.scan-drop{min-height:190px}}
.scan-modal.camera-active .camera-panel{display:grid}.scan-modal.camera-active .camera-panel video{max-height:min(64vh,620px)}@media(max-width:760px){.scan-modal.camera-active{padding:0;place-items:stretch}.scan-modal.camera-active .scan-backdrop{background:#fff}.scan-modal.camera-active .scan-dialog{width:100%;height:100dvh;max-height:none;border-radius:0;border:0;box-shadow:none;padding:14px;display:grid;grid-template-rows:auto 1fr auto;overflow:hidden}.scan-modal.camera-active .scan-slots,.scan-modal.camera-active .scan-actions,.scan-modal.camera-active .scan-status{display:none}.scan-modal.camera-active .camera-panel{margin:0;min-height:0;grid-row:2 / 4;display:grid;grid-template-rows:minmax(0,1fr) auto;gap:12px}.scan-modal.camera-active .camera-panel video{width:100%;height:100%;max-height:none;object-fit:cover;border-radius:18px}.scan-modal.camera-active .camera-actions{justify-content:stretch}.scan-modal.camera-active .camera-actions .btn{flex:1;min-height:50px}}
.field-error{color:#9b1c1c}.invalid-field{border-color:#9b1c1c!important;box-shadow:0 0 0 4px rgba(155,28,28,.12)!important}.form-validation-message{margin:0;color:#9b1c1c;font-weight:900}.storage-link{display:inline-flex;width:max-content;margin:8px 0 7px;padding:7px 11px;border-radius:12px;background:#f8ece9;color:var(--accent-dark);font-weight:900}.storage-link.missing{background:#ffe9e7;color:#9b1c1c}.library-add-modal{position:fixed;inset:0;z-index:32;display:grid;place-items:center;padding:18px}.modal-backdrop{position:absolute;inset:0;background:rgba(20,14,17,.62)}.modal-dialog{position:relative;width:min(520px,100%);background:#fff;border:1px solid var(--line);border-radius:24px;box-shadow:0 30px 80px rgba(0,0,0,.24);padding:22px;display:grid;gap:16px}.compact-dialog .btn{width:100%}.scan-wait{display:none;text-align:center;padding:62px 18px;cursor:wait}.scan-wait h2{font-size:34px;margin:0 0 12px;color:var(--accent-dark)}.scan-wait p{margin:0 0 8px;font-size:20px;font-weight:900}.scan-wait span{color:var(--muted);font-weight:800}.scan-modal.scan-loading,.scan-modal.scan-loading *{cursor:wait!important}.scan-modal.scan-loading .scan-head,.scan-modal.scan-loading .scan-slots,.scan-modal.scan-loading .camera-panel,.scan-modal.scan-loading .scan-status,.scan-modal.scan-loading .scan-actions{display:none!important}.scan-modal.scan-loading .scan-dialog{overflow:hidden}.scan-modal.scan-loading .scan-wait{display:block}@media(max-width:760px){.modal-dialog{border-radius:20px;padding:18px}.scan-wait{padding:80px 12px}.storage-link{font-size:14px}}
