*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;height:100%;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif}button,input,textarea,select{font:inherit}button{border:0;background:none;color:inherit}.hidden{display:none!important}.app{height:100%;position:relative;overflow:hidden;background:var(--main-bg);color:var(--text-main)}.theme-black{--main-bg:#f2f2f7;--card:#fff;--text-main:#090909;--text-sub:#8b8b93;--primary:#0d0d0f;--primary-text:#fff;--tag:#efeff4;--orb:rgba(0,0,0,.04)}.theme-cream{--main-bg:#fbf3e8;--card:#fffaf2;--text-main:#2b2118;--text-sub:#9b8170;--primary:#5a3e2b;--primary-text:#fff;--tag:#f2e5d4;--orb:rgba(174,126,73,.14)}.theme-pink{--main-bg:#fff1f5;--card:#fff;--text-main:#3a2028;--text-sub:#b47b8d;--primary:#e75c8d;--primary-text:#fff;--tag:#ffe2eb;--orb:rgba(231,92,141,.13)}.theme-blue{--main-bg:#eef5ff;--card:#fff;--text-main:#132033;--text-sub:#6e83a5;--primary:#1f4b99;--primary-text:#fff;--tag:#dfeaff;--orb:rgba(31,75,153,.12)}.theme-purple{--main-bg:#f4f0ff;--card:#fff;--text-main:#211936;--text-sub:#7d6ba8;--primary:#6c4bd8;--primary-text:#fff;--tag:#ece5ff;--orb:rgba(108,75,216,.13)}.bg-orb{position:fixed;border-radius:50%;background:var(--orb);pointer-events:none}.orb-one{width:270px;height:270px;right:-90px;top:80px}.orb-two{width:300px;height:300px;left:-150px;bottom:90px}.phone-page{position:relative;z-index:1;height:100%;max-width:520px;margin:0 auto;display:flex;flex-direction:column;padding:0 22px}.status-space{height:max(36px,env(safe-area-inset-top))}.header{flex:0 0 auto;padding-bottom:12px}.header-main{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.title-wrap{min-width:0}.title-row{display:flex;align-items:center;gap:10px}.title-row h1{font-size:42px;letter-spacing:-1.5px;line-height:1;margin:0;font-weight:950;white-space:nowrap}.title-wrap p{font-size:16px;color:var(--text-sub);font-weight:700;margin:20px 0 0}.switch-pill,.theme-pill{height:38px;border-radius:999px;background:var(--card);box-shadow:0 8px 22px rgba(0,0,0,.06);padding:0 16px;font-size:14px;font-weight:900;white-space:nowrap}.theme-pill{margin-top:4px}.today-card{background:var(--card);border-radius:26px;padding:20px;margin-top:24px;box-shadow:0 18px 45px rgba(0,0,0,.055)}.today-top{display:flex;justify-content:space-between;align-items:flex-start}.mini-label{display:block;color:var(--text-sub);font-size:15px;font-weight:900;margin-bottom:6px}.today-top strong{font-size:22px;font-weight:950;letter-spacing:-.4px}.year-box{text-align:right}.year-box b{display:block;font-size:38px;line-height:1;font-weight:950}.year-box span{display:block;color:var(--text-sub);font-size:14px;font-weight:900;margin-top:5px}.progress-track{height:9px;background:var(--tag);border-radius:999px;overflow:hidden;margin-top:19px}.progress-track i{display:block;height:100%;width:0;background:var(--primary);border-radius:999px}.quick-actions{display:flex;gap:10px;margin-top:16px}.primary-action,.white-action{height:56px;border-radius:24px;font-size:17px;font-weight:950;display:flex;align-items:center;justify-content:center}.primary-action{flex:1;background:var(--primary);color:var(--primary-text);box-shadow:0 14px 28px rgba(0,0,0,.14)}.white-action{min-width:96px;background:var(--card);box-shadow:0 10px 24px rgba(0,0,0,.045)}.white-action.small{min-width:70px}.category-row,.mode-row{display:flex;gap:9px;overflow-x:auto;padding:16px 0 2px;scrollbar-width:none}.category-row::-webkit-scrollbar,.mode-row::-webkit-scrollbar{display:none}.category-pill,.mode-btn{flex:0 0 auto;height:39px;border-radius:999px;background:var(--card);padding:0 17px;font-weight:900;color:var(--text-main);box-shadow:0 8px 18px rgba(0,0,0,.04)}.category-pill.active,.mode-btn.active{background:var(--primary);color:var(--primary-text)}.content-scroll{flex:1;min-height:0;overflow-y:auto;padding-bottom:calc(28px + env(safe-area-inset-bottom));scrollbar-width:none}.content-scroll::-webkit-scrollbar{display:none}.panel{display:none}.active-panel{display:block}.record-card{background:var(--card);border-radius:29px;padding:20px;margin-bottom:18px;box-shadow:0 16px 36px rgba(0,0,0,.045)}.count-card{display:grid;grid-template-columns:66px 1fr 74px;gap:15px;align-items:center}.icon-box{width:66px;height:66px;border-radius:21px;background:var(--tag);display:grid;place-items:center;font-size:38px}.card-title{margin:0 0 8px;font-size:24px;line-height:1.15;font-weight:950}.muted{color:var(--text-sub);font-weight:700}.tag-row{display:flex;gap:7px;flex-wrap:wrap;margin-top:11px}.tag{border-radius:999px;background:var(--tag);color:var(--text-sub);padding:5px 10px;font-size:12px;font-weight:900}.small-progress{height:8px;background:var(--tag);border-radius:999px;overflow:hidden;margin-top:12px}.small-progress i{display:block;height:100%;background:var(--primary)}.days{text-align:right;font-size:48px;line-height:1;font-weight:950}.unit{text-align:right;color:var(--text-sub);font-size:15px;font-weight:800;margin-top:6px}.card-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}.mini-btn{height:32px;border-radius:12px;background:var(--tag);padding:0 12px;font-size:13px;font-weight:900}.delete{color:#ff3b30}.table-card{background:var(--card);border-radius:21px;overflow:hidden;border:1px solid #111;margin-bottom:18px}.table-row{display:grid;grid-template-columns:.9fr 1.25fr 1.15fr 1fr .7fr;border-bottom:1px solid #111;min-height:52px}.table-row:last-child{border-bottom:0}.table-row>div{border-right:1px solid #111;display:flex;align-items:center;justify-content:center;text-align:center;padding:8px 5px;font-size:13px;font-weight:750;word-break:break-all}.table-row>div:last-child{border-right:0}.table-head{background:var(--tag)}.done-check{width:24px;height:24px;border-radius:8px;background:var(--tag);display:grid;place-items:center;font-weight:950}.timeline-item{display:grid;grid-template-columns:55px 1fr;gap:12px;margin-bottom:14px}.timeline-day{font-size:28px;font-weight:950;text-align:center}.check-top{display:flex;justify-content:space-between;gap:12px}.check-count{font-size:21px;font-weight:950}.check-progress{height:8px;background:var(--tag);border-radius:999px;overflow:hidden;margin-top:15px}.check-progress i{display:block;height:100%;background:var(--primary)}.check-list{display:grid;gap:12px;margin-top:16px}.check-item{display:flex;gap:10px;align-items:center}.check-box{width:22px;height:22px;border-radius:8px;background:var(--tag);display:grid;place-items:center;flex:0 0 auto;font-size:13px;font-weight:950}.check-item.done span{text-decoration:line-through;color:var(--text-sub)}.check-item.done .check-box{background:var(--primary);color:var(--primary-text)}.calendar-card,.map-card{background:var(--card);border-radius:28px;padding:20px;box-shadow:0 16px 36px rgba(0,0,0,.045)}.calendar-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.calendar-head h2{margin:0;font-size:24px}.calendar-head button{width:42px;height:42px;border-radius:50%;background:var(--tag);font-size:30px;font-weight:900}.week-row,.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:7px}.week-row span{text-align:center;color:var(--text-sub);font-weight:900;font-size:13px;margin-bottom:4px}.calendar-day{height:54px;border-radius:17px;background:rgba(255,255,255,.45);display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:15px;font-weight:900}.calendar-day.today{background:var(--primary);color:var(--primary-text)}.dot-row{display:flex;gap:4px;margin-top:5px}.dot{width:7px;height:7px;border-radius:50%;display:inline-block}.dot.event{background:#111}.dot.schedule{background:#999}.calendar-day.today .dot{background:#fff}.legend{display:flex;justify-content:center;gap:18px;margin-top:15px;color:var(--text-sub);font-size:13px;font-weight:900}.festival-hero{background:#111;color:#fff;border-radius:31px;padding:24px;margin-bottom:18px}.festival-hero small{opacity:.68;font-weight:800}.festival-hero h2{font-size:32px;margin:12px 0 8px}.festival-hero b{font-size:66px;line-height:1}.festival-card{display:flex;justify-content:space-between;align-items:center}.festival-left{display:flex;align-items:center;gap:13px}.festival-icon{width:58px;height:58px;border-radius:19px;background:var(--tag);display:grid;place-items:center;font-size:32px}.festival-days{font-size:40px;font-weight:950;text-align:right}.map-card-head{display:flex;justify-content:space-between;gap:15px;align-items:flex-start}.map-card h2{margin:0 0 5px;font-size:25px}.map-card p{margin:0;color:var(--text-sub);font-size:14px;font-weight:750}.count-badge{width:72px;height:72px;border-radius:22px;background:var(--primary);color:var(--primary-text);display:flex;flex-direction:column;justify-content:center;align-items:center}.count-badge b{font-size:28px;line-height:1}.count-badge span{font-size:12px;font-weight:850;margin-top:5px}.map-tools{display:flex;gap:9px;align-items:center;margin:15px 0}.map-tools button,.map-tools span{height:38px;min-width:38px;border-radius:999px;background:var(--tag);display:grid;place-items:center;padding:0 13px;font-weight:950}.map-tools button:last-child{margin-left:auto}.map-viewport{height:370px;border-radius:25px;overflow:hidden;background:linear-gradient(145deg,#1d2633,#101821);position:relative;touch-action:none}.world-map{position:absolute;width:880px;height:540px;left:50%;top:50%;transform:translate(-50%,-50%) scale(1);transform-origin:center;background:linear-gradient(145deg,#1d2633,#101821)}.world-map:before{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:rgba(255,255,255,.05)}.world-map:after{content:"";position:absolute;top:0;bottom:0;left:50%;width:1px;background:rgba(255,255,255,.04)}.continent{position:absolute;background:#6b7280;opacity:.5;border:1px solid rgba(255,255,255,.14)}.na{left:7%;top:18%;width:28%;height:28%;border-radius:55% 45% 48% 52%;transform:rotate(-16deg)}.sa{left:27%;top:54%;width:14%;height:34%;border-radius:48% 52% 58% 42%;transform:rotate(18deg)}.eu{left:45%;top:24%;width:17%;height:18%;border-radius:50% 50% 42% 58%;transform:rotate(8deg)}.af{left:47%;top:44%;width:18%;height:36%;border-radius:48% 52% 56% 44%;transform:rotate(-4deg)}.as{left:59%;top:24%;width:31%;height:34%;border-radius:52% 48% 45% 55%;transform:rotate(8deg)}.au{left:76%;top:72%;width:16%;height:13%;border-radius:56% 44% 50% 50%;transform:rotate(8deg)}.city-dot,.lit-dot{position:absolute;transform:translate(-50%,-50%);z-index:5}.city-core{width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.8);box-shadow:0 0 10px rgba(255,255,255,.6);display:block}.city-label{position:absolute;left:11px;top:-7px;font-size:11px;color:rgba(255,255,255,.8);white-space:nowrap;text-shadow:0 2px 7px rgba(0,0,0,.65);font-weight:800}.lit-core{width:17px;height:17px;border-radius:50%;background:#22d3ee;box-shadow:0 0 17px #22d3ee,0 0 30px rgba(34,211,238,.6);border:3px solid rgba(255,255,255,.9);display:block}.map-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.map-stats div{background:var(--tag);border-radius:18px;padding:13px 4px;text-align:center}.map-stats b{display:block;font-size:24px}.map-stats span{color:var(--text-sub);font-size:12px;font-weight:900}.section-title{font-size:24px;margin:22px 0 14px}.photo-row{display:flex;gap:9px;flex-wrap:wrap;margin-top:11px}.photo-row img{width:82px;height:82px;object-fit:cover;border-radius:17px}.empty{background:var(--card);border-radius:28px;padding:56px 18px;text-align:center;color:var(--text-sub);font-weight:900;box-shadow:0 16px 36px rgba(0,0,0,.045)}.sheet-mask{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:20;display:flex;align-items:flex-end}.sheet{width:100%;max-width:520px;margin:0 auto;background:#fff;border-radius:34px 34px 0 0;padding:22px 20px calc(24px + env(safe-area-inset-bottom));box-shadow:0 -20px 60px rgba(0,0,0,.18)}.sheet-title{text-align:center;font-size:22px;font-weight:950;margin-bottom:14px}.sheet-item{width:100%;display:flex;align-items:center;gap:14px;padding:14px;border-radius:22px;background:#f5f5f7;margin-bottom:9px;text-align:left}.sheet-item span{width:48px;height:48px;border-radius:16px;background:#fff;display:grid;place-items:center;font-size:25px}.sheet-item b{display:block;font-size:18px}.sheet-item em{font-style:normal;color:#888;font-size:13px;font-weight:700;margin-top:3px;display:block}dialog{
  border:0;
  background:transparent;
  padding:0;
  width:100vw;
  max-width:100vw;
  height:100dvh;
  max-height:100dvh;
  margin:0;
  overflow:hidden;
}
dialog::backdrop{
  background:rgba(0,0,0,.48);
  backdrop-filter:blur(8px);
}
dialog[open]{
  display:flex;
  justify-content:center;
  align-items:flex-end;
}
.dialog-box{
  width:100%;
  max-width:520px;
  margin:0 auto;
  background:var(--main-bg);
  border-radius:34px 34px 0 0;
  padding:0 22px calc(26px + env(safe-area-inset-bottom));
  max-height:92dvh;
  overflow-y:auto;
  box-shadow:0 -20px 60px rgba(0,0,0,.18);
}
.dialog-head{
  height:76px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  position:sticky;
  top:0;
  z-index:3;
  background:var(--main-bg);
}
.dialog-head button{color:var(--text-sub);font-weight:850;font-size:16px}.dialog-head b{font-size:18px}.form-card{background:var(--card);border-radius:26px;padding:7px 18px;margin-bottom:18px}.form-row{padding:15px 0;border-bottom:1px solid rgba(0,0,0,.06)}.form-row:last-child{border-bottom:0}.form-row label{display:block;font-size:14px;color:var(--text-sub);font-weight:900;margin-bottom:8px}.form-row input,.form-row select,.form-row textarea{width:100%;border:0;outline:0;background:transparent;font-size:18px;color:var(--text-main);font-weight:750}.form-row textarea{min-height:98px;resize:none}.save-btn,.mini-full,.danger-full{width:100%;height:58px;border-radius:24px;font-size:18px;font-weight:950;display:grid;place-items:center;margin-top:16px}.save-btn{background:var(--primary);color:var(--primary-text);box-shadow:0 14px 30px rgba(0,0,0,.14)}.secondary-save{background:var(--card);color:var(--text-main);box-shadow:0 10px 24px rgba(0,0,0,.045)}.mini-full{background:var(--card)}.danger-full{background:#fff1f1;color:#ff3b30}.hint{background:var(--card);padding:16px;border-radius:20px;color:var(--text-sub);font-weight:750;line-height:1.55}textarea#backupCode,textarea#restoreCode{width:100%;height:120px;border:0;background:var(--card);border-radius:20px;padding:14px;margin-top:14px;outline:0;color:var(--text-main)}.detail-title{font-size:28px;font-weight:950;margin:0 0 8px}.hidden{display:none!important}@media(min-width:521px){body{background:#dfe1e7}.phone-page{box-shadow:0 0 0 1px rgba(0,0,0,.04),0 18px 60px rgba(0,0,0,.12);background:var(--main-bg)}}

/* ===== Footprint map v2: SVG world map + city search ===== */
.city-search-wrap{
  margin:14px 0 12px;
}
.city-search{
  width:100%;
  height:44px;
  border:0;
  outline:0;
  border-radius:18px;
  padding:0 15px;
  background:var(--tag);
  color:var(--text-main);
  font-size:15px;
  font-weight:800;
}
.city-search::placeholder{
  color:var(--text-sub);
  font-weight:700;
}
.city-search-result{
  min-height:18px;
  margin-top:8px;
  color:var(--text-sub);
  font-size:12px;
  line-height:1.4;
  font-weight:800;
}
.map-viewport{
  height:390px;
  background:linear-gradient(145deg,#162131,#0f1722);
}
.world-map{
  width:940px;
  height:520px;
  background:radial-gradient(circle at 30% 25%,rgba(255,255,255,.06),transparent 32%),linear-gradient(145deg,#162131,#0f1722);
  overflow:hidden;
  border-radius:0;
}
.world-svg{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  z-index:1;
}
.land{
  fill:#6f7887;
  opacity:.72;
  stroke:rgba(255,255,255,.18);
  stroke-width:2;
  filter:drop-shadow(0 0 8px rgba(255,255,255,.03));
}
.land-soft{opacity:.64}
.island{opacity:.58}
.grid-line{
  stroke:rgba(255,255,255,.06);
  stroke-width:1;
  fill:none;
}
#cityLayer,#litLayer{
  position:absolute;
  inset:0;
  z-index:5;
}
.city-dot,.lit-dot{
  border:0;
  background:transparent;
  padding:0;
}
.city-core{
  width:8px;
  height:8px;
  background:rgba(255,255,255,.82);
  box-shadow:0 0 10px rgba(255,255,255,.72);
}
.city-label{
  font-size:10px;
  color:rgba(255,255,255,.82);
  transform:translateY(-1px);
  max-width:90px;
  overflow:hidden;
  text-overflow:ellipsis;
}
.lit-core{
  width:17px;
  height:17px;
  background:#22d3ee;
  box-shadow:0 0 18px #22d3ee,0 0 34px rgba(34,211,238,.68);
}
@media(max-width:420px){
  .map-viewport{height:360px}
  .world-map{width:900px;height:500px}
  .city-label{font-size:9px}
}


/* ===== Real map replacement: Leaflet mobile style ===== */
.real-map-wrap{
  height:390px;
  border-radius:25px;
  overflow:hidden;
  background:#dfe7ef;
  position:relative;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.05);
}
.leaflet-map{
  width:100%;
  height:100%;
}
.leaflet-container{
  font-family:-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;
  background:#dfe7ef;
}
.leaflet-control-attribution{
  display:none !important;
}
.leaflet-control-zoom{
  border:none !important;
  box-shadow:0 8px 22px rgba(0,0,0,.18) !important;
}
.leaflet-control-zoom a{
  border:none !important;
  color:#111 !important;
  font-weight:900;
}
.leaf-icon-wrap{
  background:transparent;
  border:none;
}
.leaf-dot{
  width:12px;
  height:12px;
  border-radius:50%;
  background:#111;
  border:2px solid rgba(255,255,255,.95);
  box-shadow:0 2px 12px rgba(0,0,0,.35);
}
.leaf-dot.lit{
  width:18px;
  height:18px;
  background:#22d3ee;
  box-shadow:0 0 18px #22d3ee,0 0 34px rgba(34,211,238,.65);
}
.leaf-label{
  position:absolute;
  left:15px;
  top:-6px;
  padding:2px 6px;
  border-radius:999px;
  background:rgba(255,255,255,.92);
  color:#111;
  font-size:11px;
  line-height:1.2;
  font-weight:900;
  white-space:nowrap;
  box-shadow:0 3px 10px rgba(0,0,0,.12);
  pointer-events:none;
  max-width:92px;
  overflow:hidden;
  text-overflow:ellipsis;
}
.real-map-tools{
  margin-top:12px;
}
#scaleText{
  min-width:58px;
}
.map-viewport,.world-map,.continent,.world-svg,#cityLayer,#litLayer{
  display:none !important;
}
@media(max-width:420px){
  .real-map-wrap{height:360px}
  .leaf-label{display:none}
}


