:root{--bg:#f7f5f0;--card:#ffffff;--ink:#22262a;--muted:#6b7280;--accent:#7c2d12;--accent-ink:#ffffff;--green:#2e9e44;--amber:#e8a13a;--red:#d64541;--border:#d8d4cc}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}a{color:var(--accent)}button{font:inherit;padding:.6rem 1.1rem;border:1px solid var(--accent);border-radius:8px;background:var(--accent);color:var(--accent-ink);cursor:pointer;min-height:44px}button:disabled{opacity:.6;cursor:default}button.secondary{background:transparent;color:var(--accent)}button.danger{background:transparent;border-color:var(--red);color:var(--red)}.bulk-actions{gap:.5rem}.bulk-actions,.picker-row{display:flex;flex-wrap:wrap;margin-top:.5rem}.picker-row{align-items:center;gap:.6rem}input,textarea{font:inherit;padding:.6rem .7rem;border:1px solid var(--border);border-radius:8px;width:100%;min-height:44px;background:var(--card)}label{display:block;margin-bottom:.9rem;font-weight:600}label input{margin-top:.3rem;font-weight:400}.auth-page{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem}.app-logo{width:clamp(110px,28vw,170px);height:auto;border-radius:14px;margin-bottom:1rem}.app-name{font-size:clamp(2rem,8vw,3.2rem);font-weight:800;letter-spacing:-.02em;margin:0 0 1.5rem;text-align:center;color:var(--accent)}.login-title{font-size:1.4rem;margin:0 0 1.2rem;text-align:center}.auth-form{width:100%;max-width:360px;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1.4rem}.auth-alt{margin-top:1.2rem}.form-error{color:var(--red);font-weight:600;margin:0 0 .8rem}.password-note{margin:-.35rem 0 .9rem;font-size:.8rem;color:var(--muted)}.password-field{position:relative;display:block}.password-toggle{position:absolute;right:.25rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;min-height:0;padding:.4rem;border:none;border-radius:8px;background:transparent;color:var(--muted)}.password-toggle:hover{color:var(--accent)}.login-note{max-width:420px;margin:1.2rem auto 0;text-align:center;font-size:.85rem;font-weight:700;color:var(--amber)}.locate-btn{position:absolute;right:.5rem;bottom:2.6rem;z-index:1000;display:flex;align-items:center;justify-content:center;width:44px;min-height:44px;padding:0;background:var(--card);color:var(--accent);border:1px solid var(--border);border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.25)}.locate-btn:disabled{color:var(--muted)}.locate-msg{position:absolute;right:.5rem;bottom:5.2rem;z-index:1000;max-width:min(20rem,calc(100vw - 3rem));border:1px solid var(--border);border-radius:8px;padding:.45rem .65rem;font-size:.8rem;box-shadow:0 1px 4px rgba(0,0,0,.25)}.locate-msg,.topbar{background:var(--card)}.topbar{display:flex;justify-content:space-between;gap:1rem;padding:.5rem 1rem;border-bottom:1px solid var(--border);position:-webkit-sticky;position:sticky;top:0;z-index:1100}.brand,.topbar{align-items:center}.brand{display:inline-flex;gap:.45em;font-weight:800;color:var(--accent);text-decoration:none;font-size:1.05rem}.brand-logo{height:1.2em;width:auto;border-radius:3px}.topbar-nav{display:flex;gap:.9rem;align-items:center}.topbar-nav a{text-decoration:none;font-weight:600}.who{color:var(--muted);font-size:.9rem}.map-page{height:100dvh;display:flex;flex-direction:column}.map-wrap{flex:1 1;position:relative}.map{inset:0;z-index:1}.map,.map-legend{position:absolute}.map-legend{z-index:1000;bottom:1rem;left:1rem;display:flex;gap:.8rem;align-items:center;background:var(--card);border:1px solid var(--border);border-radius:8px;padding:.45rem .7rem;font-size:.85rem;box-shadow:0 1px 4px rgba(0,0,0,.15)}.map-legend .count{color:var(--muted);margin-left:.3rem}.dot{display:inline-block;width:12px;height:12px;border-radius:50%;margin-right:.3rem}.dot.green{background:var(--green)}.dot.amber{background:var(--amber)}.dot.red{background:var(--red)}.map-legend{flex-wrap:wrap;max-width:calc(100vw - 2rem)}.heat-scale{display:inline-flex;align-items:center;gap:.4rem}.heat-bar{display:inline-block;width:80px;height:10px;border-radius:5px;background:linear-gradient(90deg,#d64541,#e0642f,#e8a13a,#8fbf4d,#2e9e44)}.view-toggle{display:flex;margin-left:.3rem}.view-toggle button{padding:.25rem .7rem;min-height:0;border-radius:0;font-size:.85rem;background:transparent;color:var(--accent)}.view-toggle button+button{border-left:none}.view-toggle button:first-child{border-radius:6px 0 0 6px}.view-toggle button:last-child{border-radius:0 6px 6px 0}.view-toggle button.active{background:var(--accent);color:var(--accent-ink)}.pint-marker{background:transparent;border:none}.pint-marker svg{display:block;filter:drop-shadow(0 1px 2px rgba(0,0,0,.4))}.pub-popup-link{display:inline-block;padding:.4rem .5rem;font-weight:600;font-size:1rem}.pub-popup{display:flex;flex-direction:column;gap:.55rem;min-width:156px}.pub-popup-actions{display:flex;gap:.4rem}.pub-popup-actions button{flex:1 1;min-height:2.75rem;padding:.35rem .5rem;font-size:.95rem;font-weight:600}.list-page{padding:1rem;max-width:900px;margin:0 auto}.list-page h1{margin:.5rem 0 1rem}.list-search{display:flex;align-items:center;gap:.6rem;margin-bottom:.9rem}.search-field{position:relative;flex:1 1;max-width:26rem}.search-field input{width:100%;padding-right:2.75rem}.search-clear{position:absolute;top:50%;right:.4rem;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:34px;min-height:34px;padding:0;border:none;border-radius:8px;background:transparent;color:var(--muted)}.search-clear:not(:disabled):hover{color:var(--red)}.search-label{font-weight:600}.search-empty{text-align:center;color:var(--muted);font-style:italic;padding:1.2rem .5rem}.list-controls{justify-content:space-between;gap:1rem;margin-bottom:1rem}.checkbox,.list-controls{display:flex;align-items:center}.checkbox{gap:.4rem;font-weight:400}.checkbox input{width:auto;min-height:0}.pub-table{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--border);border-radius:12px;overflow:hidden}.pub-table td,.pub-table th{text-align:left;padding:.6rem .7rem;border-bottom:1px solid var(--border)}.pub-table tr.inactive td{color:var(--muted);text-decoration:line-through}.th-sort{display:inline-flex;align-items:center;gap:.35em;background:none;border:none;padding:0;margin:0;font:inherit;font-weight:700;color:inherit;cursor:pointer}.sort-arrow{font-size:.75em;color:var(--muted)}.badge{display:inline-block;padding:.15rem .55rem;border-radius:999px;font-size:.75rem;font-weight:700;color:#fff}.badge.green{background:var(--green)}.badge.amber{background:var(--amber)}.badge.red{background:var(--red)}.badge.inactive{background:#6b7280}.row-actions{display:flex;gap:.4rem}.row-actions button{min-height:0;padding:.3rem .6rem;font-size:.85rem}.pub-form{display:grid;grid-template-columns:2fr 1fr 1fr;grid-gap:.6rem;gap:.6rem;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1rem;margin-bottom:1rem;scroll-margin-top:4.5rem}.pub-form button,.pub-form h2,.pub-form input:first-child,.pub-form input:nth-child(4){grid-column:1/-1}.pub-form h2{margin:0 0 .4rem}.detail-page{padding:1rem;max-width:700px;margin:0 auto}.detail-page h1{margin:.5rem 0 .6rem}.address{color:var(--muted)}.detail-section-title{font-size:1.15rem;margin:1rem 0 .3rem}.pub-description{font-size:1rem;white-space:pre-wrap}.muted{color:var(--muted)}.desc-editor .row-actions{margin-top:.5rem}.website-line{word-break:break-all}.row-description{font-size:.8rem;color:var(--muted)}.row-website a{font-size:.8rem}.row-website a,.website-link{color:var(--accent)}.visitors{font-size:1.05rem}.detail-map-wrap{margin-top:1rem;height:260px;border-radius:12px;overflow:hidden;border:1px solid var(--border)}.detail-map{height:100%;width:100%}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.pub-photo{display:block;width:100%;max-height:420px;object-fit:cover;border-radius:12px;border:1px solid var(--border);margin-bottom:.6rem}.photo-picker{position:relative;display:inline-flex;align-items:center;flex-wrap:wrap;gap:.5rem}.photo-picker-menu{display:flex;flex-direction:row;flex-wrap:wrap;gap:.4rem;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:.4rem}.photo-gallery{margin-top:1.2rem}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));grid-gap:.5rem;gap:.5rem;margin-bottom:.8rem}.gallery-thumb{width:100%;aspect-ratio:1;object-fit:cover;border-radius:10px;border:1px solid var(--border)}.visit-editor{margin-top:.5rem}.visit-editor h2{font-size:1.15rem;margin:.8rem 0 .2rem}.visit-note{margin:0 0 .6rem;color:var(--muted);font-size:.9rem}.visit-checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(10rem,1fr));grid-gap:.35rem .9rem;gap:.35rem .9rem}.visit-check{margin:0}.visit-check .visit-short,.visit-you{font-weight:600}.visit-you{color:var(--accent)}.visit-count{margin-top:.6rem;color:var(--muted);font-size:.9rem}.edit-actions{margin-top:1.2rem}@media (max-width:600px){.pub-form{grid-template-columns:1fr 1fr}.pub-table td:nth-child(2),.pub-table th:nth-child(2){display:none}}.picker-overlay{position:fixed;inset:0;z-index:2000;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:1rem}.picker-modal{background:var(--card);border-radius:12px;padding:1rem;width:min(640px,96vw);max-height:92dvh;display:flex;flex-direction:column;gap:.5rem}.picker-modal h2{margin:0}.picker-hint{margin:0;color:var(--muted);font-size:.85rem}.picker-map{position:relative;height:min(55vh,460px);border:1px solid var(--border);border-radius:8px;overflow:hidden}.picker-map-canvas{position:absolute;inset:0}.picker-address{min-height:1.2rem;font-size:.9rem;margin:0}.picker-actions{display:flex;justify-content:flex-end;gap:.6rem}.pick-marker{background:transparent;border:none}.address-row{display:flex;gap:.4rem}.address-row input{flex:1 1;min-width:0}.pub-form-add{display:flex;flex-direction:column;align-items:stretch}.pub-form-add>.pub-form-row{display:flex;gap:.6rem}.pub-form-add>.pub-form-row>*{flex:1 1;min-width:0}.pub-form-add>button[type=submit]{align-self:flex-start}.admin-log-link{margin:0 0 1rem}.admin-log-link a{display:inline-block;padding:.6rem 1.1rem;border:1px solid var(--accent);border-radius:8px;background:var(--accent);color:var(--accent-ink);text-decoration:none;font-weight:700}.audit-log-table td{font-size:.85rem;vertical-align:top}.audit-log-table .audit-ts{white-space:nowrap;color:var(--muted)}.pagination{display:flex;align-items:center;justify-content:center;gap:1rem;margin:1rem 0}.page-link{display:inline-block;padding:.45rem .9rem;border:1px solid var(--accent);border-radius:8px;background:var(--card);color:var(--accent);text-decoration:none;font-weight:700}.page-link.disabled{border-color:var(--border);color:var(--muted);background:transparent}.page-position{color:var(--muted)}.photo-full{display:block;width:100%;height:auto;border-radius:12px;margin:.5rem 0 1rem}.photo-full,.photo-info-card{border:1px solid var(--border);background:var(--card)}.photo-info-card{border-radius:12px;padding:1rem}.photo-info-card h1{font-size:1.25rem;margin:0 0 .5rem}.photo-info-card .meta-table{width:100%;border-collapse:collapse;margin:0 0 1rem}.photo-info-card .meta-table:last-of-type{margin-bottom:.75rem}.photo-info-card .meta-table caption{caption-side:top;text-align:left;font-weight:700;color:var(--muted);padding:.4rem .5rem}.photo-info-card .meta-table td,.photo-info-card .meta-table th{padding:.45rem .5rem;border-bottom:1px solid var(--border);vertical-align:top}.photo-info-card .meta-table tr:last-child td,.photo-info-card .meta-table tr:last-child th{border-bottom:none}.photo-info-card .meta-table th{text-align:left;font-weight:700;color:var(--muted);white-space:nowrap;width:1%}.photo-info-card .meta-table td{text-align:right;word-break:break-word}.mono{font-family:ui-monospace,monospace;font-size:.85em;word-break:break-all}.photo-details-form{border-top:1px solid var(--border);padding-top:.75rem}.photo-details-form label{display:block;font-weight:700;margin-bottom:.4rem}.photo-details-form textarea{width:100%;margin-top:.3rem;font:inherit;resize:vertical}.photo-details-status{align-self:center;color:var(--muted)}.photo-delete-row{display:flex;gap:.5rem;align-items:center;border-top:1px solid var(--border);padding-top:.75rem;margin-top:.75rem}.photo-delete-question{font-weight:700;margin-right:.25rem}.back-link{font-weight:700}.map-add-menu{position:absolute;z-index:1000;transform:translate(6px,6px);background:var(--card);border:1px solid var(--border);border-radius:10px;padding:.3rem;box-shadow:0 4px 14px rgba(0,0,0,.25)}a.secondary{display:inline-block;font:inherit;line-height:1.2;text-decoration:none;text-align:center;padding:.6rem 1.1rem;border:1px solid var(--accent);border-radius:8px;background:transparent;color:var(--accent);min-height:44px}.checkin-form{max-width:26rem}.checkin-users{list-style:none;margin:0 0 1rem;padding:0}.checkin-users li{margin:0}.checkin-users label{display:flex;align-items:center;gap:.6rem;min-height:44px;border-bottom:1px solid var(--border);cursor:pointer}.checkin-users input[type=checkbox]{width:1.25rem;height:1.25rem;accent-color:var(--accent);margin:0}.checkin-status{color:var(--red);align-self:center}.checkins-table td{vertical-align:top}.checkin-time-edit{font:inherit;padding:.2rem .4rem;border:1px dashed var(--border);border-radius:6px;background:transparent;color:inherit;cursor:pointer;min-height:0}.checkin-time-form label{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.checkin-time-form input[type=datetime-local]{font:inherit;padding:.4rem .6rem;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--ink)}