@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;1,400&family=Lato:wght@300;400&display=swap');
*{box-sizing:border-box;margin:0;padding:0;}
:root{--burg:#5C1A2E;--burg-l:#8B3A52;--cream:#F9F3EB;--cream-d:#EDE3D5;--gold:#C8973A;--gold-l:#E8C97A;--td:#2A1018;--tm:#6B4050;--tl:#A07888;}
html,body{height:100%;background:var(--cream);color:var(--td);font-family:'Lato',sans-serif;}
.loading-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;font-family:'Playfair Display',serif;font-size:1.2rem;color:var(--burg);}
.auth-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:2rem;}
.auth-card{background:white;border-radius:16px;padding:2.5rem 2rem;width:100%;max-width:380px;border:1px solid var(--cream-d);}
.auth-header{text-align:center;margin-bottom:2rem;}
.auth-header h1{font-family:'Playfair Display',serif;font-size:2rem;color:var(--burg);}
.auth-header h1 em{font-style:italic;color:var(--gold);}
.auth-header p{font-size:.82rem;color:var(--tl);margin-top:.4rem;letter-spacing:.05em;text-transform:uppercase;}
.auth-divider{width:40px;height:1.5px;background:var(--gold);margin:.6rem auto;}
.auth-label{display:block;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--tl);margin-bottom:.3rem;margin-top:1rem;}
.auth-input{width:100%;padding:.6rem .8rem;border:1px solid var(--cream-d);border-radius:6px;font-family:'Lato',sans-serif;font-size:.95rem;color:var(--td);background:white;outline:none;transition:border-color .2s;}
.auth-input:focus{border-color:var(--gold);}
.auth-btn{width:100%;padding:.7rem;border-radius:6px;border:none;background:var(--burg);color:var(--cream);font-family:'Lato',sans-serif;font-size:.9rem;cursor:pointer;margin-top:1.4rem;}
.auth-btn:hover{background:var(--burg-l);}
.auth-err{font-size:.78rem;color:#A32D2D;margin-top:.6rem;text-align:center;min-height:1.1rem;}
.auth-switch{font-size:.78rem;color:var(--tl);text-align:center;margin-top:1rem;}
.auth-switch button{background:none;border:none;color:var(--gold);cursor:pointer;font-size:.78rem;text-decoration:underline;}
.main-screen{display:none;}
.topbar{background:var(--cream);padding:.8rem 1.2rem;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--cream-d);position:sticky;top:0;z-index:50;}
.topbar-title{font-family:'Playfair Display',serif;font-size:1.3rem;color:var(--burg);}
.topbar-title em{font-style:italic;color:var(--gold);}
.topbar-actions{display:flex;gap:8px;align-items:center;}
.topbar-btn{background:none;border:none;font-family:'Lato',sans-serif;font-size:.78rem;color:var(--tl);cursor:pointer;padding:.3rem .5rem;border-radius:4px;display:flex;align-items:center;gap:4px;}
.topbar-btn:hover{color:var(--burg);}
.app{max-width:900px;margin:0 auto;padding:1.2rem 1rem 5rem;}
.controls{display:flex;gap:8px;margin-bottom:.75rem;align-items:center;flex-wrap:wrap;}
.search-wrap{flex:1;position:relative;min-width:140px;}
.search-wrap input{width:100%;padding:.55rem .9rem .55rem 2rem;border:1px solid var(--cream-d);border-radius:6px;background:white;color:var(--td);font-family:'Lato',sans-serif;font-size:.9rem;outline:none;transition:border-color .2s;}
.search-wrap input:focus{border-color:var(--gold);}
.si{position:absolute;left:.7rem;top:50%;transform:translateY(-50%);color:var(--tl);font-size:.85rem;pointer-events:none;}
.fbtn{padding:.45rem .8rem;border-radius:20px;border:1px solid var(--cream-d);background:white;font-family:'Lato',sans-serif;font-size:.75rem;color:var(--tm);cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;gap:4px;white-space:nowrap;}
.fbtn:hover{border-color:var(--gold-l);color:var(--burg);}
.fbtn.active{background:var(--burg);color:var(--cream);border-color:var(--burg);}
.fbtn.fav-filter.active{background:#C0392B;border-color:#C0392B;color:white;}
.fbtn.late-filter.active{background:#2C3E7A;border-color:#2C3E7A;color:white;}
.fbtn.nightowl-filter.active{background:#1a1a2e;border-color:#1a1a2e;color:white;}
.nightowl-badge{display:inline-flex;align-items:center;gap:3px;font-size:.66rem;letter-spacing:.05em;text-transform:uppercase;padding:.15rem .5rem;border-radius:20px;background:#1a1a2e;color:#E8D5FF;width:fit-content;}
.late-toggle-row{margin-top:.8rem;}
.late-toggle-label{display:flex;align-items:center;gap:8px;font-size:.88rem;color:var(--tm);cursor:pointer;user-select:none;}
.late-toggle-label input[type=checkbox]{width:16px;height:16px;accent-color:#2C3E7A;cursor:pointer;flex-shrink:0;}
.late-toggle-check{font-size:1rem;}
.late-badge{display:inline-flex;align-items:center;gap:3px;font-size:.66rem;letter-spacing:.05em;text-transform:uppercase;padding:.15rem .5rem;border-radius:20px;background:#E8ECF8;color:#2C3E7A;width:fit-content;}
.icon-btn-ctrl{padding:.5rem .6rem;border-radius:6px;border:1px solid var(--cream-d);background:white;color:var(--tm);cursor:pointer;display:flex;align-items:center;transition:all .15s;}
.icon-btn-ctrl:hover{border-color:var(--gold-l);color:var(--burg);}
.add-btn{padding:.55rem 1rem;border-radius:6px;border:none;background:var(--burg);color:var(--cream);font-family:'Lato',sans-serif;font-size:.82rem;cursor:pointer;white-space:nowrap;}
.add-btn:hover{background:var(--burg-l);}
.cat-filter-bar{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:1.2rem;align-items:center;}
.cat-filter-bar-label{font-size:.68rem;letter-spacing:.07em;text-transform:uppercase;color:var(--tl);white-space:nowrap;}
.cfbtn{padding:.32rem .7rem;border-radius:20px;border:1.5px solid transparent;font-family:'Lato',sans-serif;font-size:.72rem;cursor:pointer;letter-spacing:.04em;text-transform:uppercase;}
.overlay{display:none;position:fixed;inset:0;background:rgba(42,16,24,.55);z-index:100;align-items:center;justify-content:center;padding:1rem;}
.overlay.open{display:flex;}
.modal{background:var(--cream);border-radius:12px;padding:1.6rem;width:100%;max-width:480px;position:relative;max-height:92vh;overflow-y:auto;}
.modal h2{font-family:'Playfair Display',serif;font-size:1.3rem;color:var(--burg);margin-bottom:.9rem;}
.flabel{display:block;font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--tl);margin-bottom:.22rem;margin-top:.75rem;}
.modal input,.modal textarea,.modal select{width:100%;padding:.48rem .72rem;border:1px solid var(--cream-d);border-radius:6px;font-family:'Lato',sans-serif;font-size:.9rem;color:var(--td);background:white;outline:none;transition:border-color .2s;}
.modal input:focus,.modal textarea:focus,.modal select:focus{border-color:var(--gold);}
.modal textarea{resize:vertical;min-height:60px;}
.url-row{display:flex;gap:8px;align-items:flex-end;}
.url-row input{flex:1;}
.fetch-btn{padding:.48rem .85rem;border-radius:6px;border:none;background:var(--gold);color:white;font-family:'Lato',sans-serif;font-size:.78rem;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:opacity .2s;}
.fetch-btn:disabled{opacity:.5;cursor:not-allowed;}
.fetch-status{font-size:.75rem;margin-top:.3rem;min-height:1rem;color:var(--tm);}
.fetch-status.err{color:#A32D2D;}
.fetch-status.warn{color:#633806;background:#FAEEDA;border-radius:6px;padding:.4rem .6rem;font-size:.75rem;}
.fetch-status.ok{color:#3B6D11;}
.ai-badge{display:inline-flex;align-items:center;gap:3px;font-size:.68rem;background:#FAEEDA;color:#633806;padding:.12rem .45rem;border-radius:20px;margin-left:5px;vertical-align:middle;}
.mfooter{display:flex;gap:8px;margin-top:1.1rem;justify-content:flex-end;}
.cbtn{padding:.48rem .85rem;border-radius:6px;border:1px solid var(--cream-d);background:white;color:var(--tm);font-family:'Lato',sans-serif;font-size:.82rem;cursor:pointer;}
.sbtn{padding:.48rem 1rem;border-radius:6px;border:none;background:var(--burg);color:var(--cream);font-family:'Lato',sans-serif;font-size:.82rem;cursor:pointer;}
.sbtn:hover{background:var(--burg-l);}
.cleanup-btn{color:var(--gold);border-color:var(--gold-l);}
.close-x{position:absolute;top:.85rem;right:.85rem;background:none;border:none;font-size:1.2rem;color:var(--tl);cursor:pointer;}
.settings-section{margin-top:1.2rem;}
.settings-section-title{font-size:.72rem;letter-spacing:.07em;text-transform:uppercase;color:var(--tl);margin-bottom:.6rem;padding-bottom:.4rem;border-bottom:1px solid var(--cream-d);}
.settings-row{display:flex;gap:8px;align-items:flex-end;margin-top:.5rem;}
.settings-row input{flex:1;padding:.48rem .72rem;border:1px solid var(--cream-d);border-radius:6px;font-family:'Lato',sans-serif;font-size:.88rem;color:var(--td);background:white;outline:none;transition:border-color .2s;}
.settings-row input:focus{border-color:var(--gold);}
.settings-save-btn{padding:.48rem .9rem;border-radius:6px;border:none;background:var(--gold);color:white;font-family:'Lato',sans-serif;font-size:.8rem;cursor:pointer;white-space:nowrap;}
.settings-hint{font-size:.73rem;color:var(--tl);margin-top:.4rem;line-height:1.5;}
.settings-hint a{color:var(--gold);}
.settings-status{font-size:.75rem;margin-top:.35rem;min-height:1rem;}
.settings-status.ok{color:#3B6D11;}
.settings-status.err{color:#A32D2D;}
.api-key-indicator{display:inline-flex;align-items:center;gap:5px;font-size:.72rem;padding:.2rem .6rem;border-radius:20px;margin-top:.5rem;}
.api-key-indicator.set{background:#EAF3DE;color:#27500A;}
.api-key-indicator.unset{background:#FAECE7;color:#712B13;}
.danger-btn{padding:.45rem .9rem;border-radius:6px;border:1px solid #F09595;background:white;color:#A32D2D;font-family:'Lato',sans-serif;font-size:.8rem;cursor:pointer;margin-top:.5rem;}
.danger-btn:hover{background:#FCEBEB;}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:.9rem;}
.card{background:white;border-radius:10px;padding:1rem 1.1rem;border:1px solid var(--cream-d);position:relative;transition:transform .15s;display:flex;flex-direction:column;gap:.38rem;}
.card:hover{transform:translateY(-2px);}
.card.is-fav{border-color:#F4C0D1;}
.ctag{display:inline-block;font-size:.66rem;letter-spacing:.06em;text-transform:uppercase;padding:.16rem .5rem;border-radius:20px;}
.card-place{font-size:.72rem;font-weight:400;text-transform:uppercase;letter-spacing:.07em;color:var(--tl);margin-bottom:1px;}
.card h3{font-family:'Playfair Display',serif;font-size:.97rem;color:var(--td);line-height:1.3;}
.card p{font-size:.81rem;color:var(--tm);line-height:1.5;font-weight:300;}
.card-meta-links{display:flex;flex-direction:column;gap:4px;margin-top:2px;}
.card-hood{display:inline-flex;align-items:center;gap:4px;font-size:.73rem;color:var(--tm);width:fit-content;}
.card-hours{display:inline-flex;align-items:center;gap:4px;font-size:.73rem;color:var(--tm);width:fit-content;line-height:1.4;}
.card-link{display:inline-flex;align-items:center;gap:4px;font-size:.73rem;color:var(--gold);text-decoration:none;border-bottom:1px solid var(--gold-l);padding-bottom:1px;width:fit-content;}
.card-link:hover{color:var(--burg);}
.card-addr{display:inline-flex;align-items:center;gap:4px;font-size:.73rem;color:#185FA5;text-decoration:none;border-bottom:1px solid #B5D4F4;padding-bottom:1px;width:fit-content;line-height:1.4;}
.card-addr:hover{color:var(--burg);}
.cfoot{display:flex;align-items:center;justify-content:space-between;margin-top:auto;padding-top:.45rem;}
.cmeta{font-size:.7rem;color:var(--tl);}
.cacts{display:flex;gap:5px;align-items:center;}
.ibtn{background:none;border:none;cursor:pointer;color:var(--tl);padding:3px;transition:color .15s;display:flex;align-items:center;}
.ibtn:hover{color:var(--burg);}
.ibtn.done-active{color:var(--gold);}
.heart-btn{background:none;border:none;cursor:pointer;padding:3px;display:flex;align-items:center;transition:transform .2s;}
.heart-btn:hover{transform:scale(1.2);}
.heart-btn svg{transition:all .2s;}
.heart-btn.active svg{fill:#C0392B;stroke:#C0392B;}
.heart-btn:not(.active) svg{fill:none;stroke:var(--tl);}
.heart-btn:not(.active):hover svg{stroke:#C0392B;}
.done-badge{position:absolute;top:.65rem;right:.65rem;font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;padding:.1rem .4rem;border-radius:20px;background:#EAF3DE;color:#27500A;}
.fav-corner{position:absolute;top:.62rem;right:.62rem;pointer-events:none;}
.fav-corner svg{fill:#C0392B;stroke:#C0392B;}
.empty{text-align:center;padding:3rem 2rem;color:var(--tl);grid-column:1/-1;}
.empty-icon{font-size:2rem;margin-bottom:.7rem;display:block;}
.empty h3{font-family:'Playfair Display',serif;font-size:1.1rem;color:var(--tm);margin-bottom:.3rem;}
.stats{display:flex;gap:1.2rem;margin-bottom:1.2rem;flex-wrap:wrap;}
.stat-num{font-family:'Playfair Display',serif;font-size:1.3rem;color:var(--burg);}
.stat-label{font-size:.66rem;text-transform:uppercase;letter-spacing:.08em;color:var(--tl);}
.spinner{display:inline-block;width:11px;height:11px;border:2px solid var(--cream-d);border-top-color:var(--gold);border-radius:50%;animation:spin .7s linear infinite;vertical-align:middle;margin-right:3px;}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes heartpop{0%{transform:scale(1)}40%{transform:scale(1.4)}70%{transform:scale(.9)}100%{transform:scale(1)}}
.heart-pop{animation:heartpop .35s ease;}
.cat-list{display:flex;flex-direction:column;gap:8px;margin-top:.5rem;}
.cat-row{display:flex;align-items:center;gap:8px;}
.cat-swatch{width:26px;height:26px;border-radius:6px;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;border:1.5px solid transparent;}
.cat-swatch:hover{border-color:var(--gold);}
.cat-name-input{flex:1;padding:.38rem .6rem;border:1px solid var(--cream-d);border-radius:6px;font-family:'Lato',sans-serif;font-size:.86rem;color:var(--td);background:white;outline:none;}
.cat-name-input:focus{border-color:var(--gold);}
.del-cat-btn{background:none;border:none;cursor:pointer;color:var(--tl);padding:3px;display:flex;align-items:center;}
.del-cat-btn:hover{color:#A32D2D;}
.add-cat-row{display:flex;gap:8px;margin-top:.5rem;}
.add-cat-row input{flex:1;padding:.38rem .6rem;border:1px solid var(--cream-d);border-radius:6px;font-family:'Lato',sans-serif;font-size:.86rem;color:var(--td);background:white;outline:none;}
.add-cat-row input:focus{border-color:var(--gold);}
.add-cat-btn{padding:.38rem .75rem;border-radius:6px;border:none;background:var(--gold);color:white;font-family:'Lato',sans-serif;font-size:.8rem;cursor:pointer;}
.color-picker-row{display:flex;gap:5px;flex-wrap:wrap;margin-top:.5rem;}
.cp-swatch{width:20px;height:20px;border-radius:4px;cursor:pointer;border:2px solid transparent;}
.cp-swatch.selected{border-color:var(--td);}
.save-indicator{position:fixed;bottom:1.2rem;right:1.2rem;font-size:.73rem;color:var(--tl);background:white;border:1px solid var(--cream-d);border-radius:20px;padding:.28rem .75rem;opacity:0;transition:opacity .3s;z-index:200;}
.save-indicator.show{opacity:1;}
@supports(padding:max(0px)){
  .topbar{padding-top:max(.8rem,env(safe-area-inset-top));}
  .app{padding-bottom:max(5rem,calc(env(safe-area-inset-bottom) + 4rem));}
}
