:root {
  --paper:#f5f0e6; --surface:#fffdf7; --ink:#272a20; --muted:#5d6052;
  --orange:#f47643; --yellow:#ffe24b; --line:#cbc6b8; --purple:#635089;
  --green:#344c38; --meta:13px; --body:15px; --touch:44px;
  --stroke:2px solid var(--ink); --shadow:4px 4px 0 var(--ink); --radius:14px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:18px;-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;background:var(--paper);color:var(--ink);font-family:"Apple SD Gothic Neo","Noto Sans KR","Malgun Gothic",sans-serif;font-size:var(--body);line-height:1.6;word-break:keep-all;overflow-wrap:break-word}
[hidden]{display:none!important}
a{color:inherit;text-underline-offset:4px;overflow-wrap:anywhere}
button,select,textarea{font:inherit;color:inherit}
button,select,summary{cursor:pointer}
button,a,select,summary{-webkit-tap-highlight-color:transparent}
button,select,summary{min-height:var(--touch);min-width:var(--touch)}
button:focus-visible,a:focus-visible,summary:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--purple);outline-offset:4px}
button:disabled{opacity:.6;cursor:wait}
.wrap{max-width:1140px;margin-inline:auto;padding-inline:30px}
.notice{padding:12px 24px;font-size:var(--meta);text-align:center}
.fixture{background:#e8dcfa;color:#493467}
.delay{background:var(--green);color:white}
.skip{position:absolute;top:-100px;left:12px;background:var(--surface);padding:12px;z-index:10}
.skip:focus{top:12px}
.masthead{min-height:84px;display:flex;align-items:center;justify-content:space-between;border-bottom:var(--stroke);padding-top:env(safe-area-inset-top)}
.brand{font-size:24px;font-weight:700;letter-spacing:-1px;text-decoration:none;display:inline-flex;align-items:center;min-height:var(--touch)}
.brand>span:first-child{font-weight:400}
.brand-dot{height:10px;width:10px;border-radius:50%;background:var(--orange);margin-left:5px;align-self:flex-start;margin-top:10px}
.map-link{font-size:14px;font-weight:700;display:inline-flex;align-items:center;min-height:var(--touch);padding:0 10px;border:var(--stroke);border-radius:8px;background:var(--yellow);text-decoration:none}
.intro{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;padding:32px 0 20px}
h1{font-size:clamp(36px,4.6vw,58px);line-height:1.12;letter-spacing:-.05em;margin:0;font-weight:700}
h1 .headline-line{white-space:nowrap}
h1 .headline-line>span{background:var(--yellow);box-shadow:3px 3px 0 var(--ink);padding:0 6px}
.intro-note{max-width:365px;color:var(--muted)}
.intro-note p{margin:12px 0 0}
.intro-note .weekend{display:inline-block;background:var(--green);color:white;border-radius:6px;padding:6px 12px;font-size:var(--meta);font-weight:700}
.hero-art{margin:0 0 24px}
.hero-frame{aspect-ratio:7.8;background:linear-gradient(120deg,#f3c89d,#e6b46b 55%,#81937b);border:var(--stroke);border-radius:var(--radius);overflow:hidden}
.hero-frame img{display:block;width:100%;height:100%;object-fit:cover;object-position:center}
.hero-art figcaption{font-size:var(--meta);color:var(--muted);margin-top:8px}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:28px}
.chip{border:var(--stroke);background:var(--surface);border-radius:24px;padding:7px 18px;font-weight:700;font-size:14px}
.chip[aria-pressed=true]{background:var(--yellow);box-shadow:2px 2px 0 var(--ink)}
.chip:hover{background:var(--yellow)}
.section-line{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}
.section-line h2{font-size:22px;letter-spacing:-.04em;margin:0;font-weight:700}
.section-line h2 span{background:var(--yellow);padding:0 5px;margin-left:4px}
.section-line p,.small-label{font-size:var(--meta);color:var(--muted);margin:0}
.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.card{background:var(--surface);border:var(--stroke);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;min-width:0;box-shadow:var(--shadow)}
.card-top{padding:18px 18px 12px;background:#fff0dd}
.card.stage-peak .card-top{background:var(--orange)}
.card.stage-start .card-top{background:#f6cb78}
.card.stage-before .card-top{background:#dde7d7}
.card.kind-forecast{border-style:dashed}
.card.kind-forecast .card-top{background:#eee7f6}
.card-heading{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.card-heading>div{min-width:0;flex:1}
.stage-art{width:56px;height:56px;flex-shrink:0;border-radius:50%;background:#fffdf744;display:grid;place-items:center}
.stage-art img{width:100%;height:100%;object-fit:contain}
.rank{align-self:flex-start;background:var(--yellow);border:var(--stroke);border-radius:50%;width:34px;height:34px;display:grid;place-items:center;flex-shrink:0;font-size:var(--meta);font-weight:700}
.badge{display:inline-flex;align-items:center;gap:5px;font-size:var(--meta);font-weight:700;border:var(--stroke);border-radius:6px;padding:3px 9px;background:var(--yellow)}
.kind-forecast .badge{background:var(--surface)}
.fixture-tag{display:inline-block;font-size:var(--meta);color:#493467;margin-left:5px}
.card h3{font-size:26px;letter-spacing:-1px;line-height:1.3;margin:2px 0 0;font-weight:700}
.card-place{font-size:var(--meta);margin:0}
.card-body{padding:14px 18px 18px;flex:1;display:flex;flex-direction:column}
.evidence{font-size:var(--meta);color:var(--muted);margin-bottom:8px}
.meta{margin:0;font-size:var(--meta);color:var(--muted);line-height:1.9}
.meta strong{color:var(--ink);font-weight:400;margin-left:6px}
.card-action{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:auto;padding-top:12px;font-size:14px}
.card-action a,.detail-links a,.map-credit a,.coffee-link,.coffee-note a,.error-card>a{display:inline-flex;align-items:center;min-height:var(--touch);gap:4px}
.external-icon{width:14px;height:14px;flex-shrink:0}
.detail-button{border:var(--stroke);border-radius:7px;background:transparent;padding:6px 12px;font-size:14px}
.share-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;font-size:var(--meta);min-width:0}
.share-controls label{color:var(--muted)}
.share-controls select{max-width:100%;border:1px solid var(--line);border-radius:7px;background:var(--surface);padding:6px 12px}
.share-button{flex-basis:100%;border:var(--stroke);background:var(--yellow);border-radius:7px;padding:8px;font-size:14px;font-weight:700}
.card.empty{background:transparent;border:2px dashed var(--line);box-shadow:none;justify-content:center;padding:20px;min-height:260px}
.empty h3{font-size:22px}
.empty p{font-size:var(--body);color:var(--muted)}
.empty .number{font-size:var(--meta);color:var(--muted)}
.empty-art{display:block;width:100%;max-width:210px;height:auto;aspect-ratio:13/8;object-fit:contain;align-self:center}
.error-card{grid-column:1/-1;align-items:flex-start}
.sort-note{font-size:var(--meta);color:var(--muted);margin-top:18px}
.sort-note summary{display:flex;align-items:center;text-decoration:underline;width:fit-content}
.sort-note ol{padding-left:24px;margin:0 0 12px}
.map-section{margin-top:0;margin-bottom:24px}
.legend{display:flex;flex-wrap:wrap;gap:8px 16px;font-size:var(--meta);margin-bottom:12px}
.legend span{display:inline-flex;align-items:center;gap:6px}
.dot{display:inline-block;width:12px;height:12px;border-radius:50%;border:1px solid var(--ink);background:#929789;flex-shrink:0}
.dot.peak{background:#b83c20}.dot.start{background:#db971b}.dot.before{background:#5b7952}.dot.unknown{background:#85897b}.dot.forecast{background:transparent;border:2px solid var(--purple)}
.map-note,.map-credit{font-size:var(--meta);color:var(--muted);margin:8px 0 12px}
.map-shell{position:relative;border:var(--stroke);border-radius:var(--radius);overflow:hidden;background:#e6e8dd}
.map-shell #map{height:540px;width:100%}
.map-message{position:absolute;left:15px;right:70px;top:12px;max-width:420px;margin:0;padding:10px 12px;background:#fffdf7f5;font-size:var(--meta);border-radius:6px;pointer-events:none;z-index:2}
.map-reset{position:absolute;bottom:40px;left:12px;z-index:2;background:var(--surface);border:var(--stroke);border-radius:7px;padding:6px 12px;font-size:var(--meta)}
.map-marker{display:flex;align-items:center;justify-content:center;width:var(--touch);height:var(--touch);border:0;border-radius:50%;background:transparent;padding:0;overflow:visible;font-size:var(--meta);font-weight:700;white-space:nowrap}
.map-marker .dot{width:14px;height:14px;box-shadow:0 0 0 2px var(--surface)}
.marker-label{position:absolute;left:36px;top:5px;padding:3px 7px;border:1px solid var(--line);border-radius:5px;background:var(--surface);visibility:hidden;pointer-events:none}
.map-marker.kind-forecast .marker-label{border:1px dashed var(--purple);color:var(--purple)}
.map-marker.show-label .marker-label,.map-marker:hover .marker-label,.map-marker:focus .marker-label,.map-marker.is-selected .marker-label{visibility:visible}
.map-marker:hover,.map-marker:focus,.map-marker.is-selected{z-index:1}
.maplibregl-ctrl button{min-width:var(--touch);min-height:var(--touch)}
/* The 44px touch target must not tile MapLibre's smaller information icon. */
.maplibregl-ctrl-attrib-button{background-repeat:no-repeat;background-position:center}
.maplibregl-ctrl-attrib{font-size:var(--meta)}
.maplibregl-ctrl-attrib a{display:inline-block;min-height:var(--touch);line-height:var(--touch)}
.spot-list{margin-top:12px;border-block:1px solid var(--line);font-size:14px}
.spot-list summary{padding:14px 0;font-weight:700}
#all-spots{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding-bottom:16px}
.list-button{border:1px solid var(--line);background:var(--surface);text-align:left;border-radius:7px;padding:10px;font-size:var(--meta)}
.disclaimer{margin:32px 0 24px;color:var(--muted);font-size:var(--body);max-width:790px}
.disclaimer strong{font-size:18px;color:var(--ink);font-weight:700}
.disclaimer p{margin:10px 0}.disclaimer ul{padding-left:22px}
#file-time{font-size:var(--meta)}
.footer-band{border-radius:var(--radius);overflow:hidden;background:linear-gradient(150deg,#d7dfc9,#ecd0a7);aspect-ratio:7.8}
.footer-band img{display:block;width:100%;height:100%;object-fit:cover}
footer{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;border-top:var(--stroke);padding-block:24px max(24px,env(safe-area-inset-bottom));margin-top:30px;font-size:var(--meta);color:var(--muted)}
footer .brand{font-size:20px;color:var(--ink)}
.coffee-link{font-size:var(--meta);color:var(--muted);font-weight:400}
dialog{width:min(540px,calc(100% - 28px));max-height:85dvh;border:var(--stroke);border-radius:var(--radius);background:var(--paper);padding:24px;color:var(--ink);overflow:auto;box-shadow:var(--shadow)}
dialog::backdrop{background:#161e19a3}
.dialog-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.dialog-head button{border:1px solid var(--line);background:var(--surface);border-radius:7px;padding:6px 12px;flex-shrink:0}
.eyebrow{font-size:var(--meta);font-weight:700;margin:0}
#detail-title{font-size:34px;margin:20px 0 10px;letter-spacing:-1px}
.detail-dates{display:grid;grid-template-columns:100px minmax(0,1fr);gap:10px;font-size:var(--body);border-block:1px solid var(--line);padding-block:18px;margin-block:20px}
.detail-dates dt{color:var(--muted)}.detail-dates dd{margin:0;overflow-wrap:anywhere}
.detail-links{display:flex;flex-direction:column;gap:4px;font-size:14px;margin-top:18px}
.detail-note{font-size:var(--body);color:var(--muted)}
.share-toast{position:fixed;bottom:max(16px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:min(380px,calc(100% - 32px));max-height:60dvh;overflow:auto;z-index:10;background:var(--surface);border:var(--stroke);border-radius:10px;padding:16px;box-shadow:var(--shadow);font-size:var(--body)}
.share-toast p{margin:0 0 8px}.share-toast button{display:block;margin-top:8px;border:1px solid var(--line);border-radius:7px;background:var(--surface);padding:6px 12px}
.share-toast textarea{width:100%;min-height:120px;font:inherit}
dialog .share-toast{position:sticky;bottom:0;left:auto;transform:none;width:100%;margin-top:16px}
.copy-buffer{position:fixed;top:0;left:0;width:1px;height:1px;opacity:0;pointer-events:none}
#coffee-dialog{width:min(420px,calc(100% - 32px))}
#coffee-title{font-size:18px;margin:0}
.coffee-qr{display:block;width:min(256px,100%);height:auto;margin:16px auto;background:white}
.coffee-note{font-size:var(--meta);color:var(--muted);overflow-wrap:anywhere}
@media(max-width:760px){
  .wrap{padding-inline:20px}.masthead{min-height:72px;margin-inline:20px;padding-inline:0}
  .intro{flex-direction:column;align-items:stretch;gap:6px;padding:18px 0 14px}
  h1{font-size:clamp(27px,8.3vw,48px)}.intro-note{max-width:none}.intro-note p{margin-top:10px}
  .hero-frame{aspect-ratio:6}.hero-art{margin-bottom:20px}
  .filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:16px}.chip{padding:6px 4px}
  .section-line{align-items:flex-start;flex-wrap:wrap;gap:6px}.section-line h2{font-size:20px}
  .section-line p,.small-label{font-size:var(--meta)}
  .cards{grid-template-columns:1fr;gap:18px}.card-top{padding:14px 16px 12px}.card-body{padding:12px 16px 16px}
  .card h3{font-size:25px}.card-heading{margin-bottom:10px}.card.empty{min-height:190px}
  .empty-art{max-width:160px}.map-section{margin-top:0}.map-shell #map{height:55vh}
  #all-spots{grid-template-columns:1fr}.map-message{left:10px;right:66px}
  dialog{padding:20px}.footer-band{aspect-ratio:3.9}
}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