/* ===== Final mobile mini-program UI polish, no footprint tab ===== */
html, body {
  background: #f2f2f7;
}

.app {
  background:
    radial-gradient(circle at 86% 16%, rgba(0,0,0,.045), transparent 28%),
    radial-gradient(circle at 0% 82%, rgba(0,0,0,.035), transparent 30%),
    var(--main-bg);
}

.phone-page {
  padding: 0 21px;
}

.status-space {
  height: max(38px, env(safe-area-inset-top));
}

.header {
  padding-bottom: 10px;
}

.title-row h1 {
  font-size: 44px;
  line-height: .98;
  letter-spacing: -2px;
}

.switch-pill {
  height: 36px;
  padding: 0 15px;
  font-size: 13px;
  background: rgba(255,255,255,.86);
  backdrop-filter: blur(16px);
  box-shadow: 0 10px 28px rgba(0,0,0,.07);
}

.theme-pill {
  position: absolute;
  top: max(39px, env(safe-area-inset-top));
  right: 21px;
  height: 36px;
  padding: 0 15px;
  font-size: 13px;
  background: rgba(255,255,255,.86);
  backdrop-filter: blur(16px);
  z-index: 3;
}

.title-wrap p {
  margin-top: 22px;
  font-size: 16px;
  color: var(--text-sub);
}

