@font-face{font-family:Space Grotesk;src:url('assets/space-grotesk.ttf')}@font-face{font-family:DM Serif;src:url('assets/dm-serif.ttf')}@font-face{font-family:IBM Plex Mono;src:url('assets/ibm-plex-mono.ttf')}

:root{--paper:#f2efdf;--ink:#181915;--muted:#6b6a5e;--red:#e94b35;--blue:#2670df;--green:#3c8d5b;--yellow:#f1b927;--purple:#7a54a8;--line:#23241f;--white:#fffdf3}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--paper);color:var(--ink);font-family:"Space Grotesk",sans-serif;overflow-x:hidden}
button,input,select{font:inherit;color:inherit}
button,a,select,input{outline-offset:4px}
:focus-visible{outline:3px solid var(--blue)}
.skip-link{position:fixed;top:8px;left:8px;z-index:1000;background:var(--ink);color:white;padding:10px 14px;transform:translateY(-150%)}
.skip-link:focus{transform:none}

.masthead{height:100px;padding:0 4.2vw;display:flex;align-items:center;border-bottom:2px solid var(--ink);position:relative;background:var(--paper);z-index:3}
.brand{color:inherit;text-decoration:none;display:flex;align-items:center;gap:15px}
.brand-mark{display:grid;grid-template-columns:repeat(3,9px);gap:4px;transform:rotate(-12deg)}
.brand-mark i{width:9px;height:38px;background:var(--red);border-radius:8px}.brand-mark i:nth-child(2){background:var(--blue);transform:translateY(-4px)}.brand-mark i:nth-child(3){background:var(--yellow);transform:translateY(-8px)}
.brand-name{font-family:"DM Serif",serif;font-size:36px;line-height:1}
.brand-tag{margin:0 0 0 30px;padding-left:30px;border-left:1px solid var(--ink);font:11px/1.35 "IBM Plex Mono",monospace;text-transform:uppercase;letter-spacing:.08em}
.issue-stamp{margin-left:auto;display:grid;grid-template-columns:auto auto;align-items:center;border:1px solid var(--ink);transform:rotate(2deg);font:9px/1 "IBM Plex Mono",monospace;text-transform:uppercase;letter-spacing:.08em}
.issue-stamp span{padding:5px 7px}.issue-stamp strong{grid-row:span 2;font:30px/1 "DM Serif",serif;padding:7px 10px;border-left:1px solid var(--ink)}

.hero{height:570px;position:relative;overflow:hidden;border-bottom:2px solid var(--ink);padding:60px 7vw;background:var(--yellow)}
.hero::after{content:"";position:absolute;width:520px;height:520px;border:1px solid rgba(24,25,21,.3);border-radius:50%;right:-180px;top:-190px;box-shadow:0 0 0 65px rgba(255,255,255,.08),0 0 0 130px rgba(255,255,255,.08)}
.hero-kicker{display:flex;justify-content:space-between;width:min(760px,60vw);font:11px "IBM Plex Mono",monospace;text-transform:uppercase;letter-spacing:.12em;border-bottom:1px solid var(--ink);padding-bottom:9px}
.hero h1{font:clamp(64px,8vw,122px)/.82 "DM Serif",serif;letter-spacing:-.045em;margin:32px 0 25px;position:relative;z-index:1}
.hero h1 em{font-weight:400;color:var(--blue)}
.hero-copy{font-size:18px;line-height:1.5;max-width:490px;margin:0}
.hero-note{position:absolute;right:4vw;bottom:28px;font:10px/1.5 "IBM Plex Mono",monospace;text-transform:uppercase;transform:rotate(-7deg)}
.route-map{position:absolute;left:58%;top:65px;width:44%;height:455px;z-index:2}
.route-map::before,.route-map::after{content:"";position:absolute;background:var(--red);height:18px;border:3px solid var(--ink);transform-origin:left center}
.route-map::before{width:51%;left:3%;top:62%;transform:rotate(-42deg)}
.route-map::after{width:62%;left:42%;top:29%;transform:rotate(34deg)}
.route-dot{position:absolute;width:36px;height:36px;border-radius:50%;background:var(--paper);border:7px solid var(--ink);z-index:2}.d1{left:4%;top:68%}.d2{left:18%;top:55%}.d3{left:32%;top:42%}.d4{left:45%;top:30%;background:var(--blue)}.d5{left:60%;top:39%}.d6{left:74%;top:49%}.d7{left:88%;top:59%}.d8{left:98%;top:66%}
.route-label{position:absolute;font:10px "IBM Plex Mono",monospace;text-transform:uppercase;background:var(--ink);color:white;padding:6px 9px;z-index:3;white-space:nowrap}.route-label-a{left:0;top:77%}.route-label-b{right:0;top:77%}

.explore{padding:80px 5vw 120px;max-width:1440px;margin:auto}
.section-heading{text-align:center}.eyebrow{font:11px "IBM Plex Mono",monospace;text-transform:uppercase;letter-spacing:.16em}.section-heading h2{font:clamp(43px,5vw,72px)/1 "DM Serif",serif;margin:15px 0}.result-count{font:12px "IBM Plex Mono",monospace;color:var(--muted);text-transform:uppercase}
.control-panel{margin:45px auto 26px;display:grid;grid-template-columns:1.5fr 1fr .8fr;border:2px solid var(--ink);max-width:1120px;background:var(--white);box-shadow:8px 8px 0 var(--ink)}
.search-field,.select-field{padding:16px 20px;border-right:1px solid var(--ink)}
.search-field>span:first-child,.select-field>span:first-child{display:block;font:9px "IBM Plex Mono",monospace;text-transform:uppercase;letter-spacing:.14em;margin-bottom:7px;color:var(--muted)}
.input-wrap,.select-wrap{display:flex;align-items:center}.input-wrap svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;margin-right:10px}
input[type=search],select{font-size:16px;background:transparent;border:0;width:100%;min-width:0;padding:5px 0}input::placeholder{color:#969487}select{cursor:pointer;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink) 50%),linear-gradient(135deg,var(--ink) 50%,transparent 50%);background-position:calc(100% - 10px) 50%,calc(100% - 5px) 50%;background-size:5px 5px;background-repeat:no-repeat}
.saved-toggle{border:0;background:var(--ink);color:white;padding:15px 20px;display:flex;align-items:center;justify-content:center;gap:12px;cursor:pointer;text-align:left}.saved-toggle:hover{background:var(--blue)}.saved-toggle[aria-pressed=true]{background:var(--red)}.saved-toggle b,.saved-toggle small{display:block}.saved-toggle b{font-size:14px}.saved-toggle small{font:9px "IBM Plex Mono",monospace;text-transform:uppercase;margin-top:3px}.ticket-icon{font-size:25px}
.map-legend{display:flex;justify-content:center;gap:24px;margin:35px 0 70px;font:9px "IBM Plex Mono",monospace;text-transform:uppercase}.map-legend span{display:flex;align-items:center;gap:7px}.map-legend i{width:9px;height:9px;border-radius:50%;background:var(--category)}.map-legend .places{--category:var(--blue)}.map-legend .movement{--category:var(--red)}.map-legend .people{--category:var(--green)}.map-legend .food{--category:var(--yellow)}.map-legend .culture{--category:var(--purple)}

.stories{max-width:1120px;margin:auto;position:relative;display:grid;gap:0}
.stories::before{content:"";position:absolute;width:12px;background:var(--ink);left:calc(50% - 6px);top:0;bottom:0;border-radius:10px}
.story{display:grid;grid-template-columns:1fr 110px 1fr;min-height:305px;position:relative;--category:var(--blue)}
.story[data-category=Movement]{--category:var(--red)}.story[data-category=People]{--category:var(--green)}.story[data-category=Food]{--category:var(--yellow)}.story[data-category=Culture]{--category:var(--purple)}
.story-card{grid-column:1;background:var(--white);border:2px solid var(--ink);align-self:start;margin:0 0 42px;position:relative;box-shadow:7px 7px 0 var(--category);transition:transform .18s ease,box-shadow .18s ease}.story:nth-child(even) .story-card{grid-column:3;box-shadow:-7px 7px 0 var(--category)}
.story[data-category=Food] .category-badge,.story[data-category=Food] .story-stop{color:var(--ink)}
.story-card::after{content:"";position:absolute;top:43px;right:-57px;width:55px;height:8px;background:var(--ink)}.story:nth-child(even) .story-card::after{right:auto;left:-57px}
.story-stop{grid-column:2;grid-row:1;justify-self:center;margin-top:25px;width:58px;height:58px;border-radius:50%;border:9px solid var(--ink);background:var(--category);z-index:1;display:grid;place-items:center;color:white;font:bold 12px "IBM Plex Mono",monospace;box-shadow:0 0 0 5px var(--paper)}
.story:nth-child(even) .story-stop{grid-column:2}
.story-image{width:100%;height:140px;display:block;object-fit:cover;filter:saturate(.72) contrast(1.08);border-bottom:1px solid var(--ink)}
.story-card-content{padding:19px 21px 22px}.story-meta{display:flex;justify-content:space-between;align-items:center;font:9px "IBM Plex Mono",monospace;text-transform:uppercase;letter-spacing:.08em}.category-badge{background:var(--category);color:white;padding:5px 8px}.story-card h3{font:30px/1.02 "DM Serif",serif;margin:18px 0 9px}.story-card p{font-size:13px;line-height:1.45;margin:0 0 19px;color:#4f5048}.story-actions{display:flex;align-items:center;justify-content:space-between;border-top:1px solid #c5c2b5;padding-top:13px}.byline{font:9px "IBM Plex Mono",monospace;text-transform:uppercase}.open-item{border:0;background:transparent;padding:7px 0;font-weight:700;font-size:12px;cursor:pointer}.open-item:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:4px}.story-saved{position:absolute;right:12px;top:12px;background:var(--red);color:#fff;border:1px solid var(--ink);padding:6px 9px;font:9px "IBM Plex Mono",monospace;text-transform:uppercase;transform:rotate(3deg)}
.empty-state{text-align:center;border:2px dashed var(--ink);max-width:720px;margin:20px auto;padding:55px 25px;background:rgba(255,255,255,.25)}.empty-state[hidden]{display:none}.empty-sign{font-size:55px}.empty-state h3{font:40px "DM Serif",serif;margin:8px}.empty-state>p:not(.eyebrow){color:var(--muted)}.reset-button{background:var(--ink);color:white;border:0;padding:13px 20px;font-weight:700;cursor:pointer;margin-top:10px}

footer{background:var(--ink);color:var(--paper);padding:55px 5vw;display:grid;grid-template-columns:1.5fr 1fr 1fr auto;gap:40px;align-items:end}footer p{margin:0;font-size:14px;line-height:1.5}.footer-name{font:50px "DM Serif",serif}.footer-note{font:9px/1.6 "IBM Plex Mono",monospace;text-transform:uppercase;color:#aaa99f}footer a{color:inherit;font-size:12px}

.detail-overlay{position:fixed;inset:0;z-index:100;background:rgba(24,25,21,.92);overflow-y:auto;padding:32px;animation:veil .22s ease both}
.detail-shell{width:min(1120px,100%);min-height:calc(100vh - 64px);margin:auto;background:var(--paper);position:relative;display:grid;grid-template-columns:230px 1fr;box-shadow:15px 15px 0 var(--blue);animation:sheet .28s ease both}
.detail-aside{background:var(--category,var(--blue));color:white;padding:32px 26px;display:flex;flex-direction:column;min-height:100%}.detail-aside .brand-name{font-size:26px}.detail-line{width:11px;background:var(--ink);flex:1;margin:35px 0 20px 21px;min-height:170px;position:relative;border-radius:8px}.detail-line::before,.detail-line::after{content:"";position:absolute;width:38px;height:38px;border:7px solid var(--ink);background:var(--paper);border-radius:50%;left:50%;transform:translateX(-50%)}.detail-line::before{top:12%}.detail-line::after{bottom:12%;background:var(--yellow)}.detail-aside-note{font:9px/1.5 "IBM Plex Mono",monospace;text-transform:uppercase}
.detail-main{padding:36px clamp(35px,6vw,90px) 70px;position:relative;background-image:linear-gradient(90deg,transparent 49.8%,rgba(24,25,21,.07) 50%,transparent 50.2%)}
.detail-shell[data-category=Food] .detail-aside,.detail-shell[data-category=Food] .article-category{color:var(--ink)}
.detail-top{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--ink);padding-bottom:17px}.close-detail{border:0;background:transparent;font-weight:700;cursor:pointer;padding:9px 0}.close-detail:hover{text-decoration:underline}.detail-issue{font:9px "IBM Plex Mono",monospace;text-transform:uppercase;letter-spacing:.12em}
.article-header{padding:58px 0 35px}.article-category{display:inline-block;background:var(--category);color:white;font:10px "IBM Plex Mono",monospace;text-transform:uppercase;padding:6px 9px}.article-header h2{font:clamp(48px,6vw,82px)/.92 "DM Serif",serif;letter-spacing:-.03em;margin:22px 0}.article-deck{font:20px/1.45 "DM Serif",serif;max-width:650px;margin:0}.article-info{display:flex;gap:18px;font:9px "IBM Plex Mono",monospace;text-transform:uppercase;margin-top:26px}.article-figure{margin:0 -20px 45px;position:relative}.article-figure img{width:100%;height:330px;object-fit:cover;display:block;filter:saturate(.7) contrast(1.05)}.article-figure figcaption{font:8px "IBM Plex Mono",monospace;text-transform:uppercase;margin-top:8px;padding:0 20px;color:var(--muted)}
.article-body{max-width:680px;margin:auto}.article-body p{font:18px/1.75 "DM Serif",serif;margin:0 0 1.4em}.article-body p:first-child::first-letter{float:left;font-size:74px;line-height:.75;padding:9px 9px 0 0;color:var(--category)}
.article-ticket{margin:65px auto 15px;max-width:680px;border:2px solid var(--ink);background:var(--yellow);display:grid;grid-template-columns:1fr auto;align-items:stretch;transform:rotate(-1deg);box-shadow:7px 7px 0 var(--ink)}.ticket-copy{padding:21px}.ticket-copy .eyebrow{margin:0 0 8px}.ticket-copy strong{font:24px "DM Serif",serif}.save-item{border:0;border-left:2px dashed var(--ink);background:transparent;font-weight:700;padding:20px 26px;cursor:pointer;min-width:180px}.save-item:hover{background:rgba(255,255,255,.25)}.save-item[aria-pressed=true]{background:var(--red);color:white}
.reading-end{text-align:center;font:9px "IBM Plex Mono",monospace;text-transform:uppercase;margin-top:55px}.reading-end::before{content:"";display:block;width:9px;height:9px;border-radius:50%;background:var(--category);margin:0 auto 12px;box-shadow:18px 0 0 var(--ink),-18px 0 0 var(--ink)}
body.detail-open{overflow:hidden}
@keyframes veil{from{opacity:0}}@keyframes sheet{from{opacity:0;transform:translateY(25px)}}

@media (max-width:800px){
  .masthead{height:78px;padding:0 20px}.brand-name{font-size:28px}.brand-tag{display:none}.issue-stamp span{display:none}.issue-stamp strong{font-size:25px;border:0;padding:7px}.issue-stamp::before{content:"NO.";font:8px "IBM Plex Mono",monospace;padding-left:6px}
  .hero{height:480px;padding:45px 22px}.hero-kicker{width:100%;font-size:9px}.hero h1{font-size:56px;line-height:.88;margin-top:28px}.hero-copy{font-size:15px;max-width:330px}.route-map{left:25%;top:250px;width:85%;height:220px}.route-map::before{height:12px;top:63%}.route-map::after{height:12px}.route-dot{width:25px;height:25px;border-width:5px}.route-label{font-size:7px}.hero-note{display:none}
  .explore{padding:60px 17px 90px}.section-heading h2{font-size:44px}.control-panel{grid-template-columns:1fr;margin-top:32px;box-shadow:5px 5px 0 var(--ink)}.search-field,.select-field{border-right:0;border-bottom:1px solid var(--ink);padding:13px 15px}.saved-toggle{justify-content:flex-start;padding:13px 16px}.map-legend{justify-content:flex-start;overflow-x:auto;gap:18px;margin:30px 0 45px;padding:4px 2px}.map-legend span{flex:0 0 auto}
  .stories{padding-left:0}.stories::before{left:20px;width:8px}.story{grid-template-columns:55px 1fr;min-height:auto;margin-bottom:38px}.story-card,.story:nth-child(even) .story-card{grid-column:2;margin:0;box-shadow:5px 5px 0 var(--category)}.story-card::after,.story:nth-child(even) .story-card::after{left:-22px;right:auto;top:29px;width:20px;height:6px}.story-stop,.story:nth-child(even) .story-stop{grid-column:1;width:36px;height:36px;border-width:6px;margin-top:14px;font-size:8px;box-shadow:0 0 0 4px var(--paper)}.story-image{height:112px}.story-card-content{padding:16px}.story-card h3{font-size:26px}.story-meta{font-size:8px}
  footer{grid-template-columns:1fr;gap:20px;padding:45px 24px}.footer-name{font-size:42px}
  .detail-overlay{padding:0}.detail-shell{width:100%;min-height:100vh;display:block;box-shadow:none}.detail-aside{display:none}.detail-main{padding:18px 20px 60px}.article-header{padding:38px 0 28px}.article-header h2{font-size:49px}.article-deck{font-size:18px}.article-info{gap:10px;flex-wrap:wrap}.article-figure{margin:0 0 34px}.article-figure img{height:235px}.article-figure figcaption{padding:0}.article-body p{font-size:17px;line-height:1.7}.article-ticket{grid-template-columns:1fr;margin-top:45px}.save-item{border-left:0;border-top:2px dashed var(--ink);min-width:0}.detail-top{position:sticky;top:-18px;background:var(--paper);z-index:2;padding:18px 0 14px}
}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
