:root {
  --ink:#282c32; --muted:#66717b; --paper:#f6f7f9; --surface:#fff; --line:#e1e4e9;
  --accent:#ad3b5f; --accent-dark:#842443; --rose:#f9eaf0; --teal:#256c64;
  --focus:#175fbb; --header-h:72px; --nav-h:0px;
  color-scheme:light;
}
*{box-sizing:border-box;letter-spacing:0}
[hidden]{display:none!important}
html{scroll-padding-top:90px}
body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.55 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
a{color:var(--accent-dark);text-decoration:none}
button,input,textarea,select{font:inherit}
button,a,input,textarea,select,summary{-webkit-tap-highlight-color:transparent}
button,.button{display:inline-flex;gap:9px;align-items:center;justify-content:center;min-height:44px;padding:10px 18px;border:1px solid transparent;border-radius:7px;background:var(--accent);color:#fff;font-weight:650;cursor:pointer;text-decoration:none;line-height:1.3}
button:hover,.button:hover{background:var(--accent-dark)}
button:disabled{opacity:.5;cursor:default}
button.secondary,.button.secondary{background:var(--surface);color:var(--ink);border-color:var(--line)}
button.secondary:hover,.button.secondary:hover{background:#edf0f3}
:focus-visible{outline:3px solid var(--focus);outline-offset:3px}
.icon{width:20px;height:20px;flex-shrink:0;vertical-align:middle}
.icon-button{display:inline-flex;align-items:center;justify-content:center;padding:0;width:44px;height:44px;min-height:44px;flex-shrink:0;background:var(--surface);border:1px solid var(--line);color:var(--ink)}
.icon-button:hover{color:var(--accent);background:var(--rose)}
.sr-only,.skip:not(:focus){position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.skip:focus{position:fixed;top:10px;left:10px;z-index:5000;background:white;padding:12px}
.site-header{height:var(--header-h);display:flex;align-items:center;justify-content:space-between;gap:20px;padding:0 28px;background:var(--surface);border-bottom:1px solid var(--line);position:relative;z-index:1500}
.brand{display:flex;gap:10px;align-items:center;color:var(--ink);font:600 22px/1.15 Georgia,serif;min-width:0}
.brand>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px}
.brand-mark{display:flex;justify-content:center;align-items:center;width:38px;height:38px;background:var(--rose);border-radius:50%;color:var(--accent);flex-shrink:0}
.desktop-nav,.header-actions{display:flex;gap:10px;align-items:center}
.desktop-nav a{display:flex;align-items:center;gap:8px;min-height:44px;padding:10px 16px;color:var(--muted);font-weight:600;border-radius:7px}
.desktop-nav a[aria-current],.desktop-nav a:hover{background:var(--rose);color:var(--accent-dark)}
.account-menu{position:relative}
.account-menu>summary{list-style:none}
.account-menu>summary::-webkit-details-marker{display:none}
.account-dropdown{position:absolute;right:0;top:52px;width:240px;background:var(--surface);box-shadow:0 8px 32px #1d273026;border:1px solid var(--line);border-radius:8px;padding:8px;z-index:1800}
.account-name{padding:12px;overflow-wrap:anywhere;font-weight:700;border-bottom:1px solid var(--line);margin-bottom:6px}
.account-name small{display:block;font-size:12px;color:var(--muted);font-weight:400}
.account-dropdown a,.menu-action{width:100%;display:flex;gap:10px;align-items:center;justify-content:flex-start;min-height:44px;padding:10px 12px;background:transparent;color:var(--ink);font-weight:500}
.account-dropdown a:hover,.menu-action:hover{background:var(--rose);border-radius:6px}
.mobile-nav{display:none}
.notice{position:relative;display:flex;gap:10px;max-width:1120px;margin:12px auto;padding:12px 18px;background:#e5f2ed;color:#174a3b;border-left:3px solid #2c7e60;border-radius:0 5px 5px 0;z-index:1600}
.notice.error,.error,.errorlist{color:#9c243b}
.notice.error{background:#fff0f3;border-color:#a42c47}
body[data-view="map"] .notice{position:fixed;top:var(--header-h);left:20px;right:20px;max-width:600px;margin:10px auto}
.eyebrow,.date{color:var(--accent-dark);font-size:12px;font-weight:650}
.eyebrow{margin:0 0 10px;text-transform:uppercase}
.muted,.hint{color:var(--muted)}
.hint{font-size:14px}
h1,h2,h3,p{overflow-wrap:anywhere}
h1{font:400 40px/1.15 Georgia,serif;margin:0}
h2{font-size:21px;line-height:1.3}
h3{font-size:17px}
input,textarea,select{width:100%;min-width:0;min-height:46px;border:1px solid #aab3be;border-radius:6px;color:var(--ink);background:var(--surface);padding:10px 12px;font-size:16px}
input[type=checkbox]{width:22px;min-height:22px;accent-color:var(--accent)}
textarea{resize:vertical}
input:focus,textarea:focus,select:focus{outline:2px solid var(--focus);outline-offset:1px}
.search-form{position:relative;display:flex;gap:6px;padding:0}
.search-form input{padding-right:52px;border-color:var(--line);background:#f7f8fa}
.search-form .icon-button{position:absolute;right:2px;top:1px;border:none;background:transparent}
.map-page{position:relative;display:grid;grid-template-columns:355px minmax(0,1fr);height:calc(100dvh - var(--header-h));min-height:440px}
.map-sidebar{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--surface);border-right:1px solid var(--line);z-index:600}
.collection-heading{padding:28px 24px 20px}
.collection-heading h1{font-size:28px}
.collection-heading p:last-child{margin:10px 0 0;color:var(--muted);font-size:14px}
.sheet-toggle{display:none}
.sheet-body{min-height:0;display:flex;flex-direction:column}
.map-sidebar .search-form{margin:0 18px 12px}
.memory-list{overflow-y:auto;overscroll-behavior:contain;min-height:0;padding:0 10px 20px;scrollbar-width:thin}
.memory-list-item{display:flex;gap:12px;align-items:center;min-height:105px;padding:14px 8px;border-bottom:1px solid var(--line);color:var(--ink);border-radius:5px}
.memory-list-item:hover{background:#f8edf1}
.memory-list-item>img,.memory-thumb-placeholder{width:76px;height:76px;border-radius:6px;object-fit:cover;flex-shrink:0}
.memory-thumb-placeholder{display:flex;align-items:center;justify-content:center;background:#e7f0ed;color:var(--teal)}
.memory-list-text{display:grid;gap:3px;min-width:0;flex:1}
.memory-list-text strong{font-size:15px;font-weight:650;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.35}
.memory-list-text .muted{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.memory-list-item>.icon{width:16px;color:#89929a}
.map-stage{position:relative;min-width:0;min-height:0;z-index:0}
.map-canvas{height:100%;width:100%;background:#dbe6e5}
.map-toolbar{position:absolute;top:16px;right:16px;z-index:700;display:flex;gap:8px;align-items:center}
.map-toolbar .icon-button{box-shadow:0 2px 6px #1f313317}
.map-toolbar button[aria-pressed=true]{background:var(--accent);color:#fff}
.map-status{background:white;padding:10px 14px;border-radius:6px;font-size:14px;max-width:210px;box-shadow:0 2px 8px #0002}
.leaflet-container{font:14px/1.4 system-ui,sans-serif}
.leaflet-control-attribution{max-width:100%}
.leaflet-touch .leaflet-bar a{width:40px;height:40px;line-height:40px}
.leaflet-bar,.leaflet-touch .leaflet-bar{border:1px solid #ccd4d4;border-radius:7px;box-shadow:0 2px 6px #1f313317}
.leaflet-popup-content{margin:16px;min-width:170px;max-width:250px}
.leaflet-popup-content-wrapper{border-radius:8px}
.map-popup{display:grid;gap:7px;color:var(--ink)}
.map-popup a{padding:8px 0;color:var(--accent-dark);font-weight:700;min-height:44px;display:flex;align-items:center;border-top:1px solid var(--line)}
.map-popup small{color:var(--muted)}
.memory-marker{background:var(--accent);border:3px solid white;border-radius:50%;color:white;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;box-shadow:0 2px 8px #24333b55}
.memory-marker.single{background:var(--teal)}
.content-wrap{width:min(1120px,calc(100% - 64px));margin:38px auto 60px}
.page-heading{display:flex;gap:24px;align-items:center;justify-content:space-between;margin-bottom:26px}
.page-heading p.muted{margin-bottom:0}
.collection-page>.search-form{max-width:430px;margin:0 0 30px}
.memory-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.memory-card{background:var(--surface);border:1px solid var(--line);border-radius:8px;overflow:hidden;min-width:0;transition:box-shadow .15s}
.memory-card:hover{box-shadow:0 6px 22px #222b3414}
.memory-card-link{display:block;height:100%;color:var(--ink)}
.memory-card-image{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;height:auto}
.image-placeholder{display:flex;align-items:center;justify-content:center;background:#e6eeeb;color:var(--teal)}
.image-placeholder .icon{width:36px;height:36px}
.memory-card-content{padding:18px}
.card-meta{display:flex;gap:8px;align-items:center;justify-content:space-between;flex-wrap:wrap;min-height:24px}
.badge{display:inline-block;padding:3px 7px;background:#edf1f5;color:#465361;font-size:11px;border-radius:4px;font-weight:600;line-height:1.4}
.memory-card h2{font:400 24px/1.2 Georgia,serif;margin:12px 0 8px}
.memory-card p{display:flex;gap:5px;align-items:flex-start;color:var(--muted);margin:0 0 20px;font-size:14px}
.memory-card p .icon{width:16px;height:20px}
.card-footer{display:flex;justify-content:space-between;align-items:center;gap:6px;color:var(--muted);font-size:12px;border-top:1px solid var(--line);padding-top:12px}
.card-footer>span{color:var(--accent-dark);display:flex;gap:3px;align-items:center}
.section-heading{margin:36px 0 20px}
.empty-state{padding:40px 20px;text-align:center}
.empty-state h2{font:400 25px/1.3 Georgia,serif}
.empty-icon{display:inline-flex;color:var(--teal);padding:16px;background:#e7f0ed;border-radius:8px}
.empty-icon .icon{width:26px;height:26px}
.text-link{text-decoration:underline;text-underline-offset:4px}
.back{display:inline-flex;gap:6px;align-items:center;min-height:44px;font-size:14px;color:var(--muted)}
.detail-topline{display:flex;gap:12px;align-items:center;justify-content:space-between}
.memory-heading{padding:28px 0 10px}
.memory-heading h1{max-width:850px;font-size:44px}
.detail-meta{display:flex;align-items:center;gap:14px;margin-bottom:12px;flex-wrap:wrap}
.detail-meta .date,.place{display:flex;align-items:center;gap:8px}
.place{color:var(--muted);font-size:17px;margin:15px 0}
.prose{font-size:18px;line-height:1.8;max-width:760px}
.prose p{white-space:normal}
.contribution-action{margin:20px 0 28px}
.contributions{max-width:760px;margin:24px 0}
.contribution{padding:18px 0;border-top:1px solid var(--line)}
.contribution header{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 16px;font-size:14px}
.contribution time{color:var(--muted);font-size:12px}
.contribution .prose{font-size:17px}
.gallery{margin-top:30px}
.gallery-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;border-top:1px solid var(--line);padding-top:15px;margin-bottom:18px}
.photo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}
.photo-grid figure{margin:0;min-width:0}
.photo-open{display:block;position:relative;width:100%;border:0;padding:0;background:#e7e9ee;overflow:hidden;border-radius:7px}
.photo-open img{width:100%;aspect-ratio:3/2;object-fit:cover;display:block}
.photo-expand{position:absolute;bottom:10px;right:10px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:5px;background:#fff;color:var(--ink);box-shadow:0 2px 5px #0002}
.photo-grid figcaption{padding:8px 0 0;font-size:14px;color:var(--muted)}
.photo-settings{border-top:1px solid var(--line);margin-top:10px;font-size:14px}
.photo-settings>summary{min-height:44px;display:flex;align-items:center;gap:7px;cursor:pointer;color:var(--muted)}
.photo-tools{display:grid;gap:14px;padding-bottom:14px}
.photo-controls,.inline-field{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.inline-field{flex-wrap:nowrap}
.caption-form label{display:block;margin-bottom:5px}
.danger-text{background:transparent;color:#a22d40;padding:8px 0;font-weight:500}
.danger-text:hover{background:transparent;color:#72152b;text-decoration:underline}
.delete-memory{border-top:1px solid var(--line);padding-top:16px;margin-top:40px;color:var(--muted);font-size:14px}
.delete-memory summary{cursor:pointer;min-height:44px}
#reorder-photos{margin-top:22px}
.lightbox{border:0;padding:18px;background:#111820;color:#fff;width:100vw;height:100dvh;max-width:none;max-height:none;margin:0}
.lightbox::backdrop{background:#111820}
.lightbox[open]{display:flex;flex-direction:column}
.lightbox-header{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-shrink:0}
.lightbox .icon-button{background:#ffffff16;border-color:#ffffff30;color:white}
.lightbox-stage{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;gap:16px;min-height:0;flex:1;padding:16px 0}
.lightbox-stage img{width:100%;height:100%;min-height:0;object-fit:contain;touch-action:pan-y pinch-zoom}
#lightbox-caption{margin:8px auto 0;max-width:760px;max-height:15dvh;overflow:auto;text-align:center;font-size:14px;color:#e3e7ec}
.editor-page{max-width:800px}
.editor-page .page-heading{margin-top:16px}
.editor-form{display:grid;gap:0}
.form-section{padding:24px 0;border-bottom:1px solid var(--line)}
.form-section:first-of-type{padding-top:0}
.form-section h2{display:flex;align-items:center;gap:12px;margin:0 0 24px;font-weight:650}
.form-section h2>span{color:var(--accent);font-size:13px;font-weight:600}
.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.form-field{display:grid;gap:7px;min-width:0;margin-bottom:18px}
.form-field label{font-weight:600;font-size:14px}
.field-wide{grid-column:1/-1}
.editor-map{height:280px;border:1px solid var(--line);border-radius:7px;margin:4px 0 20px;background:#dbe6e5;z-index:0}
.date-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;max-width:440px}
.section-label{margin:0 0 12px;color:var(--muted);font-size:14px}
.upload-picker{display:flex;flex-direction:column;align-items:center;gap:9px;padding:24px;background:var(--surface);border:1px dashed #97a4b3;border-radius:8px;cursor:pointer;text-align:center}
.upload-picker>.icon{width:30px;height:30px;color:var(--accent)}
.upload-picker>span{font-size:13px;color:var(--muted)}
.upload-picker input{background:transparent;border:0;font-size:14px;max-width:380px;padding:6px}
.upload-picker input::file-selector-button{border:1px solid var(--line);padding:8px 12px;border-radius:5px;background:#f1f3f6;color:var(--ink);margin-right:10px;cursor:pointer}
.upload-previews,.existing-photos{display:flex;gap:12px;flex-wrap:wrap;margin-top:16px}
.upload-previews img,.existing-photos img{width:88px;height:88px;object-fit:cover;border-radius:6px}
.upload-previews p{width:100%;font-size:13px;color:var(--muted);margin:0}
.save-bar{position:sticky;bottom:0;display:flex;gap:12px;align-items:center;justify-content:flex-end;z-index:800;padding:16px 0;background:#f6f7f9f5;border-top:1px solid var(--line)}
.errorlist{padding:12px 12px 12px 30px;background:#fff0f3;border-radius:6px}
.error{font-size:13px}
.narrow{max-width:600px}
.panel{padding:24px 0}
.panel label{display:grid;gap:8px;margin-bottom:20px;font-weight:600}
.panel .hint{font-weight:400;font-size:13px}
.login-shell{max-width:420px;min-height:100dvh;margin:auto;padding:60px 24px 40px;display:flex;flex-direction:column;justify-content:center;gap:30px}
.login-brand{text-align:center}
.login-brand .brand-mark{margin:0 auto 18px;width:48px;height:48px}
.login-brand h1{font-size:42px}
.login-brand p:last-child{color:var(--muted);margin:16px 0 0}
.login-form{display:grid;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:28px}
.login-form h2{margin:0 0 10px;font-size:22px}
.login-form label{font-size:14px;font-weight:600}
.login-form input{margin-bottom:8px}
.password-field{display:flex;position:relative}
.password-field input{padding-right:48px}
.password-field button{position:absolute;right:1px;top:1px;border:0;background:transparent}
.login-submit{margin-top:8px;justify-content:space-between}
.login-private{display:flex;gap:6px;align-items:center;justify-content:center;color:var(--muted);font-size:12px;margin:10px 0 0}
.login-private .icon{width:14px;height:14px}
@media(max-width:1000px){
  .map-page{grid-template-columns:310px minmax(0,1fr)}
  .site-header{padding:0 20px;gap:12px}.brand{font-size:20px}.brand>span:last-child{max-width:220px}
  .desktop-add{font-size:14px;padding:10px 12px}.desktop-nav a{padding:10px}
  .memory-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:760px){
  :root{--header-h:60px;--nav-h:calc(66px + env(safe-area-inset-bottom,0px))}
  .signed-in{padding-bottom:var(--nav-h)}
  .site-header{padding:0 16px;gap:8px}.brand{font-size:20px}.brand>span:last-child{max-width:calc(100vw - 122px)}
  .brand-mark{width:32px;height:32px}.desktop-nav,.desktop-add{display:none}
  .account-menu>summary{width:40px;height:44px}.account-dropdown{right:0}
  .mobile-nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));position:fixed;left:0;right:0;bottom:0;height:var(--nav-h);padding:5px 12px calc(5px + env(safe-area-inset-bottom,0px));background:#fff;border-top:1px solid var(--line);z-index:1700}
  .mobile-nav a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--muted);font-size:11px;min-height:48px;border-radius:6px}
  .mobile-nav a[aria-current]{background:var(--rose);color:var(--accent-dark);font-weight:700}
  h1{font-size:32px}.content-wrap{width:calc(100% - 32px);margin:24px auto 32px}
  .map-page{height:calc(100dvh - var(--header-h) - var(--nav-h));min-height:260px;display:block}
  .map-stage,.map-canvas{width:100%;height:100%}
  .map-sidebar{position:absolute;bottom:12px;left:12px;right:12px;max-height:70%;border:1px solid var(--line);border-radius:8px;box-shadow:0 4px 20px #1f31331a}
  .collection-heading{display:none}
  .sheet-toggle{display:flex;width:100%;min-height:72px;align-items:center;justify-content:space-between;padding:12px 18px;background:white;color:var(--ink);border-radius:8px;text-align:left}
  .sheet-toggle:hover{background:#f9fafb}.sheet-toggle>span{display:grid;gap:2px}.sheet-toggle small{font-size:12px;color:var(--muted);font-weight:400}
  .map-sidebar:not(.expanded) .sheet-body{display:none}
  .map-sidebar.expanded .sheet-toggle>.icon{transform:rotate(180deg)}
  .map-sidebar.expanded .sheet-body{display:flex;overflow:hidden}
  .memory-list{max-height:40dvh;padding-bottom:8px}
  .map-sidebar .search-form{margin:0 12px 6px}
  .memory-list-item{min-height:92px}.memory-list-item>img,.memory-thumb-placeholder{width:60px;height:60px}
  .map-toolbar{top:12px;right:12px;gap:6px}
  .map-status{position:absolute;top:54px;right:0;width:210px;max-width:calc(100vw - 32px)}
  .map-stage .leaflet-bottom{bottom:100px}.map-stage .leaflet-control-attribution{font-size:10px;max-width:220px}
  .page-heading{gap:16px;align-items:flex-start;flex-direction:column;margin-bottom:24px}
  .page-heading>.button{align-self:flex-start}
  .collection-page>.search-form{max-width:none;margin-bottom:22px}
  .memory-cards{gap:16px}
  .memory-card h2{font-size:22px}.memory-card-content{padding:15px}
  .memory-heading{padding-top:22px}.memory-heading h1{font-size:34px;line-height:1.18}
  .detail-topline .button{font-size:14px;padding:10px 12px}.back{font-size:13px}
  .prose{font-size:17px;line-height:1.75}
  .gallery{margin-top:24px}.photo-grid{gap:20px;grid-template-columns:1fr}
  .photo-open img{aspect-ratio:4/3}.photo-expand{width:36px;height:36px}
  .lightbox{padding:calc(12px + env(safe-area-inset-top,0px)) 10px calc(12px + env(safe-area-inset-bottom,0px))}
  .lightbox-stage{gap:0;position:relative;grid-template-columns:1fr}
  .lightbox-stage button{position:absolute;z-index:2;bottom:12px;background:#18232eab}
  #lightbox-prev{left:0}#lightbox-next{right:0}
  .lightbox-stage img{grid-column:1;grid-row:1}
  .field-grid{gap:12px}.editor-map{height:240px}
  .form-section{padding:22px 0}.form-section h2{font-size:20px;margin-bottom:20px}
  .date-fields{gap:10px}.upload-picker{padding:20px 12px}.upload-picker input{width:100%}
  .save-bar{bottom:var(--nav-h);padding:12px 0;gap:10px}.save-bar>*{flex:1}
  .login-shell{padding:30px 20px;gap:24px}.login-brand h1{font-size:36px}.login-form{padding:24px}
}
@media(max-width:480px){
  .memory-cards{grid-template-columns:1fr}
  .field-grid:not(.coordinate-fields){grid-template-columns:1fr;gap:0}
  .coordinate-fields input{padding:10px 8px}
  .login-shell{min-height:100dvh}.login-brand p:last-child{font-size:15px}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}