.today-card {
  border-radius: 28px;
  padding: 20px;
  margin-top: 22px;
  box-shadow: 0 20px 54px rgba(0,0,0,.055);
  background: rgba(255,255,255,.88);
  backdrop-filter: blur(18px);
}

.theme-cream .today-card,
.theme-pink .today-card,
.theme-blue .today-card,
.theme-purple .today-card,
.theme-cream .record-card,
.theme-pink .record-card,
.theme-blue .record-card,
.theme-purple .record-card {
  background: var(--card);
}

.quick-actions {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 10px;
  margin-top: 16px;
}

.primary-action {
  height: 56px;
  border-radius: 25px;
  font-size: 18px;
}

.white-action {
  height: 56px;
  border-radius: 24px;
  min-width: 92px;
  background: rgba(255,255,255,.86);
  backdrop-filter: blur(18px);
}

.white-action.small {
  min-width: 66px;
}

.category-row, .mode-row {
  padding: 16px 0 4px;
}

.category-pill, .mode-btn {
  height: 40px;
  padding: 0 17px;
  background: rgba(255,255,255,.88);
  backdrop-filter: blur(16px);
}

.content-scroll {
  padding-bottom: calc(98px + env(safe-area-inset-bottom));
}

.record-card {
  border-radius: 30px;
  padding: 20px;
  margin-bottom: 18px;
  background: rgba(255,255,255,.9);
  backdrop-filter: blur(18px);
  box-shadow: 0 18px 42px rgba(0,0,0,.048);
}

