@import "https://fonts.googleapis.com/css2?family=Caveat:wght@400;600;700&family=Kalam:wght@400;700&family=Inter:wght@300;400;500;600;700&family=Noto+Sans+JP:wght@400;500;700&family=Klee+One:wght@400;600&display=swap";:root{--ink:#2a2620;--ink-soft:#2a2620b3;--ink-mute:#2a262080;--paper:#faf6ee;--base-bg:#ece7dc;--accent:#7a9461;--accent-soft:#7a94612e;--line:#2a26202e}*{box-sizing:border-box}html,body{background:var(--base-bg);height:100%;color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;padding:0;font-family:Inter,system-ui,-apple-system,sans-serif;overflow:hidden}body{transition:background-color .9s cubic-bezier(.2,.8,.2,1)}body:before{content:"";pointer-events:none;z-index:0;opacity:.6;background-image:radial-gradient(#2a262009 1px,#0000 1.5px);background-size:18px 18px;position:fixed;inset:0}#root{z-index:1;height:100%;position:relative}.app-shell{width:100%;height:100%;position:absolute;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}@keyframes lightboxIn{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes prefIn{0%{opacity:0;transform:translateY(1.5px)}to{opacity:1;transform:translateY(0)}}@keyframes prefPulse{0%,to{opacity:.4}50%{opacity:.85}}@keyframes thumbIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes inkDraw{0%{stroke-dashoffset:160px;opacity:0}15%{opacity:.9}60%{stroke-dashoffset:0;opacity:.9}85%{opacity:0}to{stroke-dashoffset:0;opacity:0}}@keyframes dotPulse{0%,80%,to{opacity:.2;transform:translateY(0)}40%{opacity:.9;transform:translateY(-2px)}}.map-loading{flex-direction:column;justify-content:center;align-items:center;gap:12px;width:100%;height:100%;display:flex}.map-loading-svg{width:88px;height:88px}.map-loading-path{stroke-dasharray:160;animation:2.4s ease-in-out infinite inkDraw}.map-loading-text{color:var(--ink-mute);letter-spacing:.01em;align-items:baseline;font-family:Caveat,cursive;font-size:18px;font-style:italic;display:inline-flex}.map-loading-text .dots{align-items:center;gap:3px;margin-left:4px;display:inline-flex}.map-loading-text .dots span{background:var(--ink-mute);border-radius:50%;width:4px;height:4px;animation:1.2s ease-in-out infinite dotPulse;display:inline-block}.map-loading-text .dots span:nth-child(2){animation-delay:.15s}.map-loading-text .dots span:nth-child(3){animation-delay:.3s}.card{-webkit-backdrop-filter:blur(14px)saturate(140%);backdrop-filter:blur(14px)saturate(140%);background:#faf6eec7;border:1px solid #fff9;border-radius:12px;box-shadow:inset 0 1px #fff9,0 8px 32px #28241e1a,0 1px 2px #28241e0f}.map-stage{will-change:transform;transition:transform .65s cubic-bezier(.2,.8,.2,1),height .45s,min-height .45s;position:absolute;inset:0}.map-stage.has-dock{transform:translateY(-7%)}.map-frame{transition:top .45s,left .45s,right .45s,bottom .45s;position:absolute;inset:7% 6% 14%}.title-card{z-index:5;max-width:320px;padding:16px 20px;transition:padding .4s,max-width .4s,margin .4s;animation:.5s cubic-bezier(.2,.8,.2,1) slideDown;position:absolute;top:22px;left:24px}.title-card h1{color:var(--ink);letter-spacing:-.01em;margin:0;font-size:22px;font-weight:600;line-height:1.15;transition:font-size .4s}.title-card .sub{color:var(--accent);margin-top:2px;font-family:Klee One,Caveat,cursive;font-size:17px;line-height:1.2}.title-card .intro{color:var(--ink-soft);margin-top:10px;font-size:12.5px;line-height:1.55}.counter-card{z-index:5;cursor:pointer;-webkit-user-select:none;user-select:none;padding:18px 20px 14px;transition:transform .25s,box-shadow .25s,padding .4s,top .4s,bottom .4s,right .4s;animation:.5s cubic-bezier(.2,.8,.2,1) 50ms both slideDown;position:absolute;top:22px;right:24px;overflow:visible}.counter-card:hover{transform:translateY(-2px)rotate(-.6deg);box-shadow:inset 0 1px #fff9,0 14px 36px #28241e24,0 1px 2px #28241e0f}.counter-card .num{transition:transform .25s,color .25s}.counter-card:hover .num{transform:scale(1.06)}.counter-card .row{align-items:baseline;gap:6px;display:flex}.counter-card .num{color:var(--accent);padding:0 2px;font-family:Caveat,cursive;font-size:34px;font-weight:700;line-height:1.3;display:inline-block}.counter-card .of{color:var(--ink-mute);font-variant-numeric:tabular-nums;font-size:13px}.counter-card .label{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-mute);margin-top:2px;font-size:10px;font-weight:600}.counter-card .hint{color:var(--ink-mute);opacity:1;margin-top:6px;font-family:Caveat,cursive;font-size:13px;font-style:italic;transition:opacity .25s}.counter-card:hover .hint{opacity:0}.counter-card .hint .hint-mobile{display:none}@media (hover:none){.counter-card .hint .hint-desktop{display:none}.counter-card .hint .hint-mobile{display:inline}}.recent-dock{z-index:4;align-items:center;gap:14px;max-width:calc(100% - 80px);padding:14px 18px;transition:opacity .35s,transform .35s,padding .4s,margin .4s,max-width .4s,gap .4s;display:flex;position:absolute;bottom:20px;left:50%;overflow:visible;transform:translate(-50%)}.recent-dock.hidden{opacity:0;pointer-events:none;transform:translate(-50%)translateY(20px)}.recent-dock .lbl{letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);flex-shrink:0;font-size:9.5px;font-weight:600}.recent-row{scrollbar-width:none;gap:10px;margin:-8px -6px;padding:8px 6px;display:flex;overflow:auto visible}.recent-row::-webkit-scrollbar{display:none}.recent-chip{cursor:pointer;color:inherit;background:#fff6;border:1px solid #2a262014;border-radius:8px;flex-shrink:0;align-items:center;gap:8px;padding:6px 10px 6px 6px;font-family:inherit;transition:all .25s;display:flex;position:relative}.recent-chip:hover{box-shadow:0 0 0 2px var(--chip-glow,var(--accent)), 0 6px 18px var(--chip-glow-soft,#c4724a59);border-color:#0000;transform:translateY(-2px)}.recent-chip .swatch{background:var(--chip-color);border-radius:5px;flex-shrink:0;width:28px;height:28px;box-shadow:inset 0 0 0 1px #0000000d}.recent-chip .meta{flex-direction:column;min-width:0;display:flex}.recent-chip .meta .pref{color:var(--ink);font-size:11.5px;font-weight:600;line-height:1.1}.recent-chip .meta .loc{color:var(--ink-mute);white-space:nowrap;text-overflow:ellipsis;max-width:110px;font-size:10px;overflow:hidden}.bottom-dock{z-index:6;align-items:stretch;gap:18px;padding:18px 22px;transition:padding .4s,margin .4s,gap .4s;animation:.5s cubic-bezier(.2,.8,.2,1) slideUp;display:flex;position:absolute;bottom:24px;left:5%;right:5%}.bottom-dock .head{border-right:1px solid var(--line);flex-direction:column;flex-shrink:0;justify-content:center;gap:4px;min-width:160px;padding-right:18px;display:flex}.bottom-dock .head .region{letter-spacing:.1em;text-transform:uppercase;color:var(--accent);font-size:10px;font-weight:600}.bottom-dock .head .name{color:var(--ink);font-size:22px;font-weight:600;line-height:1.05}.bottom-dock .head .jp{color:var(--ink-mute);font-family:Noto Sans JP,sans-serif;font-size:14px;font-weight:500}.bottom-dock .photos{scrollbar-width:thin;scrollbar-color:#2a262033 transparent;flex:1;gap:12px;padding:2px;display:flex;overflow-x:auto}.bottom-dock .photos::-webkit-scrollbar{height:6px}.bottom-dock .photos::-webkit-scrollbar-thumb{background:#2a26202e;border-radius:3px}.photo-thumb{cursor:pointer;background:#ffffff80;border:1px solid #0000;border-radius:8px;flex-direction:column;flex-shrink:0;width:220px;transition:transform .25s,box-shadow .25s,width .4s;animation:.45s cubic-bezier(.2,.8,.2,1) both thumbIn;display:flex;overflow:hidden}.photo-thumb:hover{box-shadow:0 12px 28px #28241e2e, 0 0 0 2px var(--accent-soft);transform:translateY(-2px)}.photo-thumb .img{background:var(--photo-color);color:#ffffffb3;background-position:50%;background-size:cover;justify-content:center;align-items:center;height:130px;font-size:11px;font-style:italic;display:flex;position:relative}.photo-thumb .img:after{content:"";background:linear-gradient(#ffffff2e 0%,#0000 30%,#0000001f 100%);position:absolute;inset:0}.photo-thumb .meta{background:#ffffffb3;padding:8px 10px}.photo-thumb .meta .loc{color:var(--ink);font-size:12px;font-weight:600}.photo-thumb .meta .cap{color:var(--ink-soft);margin-top:2px;font-size:11px;font-style:italic;line-height:1.3}.photo-thumb .meta .date{color:var(--ink-mute);letter-spacing:.01em;margin-top:4px;font-family:Caveat,cursive;font-size:13px}.empty-state{color:var(--ink-mute);flex:1;align-items:center;font-family:Caveat,cursive;font-size:18px;font-style:italic;display:flex}.add-photo-btn{border:1px dashed var(--ink-soft);height:36px;color:var(--ink);cursor:pointer;white-space:nowrap;background:#ffffff8c;border-radius:18px;flex-shrink:0;align-self:center;padding:0 14px;font-family:Kalam,cursive;font-size:14px;font-weight:700;transition:all .2s}.add-photo-btn:hover{background:var(--accent);border-color:var(--accent);color:#fff;transform:translateY(-1px)}.add-photo-btn:disabled{opacity:.5;cursor:wait}.drop-overlay{z-index:200;-webkit-backdrop-filter:blur(6px);pointer-events:none;background:#2a26208c;justify-content:center;align-items:center;animation:.15s fadeIn;display:flex;position:fixed;inset:0}.drop-overlay-inner{background:var(--paper);border:2px dashed var(--accent);text-align:center;border-radius:16px;padding:36px 56px;box-shadow:0 20px 60px #0000004d}.drop-overlay-icon{color:var(--accent);font-family:Caveat,cursive;font-size:42px;line-height:1}.drop-overlay-title{color:var(--ink);margin-top:8px;font-size:18px;font-weight:600}.drop-overlay-sub{color:var(--ink-mute);margin-top:4px;font-family:Caveat,cursive;font-size:16px}.lb-edit{font:inherit;color:inherit;resize:none;background:0 0;border:1px dashed #0000;border-radius:6px;width:100%;margin:0 -8px;padding:6px 8px;transition:background .15s,border-color .15s}.lb-edit:hover{background:#fff6;border-color:#2a26202e}.lb-edit:focus{border-color:var(--accent);background:#ffffffb3;outline:none}.lb-edit-loc{color:var(--ink);letter-spacing:-.01em;font-family:Inter,sans-serif;font-size:22px;font-weight:600}.lb-edit-cap{color:var(--ink-soft);margin-top:2px;font-family:Caveat,cursive;font-size:18px}.lb-edit-desc{color:var(--ink);min-height:100px;margin-top:14px;font-size:14px;line-height:1.6}.lb-edit::placeholder{color:#2a262059;font-style:italic}.lb-delete{color:#b4503cd9;cursor:pointer;background:0 0;border:1px dashed #b4503c73;border-radius:6px;align-self:flex-start;margin-top:14px;padding:6px 12px;font-family:Inter,sans-serif;font-size:12px;transition:all .2s}.lb-delete:hover{color:#b4503c;background:#b4503c14}.dock-close{border:1px solid var(--line);cursor:pointer;width:30px;height:30px;color:var(--ink);background:0 0;border-radius:50%;flex-shrink:0;justify-content:center;align-self:flex-start;align-items:center;font-size:16px;transition:all .2s;display:flex}.dock-close:hover{border-color:var(--ink-soft);background:#2a26200f}.lightbox-bg{z-index:100;-webkit-backdrop-filter:blur(8px);background:#1e1a168c;justify-content:center;align-items:center;padding:40px 20px;animation:.3s fadeIn;display:flex;position:fixed;inset:0}.lightbox{background:var(--paper);border-radius:14px;align-items:stretch;max-width:min(1100px,96vw);max-height:92vh;animation:.42s cubic-bezier(.2,.8,.2,1) lightboxIn;display:flex;overflow:hidden;box-shadow:0 30px 80px #0006}.lightbox .photo-large{background:var(--photo-color);flex:auto;justify-content:center;align-items:center;min-width:0;display:flex;position:relative;overflow:hidden}.lightbox .photo-large img{object-fit:contain;width:auto;max-width:100%;height:auto;max-height:92vh;display:block}.lightbox .photo-placeholder{color:#fff9;font-style:italic}@media (width<=720px){.lightbox{flex-direction:column;max-height:96vh}.lightbox .photo-large img{max-height:60vh}}.lightbox .body{flex-direction:column;flex-shrink:0;gap:14px;width:360px;padding:32px 30px;display:flex;overflow-y:auto}@media (width<=720px){.lightbox .body{width:100%}}.lightbox .body .pref{color:var(--accent);text-transform:uppercase;letter-spacing:.1em;font-size:11px;font-weight:600}.lightbox .body h2{color:var(--ink);margin:0;font-size:26px;font-weight:600;line-height:1.1}.lightbox .body .caption{color:var(--ink-soft);font-family:Caveat,cursive;font-size:19px;line-height:1.3}.lightbox .body .taken-on{color:var(--ink-mute);letter-spacing:.02em;margin-top:-2px;font-family:Caveat,cursive;font-size:16px}.lb-edit-date-row{flex-wrap:wrap;gap:8px;display:flex}select.lb-edit-date{color:var(--ink-mute);appearance:auto;cursor:pointer;flex:none;width:auto;min-width:110px;padding:6px 8px;font-family:Caveat,cursive;font-size:16px}select.lb-edit-date:hover{color:var(--ink-soft)}select.lb-edit-date:focus{color:var(--ink)}.lightbox .body .desc{color:var(--ink-soft);text-wrap:pretty;border-top:1px solid var(--line);margin-top:8px;padding-top:14px;font-size:14px;line-height:1.65}.lightbox .body .desc.empty{color:var(--ink-mute);font-style:italic}.lightbox-close{cursor:pointer;width:34px;height:34px;color:var(--ink);z-index:1;background:#faf6eef2;border:0;border-radius:50%;justify-content:center;align-items:center;font-size:18px;transition:transform .2s;display:flex;position:absolute;top:16px;right:16px;box-shadow:0 2px 10px #0003}.lightbox-close:hover{transform:scale(1.05)}.admin-badge{z-index:200;color:#faf6eee6;letter-spacing:.05em;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#2a2620e0;border-radius:20px;align-items:center;gap:10px;padding:6px 10px 6px 14px;font-size:11.5px;font-weight:600;display:flex;position:fixed;bottom:16px;right:16px}.admin-logout{color:#faf6eeb3;cursor:pointer;background:#ffffff1f;border:0;border-radius:12px;padding:4px 10px;font-family:inherit;font-size:11px;transition:background .2s}.admin-logout:hover{color:#fff;background:#ffffff38}.status-toast{z-index:200;color:#faf6ee;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#2a2620eb;border-radius:10px;padding:10px 18px;font-size:13px;font-weight:500;animation:.3s slideUp;position:fixed;bottom:60px;right:16px}.status-toast.error{background:#b43c32eb}.admin-gate{justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.admin-gate-card{flex-direction:column;gap:8px;width:100%;max-width:360px;padding:36px 32px;display:flex}.admin-gate-card h1{color:var(--ink);letter-spacing:-.01em;margin:0;font-size:24px;font-weight:600}.admin-gate-card .sub{color:var(--accent);margin-bottom:4px;font-family:Caveat,cursive;font-size:18px}.gate-form{flex-direction:column;gap:10px;margin-top:12px;display:flex}.gate-input{height:44px;color:var(--ink);background:#ffffffb3;border:1px solid #2a262033;border-radius:8px;outline:none;padding:0 14px;font:15px/1 Inter,sans-serif;transition:border-color .2s}.gate-input:focus{border-color:var(--accent)}.gate-input-err{border-color:#b43c3299!important}.gate-err{color:#b43c32e6;margin-top:-4px;font-size:12.5px}.gate-btn{background:var(--accent);color:#fff;cursor:pointer;border:0;border-radius:8px;height:44px;font:600 15px/1 Inter,sans-serif;transition:opacity .2s}.gate-btn:hover{opacity:.88}@media (width<=760px){body{overflow:auto}#root{height:auto;min-height:100%}.app-shell{flex-direction:column;height:auto;min-height:100vh;display:flex;position:relative;inset:auto}.map-stage{flex:auto;height:auto;min-height:380px;position:relative;transform:none!important}.map-frame{inset:0 4% 4%}.title-card{max-width:none;margin:10px 14px 0;padding:14px 18px;animation:.4s fadeIn;position:relative;top:auto;left:auto}.title-card h1{font-size:20px}.title-card .intro{font-size:12px}.counter-card{z-index:10;padding:10px 14px;position:absolute;inset:22px auto auto 22px}.counter-card .num{font-size:24px}.counter-card .label{display:none}.counter-card .hint{margin-top:2px;font-size:11px}.recent-dock{flex-direction:column;align-items:stretch;gap:8px;max-width:none;margin:10px 14px 14px;padding:14px;position:relative;bottom:auto;left:auto;transform:none!important}.recent-dock.hidden{display:none}.recent-row{gap:8px}.recent-chip{padding:5px 9px 5px 5px}.bottom-dock{flex-direction:column;gap:12px;margin:10px 14px 24px;padding:14px 16px 16px;position:relative;bottom:auto;left:auto;right:auto}.bottom-dock .head{border-right:0;border-bottom:1px solid var(--line);min-width:0;padding-bottom:10px;padding-right:0}.bottom-dock .head .name{font-size:20px}.bottom-dock .photos{padding-bottom:6px}.photo-thumb{width:200px}.dock-close{position:absolute;top:10px;right:10px}.lightbox{grid-template-columns:1fr;max-height:92vh}.lightbox .photo-large{min-height:280px;max-height:40vh}.lightbox .body{padding:20px 22px 26px}.lightbox .body h2{font-size:22px}.lightbox-bg{padding:16px}.admin-badge{bottom:8px;right:8px}.status-toast{bottom:52px;left:8px;right:8px}}@media (width<=420px){.map-stage{min-height:340px}.title-card h1{font-size:18px}.title-card .sub{font-size:15px}}@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms!important;animation-duration:.01ms!important}}.downscale-page{justify-content:center;align-items:flex-start;min-height:100%;padding:40px 24px;display:flex}.downscale-card{background:var(--paper);border-radius:14px;flex-direction:column;gap:20px;width:100%;max-width:720px;padding:36px 32px;display:flex;box-shadow:0 12px 36px #00000014}.downscale-card h1{color:var(--ink);letter-spacing:-.01em;margin:0;font-size:26px;font-weight:600}.downscale-sub{color:var(--ink-soft);font-size:14px;line-height:1.55}.downscale-drop{border:2px dashed var(--line);text-align:center;cursor:pointer;background:#fff6;border-radius:12px;padding:40px 20px;transition:all .2s}.downscale-drop:hover{border-color:var(--accent);background:#ffffffb3}.downscale-drop.active{border-color:var(--accent);background:var(--accent-soft);transform:scale(1.01)}.downscale-drop-icon{color:var(--accent);font-family:Caveat,cursive;font-size:38px;line-height:1}.downscale-drop-title{color:var(--ink);margin-top:6px;font-size:16px;font-weight:600}.downscale-drop-sub{color:var(--ink-mute);margin-top:4px;font-family:Caveat,cursive;font-size:16px}.downscale-actions{justify-content:flex-end;gap:10px;display:flex}.downscale-btn{border:1px solid var(--line);color:var(--ink);cursor:pointer;background:0 0;border-radius:8px;align-items:center;gap:6px;padding:8px 14px;font-family:inherit;font-size:13px;text-decoration:none;transition:all .15s;display:inline-flex}.downscale-btn:hover{border-color:var(--accent);color:var(--accent)}.downscale-btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.downscale-btn-primary:hover{color:#fff;opacity:.9}.downscale-results{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.downscale-result{border:1px solid var(--line);background:#ffffff8c;border-radius:10px;align-items:center;gap:12px;padding:10px;display:flex}.downscale-result.err{background:#b4503c0f;border-color:#b4503c4d}.downscale-result .thumb{object-fit:cover;border-radius:6px;flex-shrink:0;width:56px;height:56px}.downscale-result .info{flex:1;min-width:0}.downscale-result .name{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.downscale-result .meta{color:var(--ink-soft);margin-top:2px;font-family:Caveat,cursive;font-size:12px}.downscale-result .meta .dot{opacity:.5;margin:0 6px}.downscale-result .err-msg{color:#b4503cd9;margin-top:2px;font-size:12px}.downscale-back{color:var(--ink-soft);align-self:flex-start;margin-top:8px;font-family:Caveat,cursive;font-size:13px;text-decoration:none}.downscale-back:hover{color:var(--accent)}