.count-card {
  grid-template-columns: 66px 1fr 72px;
  gap: 15px;
}

.icon-box {
  width: 66px;
  height: 66px;
  border-radius: 22px;
}

.card-title {
  font-size: 24px;
  line-height: 1.12;
}

.days {
  font-size: 50px;
}

.small-progress {
  height: 8px;
  margin-top: 13px;
}

.table-card {
  border-radius: 22px;
  background: rgba(255,255,255,.92);
  box-shadow: 0 18px 42px rgba(0,0,0,.048);
}

.table-row {
  min-height: 54px;
}

.table-row > div {
  font-size: 13px;
  padding: 8px 5px;
}

.calendar-card {
  border-radius: 30px;
  background: rgba(255,255,255,.9);
  backdrop-filter: blur(18px);
  box-shadow: 0 18px 42px rgba(0,0,0,.048);
}

.calendar-day {
  height: 56px;
  border-radius: 18px;
}

.festival-hero {
  border-radius: 32px;
  box-shadow: 0 18px 46px rgba(0,0,0,.16);
}

.sheet-mask {
  z-index: 80;
}

.sheet {
  border-radius: 34px 34px 0 0;
  background: rgba(255,255,255,.96);
  backdrop-filter: blur(24px);
}

.sheet-item {
  background: #f5f5f7;
}

.sheet-item[data-tab="footprint"] {
  display: none;
}

.mobile-tabbar {
  position: fixed;
  left: 50%;
  bottom: max(10px, env(safe-area-inset-bottom));
  transform: translateX(-50%);
  width: min(478px, calc(100vw - 24px));
  height: 66px;
  border-radius: 28px;
  background: rgba(255,255,255,.88);
  backdrop-filter: blur(28px);
  box-shadow: 0 18px 50px rgba(0,0,0,.13);
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  padding: 7px;
  z-index: 30;
}

.bottom-tab {
  border-radius: 22px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  justify-content: center;
  align-items: center;
  color: var(--text-sub);
  font-size: 11px;
  font-weight: 900;
}

.bottom-tab span {
  font-size: 19px;
  line-height: 1;
}

.bottom-tab b {
  font-size: 10px;
  line-height: 1;
}

.bottom-tab.active {
  background: var(--primary);
  color: var(--primary-text);
}

dialog {
  width: 100vw;
  max-width: 100vw;
  height: 100dvh;
  max-height: 100dvh;
  margin: 0;
}

dialog[open] {
  align-items: flex-end;
  justify-content: center;
}

.dialog-box {
  width: 100%;
  max-width: 520px;
  margin: 0 auto;
  border-radius: 34px 34px 0 0;
  background: var(--main-bg);
  max-height: 92dvh;
}

.dialog-head {
  position: sticky;
  top: 0;
  background: var(--main-bg);
  z-index: 3;
}

.form-card {
  background: rgba(255,255,255,.9);
  backdrop-filter: blur(18px);
  border-radius: 27px;
}

.save-btn {
  border-radius: 25px;
}

.map-card,
.real-map-wrap,
.leaflet-map,
.footprint-row,
#footprintPanel {
  display: none !important;
}
