/*
Theme Name: Sunday Roamin'
Theme URI: https://sundayroamin.example.com/
Author: Studio GNU
Author URI: https://studio-gnu.example.com/
Description: Kyoto-based lifestyle & outdoor media site by Kose & Mari — 山・まち・食・銭湯をめぐる日曜日の記録。A standalone WordPress theme (no parent theme required) built from the Sunday Roamin' Claude Design handoff (desktop.html / mobile.html).
Version: 1.0.0
Requires at least: 6.0
Tested up to: 6.6
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: sunday-roamin
*/

/* ==========================================================================
   Sunday Roamin' — design tokens (from the Claude Design handoff)
   ========================================================================== */
:root {
  --sr-bg: #FDFCFA;
  --sr-ink: #1A1A18;
  --sr-ink-soft: #3A3833;
  --sr-body: #2E2C27;
  --sr-muted: #55524A;
  --sr-muted-2: #8C8779;
  --sr-line: #EFEBE3;
  --sr-line-2: #DFDAD0;
  --sr-accent: #8DCCFD;
  --sr-accent-line: #C9E6FE;
  --sr-photo-a: #E7E4DD;
  --sr-photo-b: #F2EFE8;
  --sr-green-bg: #EDF1EC;
  --sr-green-line: #C4CCC2;
  --sr-series-ink: #5F7159;
  --sr-series-line: #CBD6C8;
  --sr-series-line-soft: #E2E7E0;
  --sr-footer-bg: #121210;
  --sr-footer-fg: #F2EFE6;
  --sr-font-en: 'Archivo', 'Zen Kaku Gothic New', system-ui, sans-serif;
  --sr-font-jp: 'Zen Kaku Gothic New', system-ui, sans-serif;
  --sr-font-serif: 'EB Garamond', serif;
}

/* ==========================================================================
   Reset / base — this is a standalone theme, so we supply our own reset
   rather than relying on any parent theme.
   ========================================================================== */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
/* overflow-x: clip ではなく hidden だと、hidden が内部的に「overflow: hidden auto」
   に解決されてスクロールコンテナを作ってしまい、その配下の position: sticky が
   一切効かなくなる（実際にスクロールしているのは document 側なので、sticky が
   「スクロールしないコンテナ」を基準に解決されてしまう）。clip は横方向の
   はみ出し抑制だけを行い、スクロールコンテナを作らないため sticky と両立する。 */
html { overflow-x: clip; }
body {
  background: var(--sr-bg);
  color: var(--sr-ink);
  font-family: var(--sr-font-en);
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
}
h1, h2, h3, h4, h5, h6, p, ul, ol, figure, blockquote { margin: 0; padding: 0; }
ul, ol { list-style: none; }
a { color: var(--sr-ink); text-decoration: none; }
a:hover { color: var(--sr-accent); }
img { max-width: 100%; height: auto; display: block; }
button, input, select, textarea { font-family: inherit; }
::selection { background: var(--sr-ink); color: var(--sr-bg); }
.sr-wrap { max-width: 1400px; margin: 0 auto; }
.screen-reader-text { position: absolute !important; left: -9999px; }

/* ==========================================================================
   Scroll progress bar
   ========================================================================== */
.sr-scrollbar { position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 900; pointer-events: none; }
.sr-scrollbar-fill { height: 100%; width: 0%; background: var(--sr-accent); transition: width .12s linear; }

/* ==========================================================================
   Header
   ========================================================================== */
.sr-header { position: sticky; top: 0; z-index: 50; background: var(--sr-bg); border-bottom: 1px solid var(--sr-line); }
.sr-header-in { position: relative; height: 78px; display: flex; align-items: center; justify-content: center; padding: 0 26px; }
.sr-logo { position: absolute; left: 26px; display: flex; align-items: center; }
.sr-logo img { height: 52px; width: auto; }
.sr-nav { display: flex; align-items: center; gap: 34px; font-size: 15px; font-weight: 500; flex-wrap: wrap; justify-content: center; list-style: none; margin: 0; padding: 0; }
.sr-nav a { color: var(--sr-accent); }
.sr-nav a.current { color: var(--sr-ink); }
/* sr_nav() (wp_nav_menu with no container/items_wrap) outputs bare <li> menu-item
   wrappers with no enclosing <ul> — display:contents drops that <li> box (and its
   default list marker) entirely so its <a> child lays out as a direct flex item,
   exactly as if the <li> wrapper weren't there. Prevents stray bullets / cramped
   overlap in the header nav, the PC full-screen menu, and the footer menu. */
.sr-nav li, .sr-footer-menu li, .sr-pc-menu li { display: contents; list-style: none; }
.sr-burger { position: absolute; right: 26px; display: none; flex-direction: column; gap: 6px; align-items: center; justify-content: center; width: 44px; height: 44px; background: none; border: 0; cursor: pointer; padding: 0; }
.sr-burger span { width: 24px; height: 1px; background: var(--sr-ink); display: block; }

/* Full-screen mobile menu */
/* z-index must clear every in-page overlay on the site, including the Map page's
   petal card / filters (z-index 600) and Leaflet's own panes (up to ~700) — otherwise
   those elements show through on top of the "full-screen" menu instead of being covered. */
.sr-mobile-menu { display: none; position: fixed; inset: 0; z-index: 9000; background: var(--sr-accent); flex-direction: column; }
.sr-mobile-menu.is-open { display: flex; }
body.sr-menu-open { overflow: hidden; }
.sr-mobile-menu-top { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; height: 64px; border-bottom: 1px solid var(--sr-line); flex: none; }
.sr-mobile-menu-top img { height: 34px; width: auto; }
.sr-mobile-menu-close { width: 44px; height: 44px; display: flex; align-items: center; justify-content: center; font-size: 26px; line-height: 1; background: none; border: 0; cursor: pointer; color: var(--sr-ink); }
.sr-mobile-menu-nav { flex: 1; display: flex; flex-direction: column; padding: 8px 16px; overflow-y: auto; }
.sr-mobile-menu-item { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 22px 0; border-bottom: 1px solid var(--sr-line); font-size: 26px; font-weight: 400; letter-spacing: -0.01em; color: var(--sr-ink); }
/* Same invisible-on-tap trap as the footer/PC-menu links (see B-2/E-3/H-2 notes
   below): the global a:hover rule turns text var(--sr-accent), which is also
   this menu's own background — on mobile, a tap fires :hover, so the item you
   just tapped would otherwise blend straight into the background. */
.sr-mobile-menu a:hover { color: var(--sr-ink); }
.sr-mobile-menu-item .s { font-family: var(--sr-font-jp); font-size: 12px; font-weight: 500; color: #FDFCFA; white-space: nowrap; }
.sr-mobile-menu-social { display: flex; gap: 10px; padding: 20px 16px 28px; flex: none; }
.sr-mobile-menu-social a { width: 42px; height: 42px; border: 0; border-radius: 50%; display: flex; align-items: center; justify-content: center; overflow: hidden; font-size: 11px; font-weight: 600; color: var(--sr-ink); }
.sr-mobile-menu-social a img { width: 100%; height: 100%; object-fit: cover; }

/* PC-only burger — sits at top right alongside the inline nav, opens the full-screen menu below.
   Plain 3-bar icon, same shape as the mobile burger. */
.sr-burger.sr-burger-pc { display: flex; flex-direction: column; gap: 6px; align-items: center; justify-content: center; }
.sr-burger-pc span { width: 26px; height: 1px; background: var(--sr-accent); }

/* Full-screen PC menu — reuses the footer's markup (via sr_footer_body()), which already uses the same light-blue/ink look. */
.sr-pc-menu { display: none; position: fixed; inset: 0; z-index: 9001; background: var(--sr-accent); color: var(--sr-ink); flex-direction: column; overflow-y: auto; }
.sr-pc-menu.is-open { display: flex; }
body.sr-pc-menu-open { overflow: hidden; }
.sr-pc-menu-close { position: absolute; top: 26px; right: 26px; width: 44px; height: 44px; display: flex; align-items: center; justify-content: center; font-size: 28px; line-height: 1; background: none; border: 0; cursor: pointer; color: var(--sr-ink); }
.sr-pc-menu-in { flex: 1; display: flex; flex-direction: column; justify-content: center; max-width: 1040px; width: 100%; margin: 0 auto; padding: 90px 26px; }
.sr-pc-menu .sr-footer-grid { grid-template-columns: minmax(0,1fr) 340px; }
.sr-pc-menu .sr-footer-main, .sr-pc-menu .sr-footer-aside { padding: 0 34px; }
.sr-pc-menu .sr-footer-bottom { display: none; }

@media (max-width: 860px) {
  .sr-logo { left: 16px; }
  .sr-logo img { height: 40px; }
  .sr-nav { display: none; }
  .sr-burger { display: flex; right: 16px; }
  .sr-burger.sr-burger-pc { display: none; }
  .sr-pc-menu { display: none !important; }
}

/* ==========================================================================
   Section heading
   ========================================================================== */
.sr-heading { display: flex; align-items: center; gap: 26px; padding-bottom: 40px; flex-wrap: wrap; }
.sr-heading h1, .sr-heading h2 { margin: 0; font-size: 56px; line-height: 1; font-weight: 400; letter-spacing: -0.02em; }
.sr-heading .sr-jp { font-family: var(--sr-font-jp); font-size: 14px; font-weight: 700; letter-spacing: .04em; }
.sr-heading .sr-bar { color: #C9C3B7; font-size: 20px; }
.sr-heading.on-green .sr-bar { color: #B7C0B6; }
.sr-heading.on-accent .sr-bar { color: rgba(26,26,24,.35); }
.sr-heading .sr-count { margin-left: auto; font-family: var(--sr-font-serif); font-size: 14px; color: var(--sr-muted); }

@media (max-width: 640px) {
  .sr-heading { gap: 14px; padding-bottom: 26px; }
  .sr-heading h1, .sr-heading h2 { font-size: 32px; }
  .sr-heading .sr-count { margin-left: 0; width: 100%; }
}

/* ==========================================================================
   Photo placeholder (used until a featured image is set)
   ========================================================================== */
.sr-ph { position: relative; width: 100%; background: repeating-linear-gradient(135deg, var(--sr-photo-a) 0 6px, var(--sr-photo-b) 6px 12px); background-size: cover; background-position: center; overflow: hidden; }
.sr-ph img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ==========================================================================
   Hero — the slide itself IS the photo box (background-image once a
   featured image is set); text sits on top of it, anchored to the bottom.
   ========================================================================== */
.sr-hero { display: flex; align-items: stretch; border-bottom: 1px solid var(--sr-line); }
.sr-hero-tab { width: 52px; min-width: 52px; border-right: 1px solid var(--sr-accent-line); display: flex; align-items: flex-start; justify-content: center; padding: 20px 0; }
.sr-hero-tab span { writing-mode: vertical-rl; font-family: var(--sr-font-jp); font-size: 13px; letter-spacing: .5em; color: var(--sr-accent); font-weight: 500; }
.sr-hero-main { flex: 1; min-width: 0; aspect-ratio: 2400 / 1500; max-height: 700px; position: relative; }
.sr-hero-slide { display: none; position: relative; height: 100%; }
.sr-hero-slide.is-active { display: block; }
/* Crossfade transition (B-11): the outgoing slide is briefly absolutely-positioned
   and faded to opacity 0 on top of the incoming slide, which has already taken over
   the normal document flow — see main.js's show(). */
.sr-hero-slide.is-leaving { position: absolute; inset: 0; opacity: 0; transition: opacity .6s ease; pointer-events: none; z-index: 2; }
.sr-hero-photo-link { display: block; height: 100%; }
.sr-hero-photo { height: 100%; }
.sr-hero-photo .sr-slot { position: absolute; top: 16px; left: 20px; }
.sr-hero-photo::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 60%; background: linear-gradient(to top, rgba(10,10,9,.62), rgba(10,10,9,0) 100%); pointer-events: none; }
.sr-hero-badge { display: none; }
.sr-hero-caten { display: none; }
.sr-hero-series { display: none; }
.sr-hero-text { position: absolute; left: 0; right: 0; bottom: 0; padding: 0 0 34px 40px; color: #FDFCFA; }
.sr-hero-cat { display: flex; align-items: center; gap: 14px; padding-bottom: 14px; }
.sr-hero-cat .en { font-size: 12px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; }
.sr-hero-cat .sep { color: rgba(253,252,250,.45); }
.sr-hero-cat .jp { font-size: 12px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; }
.sr-hero-title { margin: 0; max-width: 820px; font-family: var(--sr-font-jp); font-size: 36px; line-height: 1.5; font-weight: 500; letter-spacing: .01em; }
.sr-hero-title a { color: inherit; }
.sr-hero-date { margin: 22px 0 0; font-family: var(--sr-font-serif); font-size: 15px; letter-spacing: .04em; color: rgba(253,252,250,.85); }
.sr-hero-ctrl { display: flex; align-items: center; gap: 34px; padding-top: 26px; flex-wrap: wrap; }
.sr-hero-arrows { display: flex; align-items: center; gap: 24px; }
.sr-hero-ctrl button { font-size: 20px; letter-spacing: -.1em; background: none; border: 0; cursor: pointer; color: #FDFCFA; }
.sr-hero-dots { display: flex; align-items: center; gap: 18px; padding-left: 120px; }
.sr-hero-dots button { width: 26px; height: 26px; border-radius: 50%; border: 1px solid transparent; display: flex; align-items: center; justify-content: center; font-family: var(--sr-font-serif); font-size: 13px; color: rgba(253,252,250,.6); background: none; cursor: pointer; }
.sr-hero-dots button.is-active { border-color: #FDFCFA; color: #FDFCFA; }
.sr-hero-yt { width: 44px; min-width: 44px; background: var(--sr-accent); color: var(--sr-ink); display: flex; align-items: center; justify-content: center; }
/* Same invisible-on-hover trap as B-2/E-3: the global a:hover rule turns text
   var(--sr-accent), which is this button's own background. */
.sr-hero-yt:hover { color: var(--sr-ink); }
.sr-hero-yt span { writing-mode: vertical-rl; font-size: 13px; font-weight: 600; letter-spacing: .16em; }

@media (max-width: 860px) {
  .sr-hero { flex-direction: column; border-bottom: 0; }
  .sr-hero-main { order: 1; height: auto; aspect-ratio: auto; max-height: none; }
  .sr-hero-tab { order: 2; writing-mode: initial; width: 100%; border-right: 0; border-bottom: 1px solid var(--sr-line); padding: 16px 16px 20px 16px; }
  .sr-hero-tab span { writing-mode: horizontal-tb; letter-spacing: .1em; font-size: 13px; line-height: 2; color: #8dccfd; display: inline-block; border-left: 3px solid var(--sr-accent); padding-left: 12px; }
  .sr-hero-yt { display: none; }
  .sr-hero-slide.is-active { display: flex; flex-direction: column; }
  .sr-hero-photo { position: relative; height: auto; aspect-ratio: 4/5; }
  .sr-hero-toprow { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
  .sr-hero-badge { display: inline-flex; background: var(--sr-accent); color: var(--sr-ink); padding: 6px 12px; font-family: var(--sr-font-jp); font-size: 11px; font-weight: 600; letter-spacing: .08em; }
  .sr-hero-text { position: absolute; left: 0; right: 0; bottom: 0; padding: 0 16px 22px; color: #FDFCFA; }
  .sr-hero-caten { display: block; margin: 0; font-size: 11px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: #FDFCFA; }
  .sr-hero-cat { display: none; }
  .sr-hero-title { font-size: 19px; line-height: 1.5; font-weight: 700; margin-top: 14px; }
  .sr-hero-series { display: block; margin: 12px 0 0; font-family: var(--sr-font-jp); font-size: 13px; font-weight: 500; color: rgba(253,252,250,.88); }
  .sr-hero-date { margin-top: 6px; color: rgba(253,252,250,.78); }
  .sr-hero-ctrl { justify-content: space-between; gap: 0; padding-top: 18px; }
  .sr-hero-dots { padding-left: 0; gap: 10px; }
  .sr-hero-arrows button, .sr-hero-dots button { width: 44px; height: 44px; }
  .sr-hero-dots button { width: 26px; height: 26px; }
}

/* ==========================================================================
   Article grid (masonry via CSS columns)
   ========================================================================== */
.sr-section { padding: 56px 34px 64px; }
.sr-grid { column-count: 3; column-gap: 34px; }
/* Front page "Latest Articles" (as opposed to the Magazine listing's .sr-grid-list)
   runs one column wider, with smaller cards — matches the GINZA-style dense grid. */
.sr-grid:not(.sr-grid-list):not(.sr-grid-latest) { column-count: 4; column-gap: 26px; }
.sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card h3 { font-size: 16px; }
/* Magazine listing — CSS Grid rather than CSS-columns masonry (unlike .sr-grid
   above). CSS-columns balances content by estimating column height, which
   with only a handful of tall cards can dump everything into the first
   column instead of spreading across 4 — Grid lays cards out strictly in
   query order (newest first, left to right, wrapping to new rows), so that
   can't happen regardless of how many articles exist. */
.sr-grid-list { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); column-gap: 26px; row-gap: 46px; align-items: start; }
.sr-grid-list .sr-card { display: block; margin-bottom: 0; }
.sr-grid-list .sr-card h3 { font-size: 16px; }
@media (max-width: 980px) {
  .sr-grid { column-count: 2; }
  .sr-grid-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) { .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) { column-count: 1; } }
.sr-card { display: inline-block; width: 100%; break-inside: avoid; margin-bottom: 46px; }
.sr-card .sr-ph { aspect-ratio: 3/4; display: flex; align-items: flex-end; padding: 10px; }
.sr-card .sr-new { position: absolute; right: 0; bottom: -1px; background: var(--sr-bg); padding: 5px 12px; font-family: var(--sr-font-jp); font-size: 13px; font-weight: 500; }
.sr-card .sr-cat { margin: 14px 0 0; font-size: 12px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--sr-accent); }
.sr-card h3 { margin: 10px 0 0; font-family: var(--sr-font-jp); font-size: 17px; line-height: 1.85; font-weight: 500; }
.sr-card .sr-series { margin: 10px 0 0; font-family: var(--sr-font-jp); font-size: 13px; line-height: 1.7; font-weight: 500; color: var(--sr-ink-soft); }
.sr-card .sr-date { margin: 10px 0 0; font-family: var(--sr-font-serif); font-size: 13px; letter-spacing: .03em; color: var(--sr-muted); }

/* Desktop masonry: vary each card's photo aspect ratio so the grid has a mix
   of large/small images instead of one uniform size, repeating every 9 cards
   (mirrors the design's RATIOS cycle). Scoped to desktop only — the mobile
   2-column grid and list view stay on a single uniform ratio. */
@media (min-width: 641px) {
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n+1) .sr-ph,
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n+6) .sr-ph,
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n+1) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n+6) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n) .sr-ph { aspect-ratio: 3/4; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n+2) .sr-ph,
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n+5) .sr-ph,
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n+8) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n+2) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n+5) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n+8) .sr-ph { aspect-ratio: 1/1; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n+3) .sr-ph,
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n+7) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n+3) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n+7) .sr-ph { aspect-ratio: 4/5; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(9n+4) .sr-ph,
  .sr-grid-list .sr-card:nth-child(9n+4) .sr-ph { aspect-ratio: 3/2; }
}

/* Front page "Latest Articles" (.sr-grid-latest, front-page.php) — always
   exactly 4 posts, in a fixed grid rather than the masonry above: one row of
   4 on desktop, 2x2 on tablet/mobile. Excluded from the masonry column-count
   and aspect-ratio-cycle rules above (:not(.sr-grid-latest)) so every card
   keeps the single uniform ratio from the .sr-card .sr-ph base rule instead —
   thumbnail heights line up evenly across the row. */
.sr-grid-latest { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 26px; }
.sr-grid-latest .sr-card { margin-bottom: 0; }
@media (max-width: 980px) {
  .sr-grid-latest { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px 14px; }
}
@media (max-width: 640px) {
  .sr-grid-latest .sr-card .sr-cat { font-size: 10px; margin-top: 11px; }
  .sr-grid-latest .sr-card h3 { font-size: 14px; margin-top: 7px; }
  .sr-grid-latest .sr-card .sr-series { display: none; }
  .sr-grid-latest .sr-card .sr-date { font-size: 12px; margin-top: 7px; }
}

.sr-empty { padding: 40px 0; text-align: center; font-family: var(--sr-font-jp); font-size: 14px; color: var(--sr-muted-2); }

.sr-more { display: flex; justify-content: center; padding: 12px 0 8px; }
.sr-more a { display: flex; align-items: center; justify-content: space-between; gap: 60px; background: #EFEDE8; color: var(--sr-ink); border-radius: 22px; padding: 26px 42px; min-width: 340px; font-family: var(--sr-font-jp); font-size: 15px; font-weight: 500; transition: background .15s, color .15s; }
.sr-more a:hover { background: var(--sr-ink); color: var(--sr-bg); }
.sr-more a span:last-child { display: inline-block; transition: transform .2s ease; }
.sr-more a:hover span:last-child { transform: translateX(4px); }
.sr-more.on-green a { background: var(--sr-bg); color: var(--sr-ink); }
/* .sr-more.on-green a and .sr-more a:hover have equal specificity, so without this
   explicit override the later (on-green) rule would win even while hovering and
   silently cancel the hover effect above for this variant. */
.sr-more.on-green a:hover { background: var(--sr-ink); color: var(--sr-bg); }

@media (max-width: 640px) {
  .sr-section { padding: 34px 16px 40px; }
  .sr-more a { min-width: 0; width: 100%; gap: 20px; padding: 20px 26px; }

  /* Front page "Latest Articles" — dedicated mobile design: a fixed 2-column
     grid (not the desktop masonry) showing only the first 6 cards. */
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) { display: grid; grid-template-columns: 1fr 1fr; column-count: initial; gap: 28px 14px; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card { margin-bottom: 0; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card:nth-child(n+7) { display: none; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card .sr-cat { font-size: 10px; margin-top: 11px; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card h3 { font-size: 14px; margin-top: 7px; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card .sr-series { display: none; }
  .sr-grid:not(.sr-grid-list):not(.sr-grid-latest) .sr-card .sr-date { font-size: 12px; margin-top: 7px; }

  /* Magazine listing — dedicated mobile design: a vertical list of cards,
     each with a wide landscape photo on top (not the old small portrait
     thumbnail-left/text-right row), not a masonry grid. */
  .sr-grid-list { display: flex; flex-direction: column; gap: 32px; column-count: initial; }
  .sr-grid-list .sr-card { display: block; margin-bottom: 0; padding-bottom: 32px; border-bottom: 1px solid var(--sr-line); }
  .sr-grid-list .sr-card .sr-ph { aspect-ratio: 16/9; padding: 0; margin-bottom: 14px; }
  .sr-grid-list .sr-card .sr-cat { margin-top: 0; font-size: 11px; }
  .sr-grid-list .sr-card h3 { font-size: 17px; }
  .sr-grid-list .sr-card .sr-series { font-size: 12px; color: var(--sr-ink-soft); }
  .sr-grid-list .sr-card .sr-date { font-size: 12px; }
}

/* ==========================================================================
   Video section (front page)
   ========================================================================== */
.sr-video { background: var(--sr-accent); color: var(--sr-ink); padding: 52px 34px 64px; }
.sr-video-grid { display: grid; grid-template-columns: minmax(0,1.55fr) minmax(0,1fr); gap: 34px; align-items: start; }
@media (max-width: 860px) { .sr-video-grid { grid-template-columns: 1fr; } }
.sr-video-main .sr-ph { aspect-ratio: 16/9; display: flex; align-items: center; justify-content: center; background: repeating-linear-gradient(135deg,#7CC2F5 0 6px,#9AD5FF 6px 12px); }
.sr-video-badge { position: absolute; top: 0; left: 0; background: rgba(26,26,24,.55); color: var(--sr-bg); padding: 8px 16px; font-size: 14px; font-weight: 500; }
.sr-play { width: 76px; height: 76px; border-radius: 50%; background: rgba(253,252,250,.95); display: flex; align-items: center; justify-content: center; }
.sr-play::after { content: ''; width: 0; height: 0; border-left: 19px solid var(--sr-ink); border-top: 12px solid transparent; border-bottom: 12px solid transparent; margin-left: 6px; }
.sr-play.small { width: 48px; height: 48px; }
.sr-play.small::after { border-left-width: 13px; border-top-width: 8px; border-bottom-width: 8px; margin-left: 4px; }
.sr-video-caption { margin: 22px 0 0; font-family: var(--sr-font-jp); font-size: 19px; line-height: 1.7; font-weight: 500; }
.sr-video-caption em { font-style: italic; font-weight: 600; }
.sr-video-side { display: flex; gap: 14px; align-items: stretch; }
.sr-video-side .label { writing-mode: vertical-rl; font-size: 13px; font-weight: 500; letter-spacing: .1em; padding-top: 8px; }
.sr-video-side-box { flex: 1; min-width: 0; border: 1px solid rgba(26,26,24,.3); border-radius: 14px; padding: 18px; }
.sr-video-side-item { display: block; padding-bottom: 18px; margin-bottom: 18px; border-bottom: 1px solid rgba(26,26,24,.25); }
.sr-video-side-item .sr-ph { aspect-ratio: 16/9; display: flex; align-items: center; justify-content: center; background: repeating-linear-gradient(135deg,#7CC2F5 0 6px,#9AD5FF 6px 12px); }
.sr-video-side-item p { margin: 14px 0 0; font-family: var(--sr-font-jp); font-size: 15px; line-height: 1.8; font-weight: 500; }
.sr-video-archive { display: flex; align-items: center; justify-content: space-between; font-family: var(--sr-font-jp); font-size: 14px; font-weight: 500; color: var(--sr-ink); border-bottom: 1px solid transparent; padding-bottom: 2px; transition: border-color .2s ease; }
.sr-video-archive span:last-child { display: inline-block; transition: transform .2s ease; }
/* The global a:hover rule turns link text var(--sr-accent) — invisible against this
   section's own var(--sr-accent) background, so this link (and anything else
   hovered inside .sr-video) needs its own hover color to stay legible. An
   underline + arrow-nudge stand in for the color change as the hover cue. */
.sr-video a:hover, .sr-video-archive:hover { color: var(--sr-ink); }
.sr-video-archive:hover { border-bottom-color: var(--sr-ink); }
.sr-video-archive:hover span:last-child { transform: translateX(4px); }

@media (max-width: 640px) {
  .sr-video { padding: 34px 16px 40px; }
  .sr-video-caption { font-size: 16px; margin-top: 16px; }
  .sr-video-side { flex-direction: column; border-top: 1px solid rgba(26,26,24,.25); margin-top: 24px; padding-top: 20px; }
  .sr-video-side .label { display: none; }
  .sr-video-side-box { border: 0; border-radius: 0; padding: 0; }
  .sr-video-side-item { display: grid; grid-template-columns: 132px minmax(0,1fr); gap: 14px; align-items: center; }
  .sr-video-side-item .sr-ph { aspect-ratio: 16/9; }
  .sr-video-side-item p { margin: 0; font-size: 13px; }
  .sr-video-archive { display: flex; align-items: center; justify-content: space-between; background: var(--sr-bg); border-radius: 20px; padding: 22px 26px; margin-top: 28px; }
}

/* ==========================================================================
   Album (horizontal scroll, front page)
   ========================================================================== */
.sr-album { background: var(--sr-green-bg); padding: 52px 0 64px; }
.sr-album-head { padding: 0 34px; }
.sr-album-row { display: flex; gap: 22px; overflow-x: auto; padding: 0 34px 26px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.sr-album-row::-webkit-scrollbar { display: none; }
.sr-album-card { flex: 0 0 300px; background: var(--sr-bg); padding: 16px; box-shadow: 0 1px 0 rgba(0,0,0,.04); }
.sr-album-card .sr-ph { aspect-ratio: 1/1; display: flex; align-items: flex-end; padding: 10px; }
.sr-album-card p.cap { margin: 18px 0 0; text-align: center; font-family: var(--sr-font-jp); font-size: 14px; line-height: 1.8; font-weight: 500; }
.sr-album-card p.date { margin: 12px 0 6px; text-align: center; font-family: var(--sr-font-serif); font-size: 13px; letter-spacing: .03em; color: var(--sr-muted); }
.sr-album-ctrl { display: flex; gap: 34px; padding: 8px 34px 0; }
.sr-album-ctrl button { font-size: 20px; letter-spacing: -.1em; background: none; border: 0; cursor: pointer; color: var(--sr-ink); }
.sr-slot { font: 9px/1 ui-monospace, SFMono-Regular, monospace; letter-spacing: .1em; text-transform: uppercase; color: #9C968A; }

@media (max-width: 640px) {
  .sr-album { padding: 34px 0 40px; }
  .sr-album-head, .sr-album-row, .sr-album .sr-more { padding-left: 16px; padding-right: 16px; }
  .sr-album-row { gap: 14px; }
  .sr-album-card { flex-basis: 236px; padding: 12px; }
  .sr-album-ctrl { padding: 8px 16px 0; gap: 20px; }
  .sr-album-ctrl button { width: 44px; height: 44px; }
}

/* ==========================================================================
   Special / Feature (front-page teaser — left見出し固定＋右カラム縦積み)
   ========================================================================== */
.sr-special-layout { display: grid; grid-template-columns: 300px 1fr; gap: 56px; align-items: start; }
.sr-special-stack { display: flex; flex-direction: column; gap: 64px; }
.sr-special-card { display: flex; align-items: center; gap: 30px; }
.sr-special-card .sr-ph { flex: 1.15 1 0; aspect-ratio: 4/3; display: flex; align-items: flex-end; padding: 12px; }
.sr-special-card-text { flex: 1 1 0; }
.sr-special-card .sr-no { position: absolute; right: 0; bottom: -1px; background: var(--sr-bg); padding: 5px 12px; font-family: var(--sr-font-serif); font-size: 14px; }
.sr-special-card h3 { margin: 0; font-family: var(--sr-font-jp); font-size: 21px; line-height: 1.75; font-weight: 500; }
.sr-special-card p { margin: 10px 0 0; font-family: var(--sr-font-jp); font-size: 13px; line-height: 1.95; color: var(--sr-muted); }

@media (max-width: 860px) {
  .sr-special-layout { grid-template-columns: 1fr; gap: 30px; }
  /* Special.sr-sticky-head は motion.js が付与するモーション用クラス。単一カラムの
     モバイルでは見出しを画面上部に固定させたくないため、この幅だけ static に戻す。 */
  .sr-special-head.sr-sticky-head { position: static; top: auto; }
  .sr-special-stack { gap: 30px; }
}
@media (max-width: 640px) {
  .sr-special-card { flex-direction: column; align-items: stretch; }
  .sr-special-card .sr-ph { flex: none; aspect-ratio: 16/10; }
  .sr-special-card h3 { font-size: 19px; }
}

/* Special archive — "Latest" lead card + "All Features" row list */
.sr-special-lead-wrap { background: var(--sr-green-bg); padding: 52px 34px 64px; }
.sr-special-lead { display: grid; grid-template-columns: minmax(0,1.4fr) minmax(0,1fr); gap: 44px; align-items: center; }
@media (max-width: 860px) { .sr-special-lead { grid-template-columns: 1fr; gap: 26px; } }
.sr-special-lead .sr-ph { aspect-ratio: 16/10; display: flex; align-items: flex-end; padding: 12px; }
.sr-special-lead .sr-no { position: absolute; right: 0; bottom: -1px; background: var(--sr-bg); padding: 6px 14px; font-family: var(--sr-font-serif); font-size: 15px; }
.sr-special-meta { display: flex; align-items: baseline; gap: 16px; flex-wrap: wrap; }
.sr-special-meta .tag { font-family: var(--sr-font-jp); font-size: 12px; font-weight: 600; color: var(--sr-accent); }
.sr-special-meta .count { font-family: var(--sr-font-serif); font-size: 14px; color: var(--sr-muted); }
.sr-special-lead h3 { margin: 18px 0 0; font-family: var(--sr-font-jp); font-size: 30px; line-height: 1.6; font-weight: 700; }
.sr-special-lead p.excerpt { margin: 20px 0 0; font-family: var(--sr-font-jp); font-size: 15px; line-height: 2.05; color: var(--sr-ink-soft); }
.sr-special-read { display: inline-block; margin-top: 26px; border-bottom: 1px solid var(--sr-ink); padding-bottom: 4px; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; }

.sr-special-list { display: flex; flex-direction: column; }
.sr-special-list-item { display: grid; grid-template-columns: minmax(0,320px) minmax(0,1fr); gap: 40px; align-items: center; padding: 34px 0; border-top: 1px solid var(--sr-line); transition: transform .25s ease; }
.sr-special-list-item:hover { transform: translateX(6px); }
.sr-special-list-item .sr-ph { aspect-ratio: 4/3; display: flex; align-items: flex-end; padding: 12px; }
.sr-special-list-item .sr-no { position: absolute; right: 0; bottom: -1px; background: var(--sr-bg); padding: 5px 12px; font-family: var(--sr-font-serif); font-size: 14px; }
.sr-special-list-item h3 { margin: 14px 0 0; font-family: var(--sr-font-jp); font-size: 24px; line-height: 1.65; font-weight: 700; }
.sr-special-list-item p.excerpt { margin: 12px 0 0; max-width: 620px; font-family: var(--sr-font-jp); font-size: 14px; line-height: 2.05; color: var(--sr-muted); }

@media (max-width: 640px) {
  .sr-special-lead-wrap { padding: 34px 16px 40px; }
  .sr-special-list-item { grid-template-columns: 1fr; gap: 16px; padding: 26px 0; }
  .sr-special-list-item:hover { transform: none; }
}

/* ==========================================================================
   Regulars (連載)
   ========================================================================== */
.sr-regulars { background: var(--sr-green-bg); padding: 52px 34px 72px; }
.sr-regulars-box { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1.1fr) minmax(0,1fr); border: 1px solid var(--sr-green-line); border-radius: 16px; background: #F6F8F5; position: relative; }
@media (max-width: 980px) { .sr-regulars-box { grid-template-columns: 1fr; } }
.sr-regulars-tag { position: absolute; left: -1px; top: 26px; writing-mode: vertical-rl; background: #F6F8F5; border: 1px solid var(--sr-green-line); border-left: none; border-radius: 0 12px 12px 0; padding: 14px 6px; font-size: 12px; font-weight: 600; letter-spacing: .08em; }
.sr-regulars-col1 { padding: 26px 26px 26px 44px; display: flex; flex-direction: column; gap: 10px; border-right: 1px solid var(--sr-green-line); }
.sr-regulars-col1 .sr-ph { aspect-ratio: 3/4; display: flex; align-items: flex-end; padding: 10px; }
.sr-regulars-col2 { padding: 26px; border-right: 1px solid var(--sr-green-line); }
.sr-regulars-col2 > p.head { margin: 0 0 18px; font-family: var(--sr-font-jp); font-size: 14px; font-weight: 700; border-bottom: 2px solid var(--sr-ink); display: inline-block; padding-bottom: 6px; }
.sr-regulars-posts { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: 18px; }
.sr-regulars-posts .sr-ph { aspect-ratio: 3/4; }
.sr-regulars-posts .cat { margin: 10px 0 0; font-size: 11px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--sr-accent); }
.sr-regulars-posts h4 { margin: 8px 0 0; font-family: var(--sr-font-jp); font-size: 14px; line-height: 1.75; font-weight: 700; }
.sr-regulars-posts .series { margin: 8px 0 0; font-family: var(--sr-font-jp); font-size: 12px; line-height: 1.7; color: var(--sr-muted); }
.sr-regulars-posts .date { margin: 8px 0 0; font-family: var(--sr-font-serif); font-size: 12px; color: #6B675E; }
.sr-regulars-col3 { padding: 26px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 26px; text-align: center; }
.sr-regulars-col3 .badge { display: inline-block; background: var(--sr-bg); padding: 10px 20px; font-family: var(--sr-font-jp); font-size: 26px; font-weight: 700; }
.sr-regulars-col3 p.desc { margin: 0; max-width: 400px; font-family: var(--sr-font-jp); font-size: 17px; line-height: 1.9; color: var(--sr-body); }
.sr-regulars-col3 a { display: flex; align-items: center; gap: 16px; font-family: var(--sr-font-jp); font-size: 18px; font-weight: 500; color: #6B675E; }

@media (max-width: 980px) {
  .sr-regulars-tag { display: none; }
  .sr-regulars-col1 { padding: 24px 20px; flex-direction: row; border-right: 0; border-bottom: 1px solid var(--sr-green-line); }
  .sr-regulars-col2 { border-right: 0; border-bottom: 1px solid var(--sr-green-line); }
}
@media (max-width: 640px) {
  .sr-regulars { padding: 34px 16px 44px; }
  /* Mobile design drops the "stills" column and unifies the spotlight +
     new-articles content into one card, spotlight first. */
  .sr-regulars-box { display: flex; flex-direction: column; padding: 22px 18px; }
  .sr-regulars-col1 { display: none; }
  .sr-regulars-col2 { order: 2; padding: 18px 0 0; border: 0; }
  .sr-regulars-col3 { order: 1; padding: 0 0 18px; gap: 16px; }
  .sr-regulars-col3 .badge { font-size: 22px; }
  .sr-regulars-col3 p.desc { font-size: 15px; }
  .sr-regulars-col3 a { font-size: 16px; }
  .sr-regulars-posts { grid-template-columns: 1fr 1fr; gap: 14px; }
}

/* ==========================================================================
   Sunday snapshots — Regulars 下の横流しマーキー帯
   ========================================================================== */
.sr-snapshots { padding: 56px 0 64px; }
.sr-snapshots-head { display: flex; align-items: baseline; gap: 14px; padding: 0 34px 22px; }
.sr-snapshots-label { font-family: var(--sr-font-en); font-size: 13px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--sr-muted); }
.sr-snapshots-count { font-family: var(--sr-font-serif); font-size: 14px; color: var(--sr-muted-2); }
.sr-snapshot-item { flex: 0 0 240px; }
.sr-snapshot-item .sr-ph { aspect-ratio: 3/2; }
@media (max-width: 640px) {
  .sr-snapshots { padding: 40px 0 48px; }
  .sr-snapshots-head { padding: 0 16px 16px; }
  .sr-snapshot-item { flex: 0 0 180px; }
}

/* ==========================================================================
   Magazine listing / category pills
   ========================================================================== */
.sr-pills { display: flex; flex-wrap: wrap; gap: 10px; padding-bottom: 40px; border-bottom: 1px solid var(--sr-line); margin-bottom: 40px; }
.sr-pills a, .sr-pills button { padding: 10px 20px; border: 1px solid var(--sr-line-2); border-radius: 999px; font-family: var(--sr-font-jp); font-size: 13px; color: var(--sr-ink-soft); background: none; cursor: pointer; }
.sr-pills a.is-active, .sr-pills button.is-active { background: var(--sr-ink); color: var(--sr-bg); border-color: var(--sr-ink); }

/* Magazine一覧のカテゴリバーだけ sticky（motion.js が .sr-sticky-bar を付与）。
   ヘッダー直下に貼り付いたときに詰まって見えないよう、上に少し余白を足す。 */
.sr-magazine-pills { padding-top: 18px; padding-bottom: 20px; }

@media (max-width: 640px) {
  .sr-pills { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin: 0 -16px 24px; padding: 0 16px 20px; }
  .sr-pills::-webkit-scrollbar { display: none; }
  .sr-pills a, .sr-pills button { flex: none; padding: 11px 18px; white-space: nowrap; }
  .sr-magazine-pills { padding: 14px 16px 20px; }
}

/* ==========================================================================
   Single article
   ========================================================================== */
.sr-article-back { padding: 22px 34px 0; }
.sr-article-back a { font-size: 12px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--sr-muted-2); }
.sr-article-head { max-width: 880px; margin: 0 auto; padding: 44px 34px 34px; }
.sr-article-head .sr-hero-cat { padding-bottom: 18px; }
.sr-article-head h1, .sr-article-head h2 { margin: 0; font-family: var(--sr-font-jp); font-size: 38px; line-height: 1.55; font-weight: 700; }
.sr-article-series { margin: 16px 0 0; font-family: var(--sr-font-jp); font-size: 15px; font-weight: 500; color: var(--sr-ink-soft); }
.sr-article-meta { display: flex; align-items: center; gap: 18px; padding-top: 18px; flex-wrap: wrap; }
.sr-article-meta p { margin: 0; font-family: var(--sr-font-serif); font-size: 15px; color: var(--sr-muted); }
.sr-article-meta .author { font-family: var(--sr-font-en); font-size: 12px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--sr-muted-2); }
/* Wider than .sr-article-body/.sr-toc (880px) on purpose — the featured
   image should read as clearly larger than the article's own inline photos,
   not the same size as them. */
.sr-article-thumb { max-width: 1200px; margin: 0 auto; padding: 0 34px; }
.sr-article-thumb .sr-ph { aspect-ratio: 16/9; }
.sr-article-body { max-width: 880px; margin: 0 auto; padding: 52px 34px 0; font-family: var(--sr-font-jp); font-size: 16px; line-height: 2.3; color: var(--sr-body); }
.sr-article-body p { margin: 0 0 34px; }
.sr-article-body blockquote { margin: 42px 0; padding: 0 0 0 24px; border-left: 2px solid var(--sr-accent); font-size: 21px; line-height: 2; font-weight: 500; }
.sr-article-body figure { margin: 12px 0 34px; }
.sr-article-body figure .sr-ph { aspect-ratio: 3/2; display: flex; align-items: flex-end; padding: 14px; }
.sr-article-body figcaption { padding-top: 12px; font-family: var(--sr-font-jp); font-size: 12px; line-height: 1.9; color: var(--sr-muted-2); }
.sr-article-body img { margin: 0 0 34px; }
/* Links inside article prose need their own underline + color — the sitewide
   a { text-decoration: none; color: var(--sr-ink) } default (nav/buttons/chips)
   would otherwise make a link in body text look identical to plain text. */
.sr-article-body a,
.mag-interview__text a,
.mag-interview__answer a,
.mag-interview__corner a {
  color: var(--sr-accent);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.sr-article-body a:hover,
.mag-interview__text a:hover,
.mag-interview__answer a:hover,
.mag-interview__corner a:hover {
  color: var(--sr-ink);
}
.sr-article-tags { max-width: 880px; margin: 0 auto; padding: 46px 34px 0; }
.sr-article-tags .tags { display: flex; flex-wrap: wrap; gap: 8px; }
.sr-article-tags .tags span, .sr-article-tags .tags a { padding: 8px 15px; border: 1px solid var(--sr-line-2); border-radius: 999px; font-family: var(--sr-font-jp); font-size: 12px; color: var(--sr-muted); }
.sr-read-next { padding: 72px 34px 84px; }
.sr-read-next-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 26px; }
@media (max-width: 860px) { .sr-read-next-grid { grid-template-columns: repeat(2, minmax(0,1fr)); } }
.sr-read-next-grid .sr-ph { aspect-ratio: 4/3; }
.sr-read-next-grid .cat { margin: 12px 0 0; font-size: 11px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--sr-accent); }
.sr-read-next-grid h3 { margin: 8px 0 0; font-family: var(--sr-font-jp); font-size: 15px; line-height: 1.8; font-weight: 500; }
.sr-read-next-grid .date { margin: 8px 0 0; font-family: var(--sr-font-serif); font-size: 12px; color: #6B675E; }

@media (max-width: 640px) {
  .sr-article-back { padding: 16px 18px 0; }
  .sr-article-head { padding: 30px 18px 24px; }
  .sr-article-head h1, .sr-article-head h2 { font-size: 26px; }
  .sr-article-thumb { padding: 0 18px; }
  .sr-article-body { padding: 36px 18px 0; font-size: 15px; line-height: 2.1; }
  .sr-article-body blockquote { font-size: 18px; }
  .sr-article-tags { padding: 34px 18px 0; }
  .sr-read-next { padding: 48px 18px 56px; }
}

/* ==========================================================================
   Series header (single article) — banner showing the post's "series" term,
   with display name / intro text / volume-number toggle / key visual coming
   from the ACF field group in inc/acf-fields-series.php via
   sr_get_series_display() (inc/taxonomies.php). Only rendered when the post
   has a series term (single.php).
   ========================================================================== */
.sr-series-header { background: var(--sr-green-bg); border-bottom: 1px solid var(--sr-series-line-soft); display: flex; align-items: stretch; }
.sr-series-header__rail { width: 52px; min-width: 52px; border-right: 1px solid var(--sr-series-line); display: flex; align-items: flex-start; justify-content: center; padding: 22px 0; }
.sr-series-header__rail span { writing-mode: vertical-rl; font-family: var(--sr-font-jp); font-size: 11px; letter-spacing: .5em; color: var(--sr-series-ink); }
.sr-series-header__body { flex: 1; min-width: 0; padding: 34px 34px 46px; }
.sr-series-header__back { font-size: 12px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--sr-series-ink); }
.sr-series-header__grid { display: grid; grid-template-columns: minmax(0,1fr) 260px; gap: 48px; padding-top: 28px; align-items: start; }
.sr-series-header__label { margin: 0; font-size: 12px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--sr-series-ink); }
.sr-series-header__text h1 { margin: 12px 0 0; font-family: var(--sr-font-jp); font-size: 34px; line-height: 1.4; font-weight: 700; letter-spacing: .01em; }
.sr-series-header__desc { margin: 18px 0 0; max-width: 560px; font-family: var(--sr-font-jp); font-size: 15px; line-height: 2.05; color: var(--sr-body); }
.sr-series-header__actions { display: flex; align-items: center; gap: 18px; padding-top: 22px; flex-wrap: wrap; }
.sr-series-header__cta { display: inline-block; border: 1px solid var(--sr-ink); border-radius: 999px; padding: 12px 28px; font-family: var(--sr-font-jp); font-size: 13px; font-weight: 500; transition: background .2s ease, color .2s ease; }
.sr-series-header__cta:hover { background: var(--sr-ink); color: var(--sr-bg); }
.sr-series-header__count { font-family: var(--sr-font-serif); font-size: 14px; color: var(--sr-series-ink); }
.sr-series-header__visual .sr-ph { aspect-ratio: 4/5; display: flex; align-items: flex-end; padding: 12px; }
.sr-series-header__visual img { width: 100%; aspect-ratio: 4/5; object-fit: cover; }

@media (max-width: 780px) {
  .sr-series-header__grid { grid-template-columns: 1fr; }
  .sr-series-header__visual { max-width: 240px; }
}
@media (max-width: 640px) {
  .sr-series-header__rail { width: 40px; min-width: 40px; padding: 16px 0; }
  .sr-series-header__rail span { font-size: 10px; }
  .sr-series-header__body { padding: 22px 18px 34px; }
  .sr-series-header__text h1 { font-size: 26px; }
}

/* ==========================================================================
   Article table of contents — auto-generated from the article's own <h2>
   headings (inc/template-tags.php sr_split_content_toc()), shown only when
   an article has 2 or more of them.
   ========================================================================== */
.sr-toc { max-width: 880px; margin: 0 auto; padding: 52px 34px 0; }
.sr-toc-title { margin: 0; text-align: center; font-family: var(--sr-font-jp); font-size: 14px; font-weight: 700; letter-spacing: .04em; }
.sr-toc-list { margin-top: 16px; border-top: 1px solid var(--sr-ink); border-bottom: 1px solid var(--sr-ink); }
.sr-toc-list a { display: flex; align-items: baseline; gap: 18px; padding: 18px 4px; border-bottom: 1px solid var(--sr-line); }
.sr-toc-list a:last-child { border-bottom: none; }
.sr-toc-num { font-family: var(--sr-font-serif); font-size: 14px; color: var(--sr-muted-2); }
.sr-toc-label { font-family: var(--sr-font-jp); font-size: 16px; font-weight: 700; color: var(--sr-ink); }

@media (max-width: 640px) {
  .sr-toc { padding: 36px 18px 0; }
  .sr-toc-list a { padding: 15px 2px; gap: 14px; }
  .sr-toc-label { font-size: 14px; }
}

/* Article body headings — a small accent bar before each <h2>, matching the
   design's section headings. */
.sr-article-body h2 { display: flex; align-items: center; gap: 16px; margin: 56px 0 28px; font-family: var(--sr-font-jp); font-size: 24px; line-height: 1.6; font-weight: 700; }
.sr-article-body h2::before { content: ''; width: 6px; height: 28px; background: var(--sr-accent); flex: none; }
.sr-article-body > h2:first-child { margin-top: 0; }

/* ==========================================================================
   Shop info card ("お店情報") — an optional card on any Magazine article
   (single.php / template-parts/content-magazine-interview.php), filled in
   via the "お店情報カード" meta box (inc/meta-boxes.php) and rendered by
   sr_shop_info_card() (inc/template-tags.php). Only shown when 店名 is set.
   ========================================================================== */
.sr-shop-card { margin: 42px 0 0; border: 1px solid var(--sr-ink); background: var(--sr-bg); }
.sr-shop-card__head { display: flex; align-items: center; gap: 10px; background: var(--sr-ink); padding: 12px 20px; }
.sr-shop-card__label { font-family: var(--sr-font-jp); font-size: 13px; font-weight: 700; letter-spacing: .06em; color: var(--sr-bg); }
.sr-shop-card__tag { font-size: 10px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--sr-accent); }
.sr-shop-card__list { margin: 0; display: flex; flex-direction: column; }
.sr-shop-card__row { border-bottom: 1px solid var(--sr-line); padding: 16px 20px; }
.sr-shop-card__row:last-child { border-bottom: none; }
.sr-shop-card__row dt { margin: 0; font-family: var(--sr-font-jp); font-size: 11px; font-weight: 700; letter-spacing: .08em; color: var(--sr-muted-2); }
.sr-shop-card__row dd { margin: 8px 0 0; font-family: var(--sr-font-jp); font-size: 14px; line-height: 1.8; color: var(--sr-ink); }
.sr-shop-card__row dd p { margin: 0; }
.sr-shop-card__row .name { font-size: 19px; font-weight: 700; }
.sr-shop-card__hours-notes { margin: 10px 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 8px; }
.sr-shop-card__hours-notes li { display: flex; gap: 8px; font-size: 13px; line-height: 1.85; color: var(--sr-muted); }
.sr-shop-card__hours-notes li span::before { content: '—'; margin-right: 8px; color: var(--sr-accent); }

/* 山情報カード (sr_mountain_info_card_html()) — same card, just its own accent
   color (the site's mountain/outdoor green) instead of the shop card's blue,
   so the two read as distinct card types at a glance. */
.sr-mountain-card .sr-shop-card__tag { color: var(--sr-series-ink); }

@media (max-width: 640px) {
  .sr-shop-card { margin-top: 30px; }
  .sr-shop-card__row { padding: 14px 16px; }
  .sr-shop-card__row .name { font-size: 17px; }
}

/* ==========================================================================
   Magazine — Interview article (.mag-interview, template-parts/content-magazine-interview.php)
   Reuses .sr-article-head / .sr-article-thumb / .sr-article-body / .sr-article-tags
   from the "Single article" section above for the outer layout; these rules
   are only for the ACF flexible-content blocks and the interviewee profile card.
   ========================================================================== */
.mag-interview__lead { margin: 20px 0 0; font-family: var(--sr-font-jp); font-size: 15px; line-height: 1.9; color: var(--sr-muted); max-width: 52ch; }

.mag-interview__heading { font-family: var(--sr-font-jp); font-size: 22px; font-weight: 700; line-height: 1.6; margin: 56px 0 28px; padding-bottom: 12px; border-bottom: 1px solid var(--sr-line); }
.mag-interview__body > .mag-interview__heading:first-child { margin-top: 0; }

.mag-interview__text { margin-bottom: 34px; }

.mag-interview__qa { margin-bottom: 34px; }
.mag-interview__question { font-family: var(--sr-font-jp); font-weight: 700; color: var(--sr-ink); margin-bottom: 12px; }
.mag-interview__answer { color: var(--sr-body); }

.mag-interview__figure { margin: 12px 0 34px; }
.mag-interview__figure img { width: 100%; display: block; }
.mag-interview__figure figcaption { padding-top: 12px; font-family: var(--sr-font-jp); font-size: 12px; line-height: 1.9; color: var(--sr-muted-2); font-style: normal; }

.mag-interview__divider { border: none; border-top: 1px solid var(--sr-line); margin: 56px 0; }

.mag-interview__corner { margin-top: 34px; padding-top: 34px; border-top: 1px solid var(--sr-line); }
.mag-interview__gallery { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 20px; }
.mag-interview__gallery img { width: 100%; display: block; }

.mag-interview__profile { max-width: 720px; margin: 46px auto 0; padding: 34px; background: var(--sr-green-bg); border-radius: 6px; display: flex; gap: 20px; align-items: flex-start; }
.mag-interview__profile-photo { width: 80px; height: 80px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.mag-interview__profile-name { font-family: var(--sr-font-jp); font-weight: 700; margin-bottom: 10px; color: var(--sr-ink); }
.mag-interview__profile-bio { font-size: 14px; line-height: 1.95; color: var(--sr-muted); margin-bottom: 10px; }
.mag-interview__profile-sns { font-family: var(--sr-font-en); font-size: 12px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; border-bottom: 1px solid var(--sr-ink); padding-bottom: 2px; }

@media (max-width: 640px) {
  .mag-interview__heading { font-size: 19px; margin: 40px 0 22px; }
  .mag-interview__divider { margin: 40px 0; }
  .mag-interview__profile { flex-direction: column; align-items: center; text-align: center; padding: 24px; margin-top: 34px; }
}

/* ==========================================================================
   Movie — hero intro + Latest (accent) + Archive grid
   ========================================================================== */
.sr-movie-latest { background: var(--sr-accent); color: var(--sr-ink); padding: 52px 34px 64px; }
.sr-movie-latest-grid { display: grid; grid-template-columns: minmax(0,1.55fr) minmax(0,1fr); gap: 40px; align-items: start; }
@media (max-width: 860px) { .sr-movie-latest-grid { grid-template-columns: 1fr; } }
.sr-movie-latest .sr-ph { aspect-ratio: 16/9; display: flex; align-items: center; justify-content: center; background: repeating-linear-gradient(135deg,#7CC2F5 0 6px,#9AD5FF 6px 12px); }
.sr-movie-latest .slot { position: absolute; bottom: 12px; left: 12px; color: #4E7796; }
.sr-movie-latest-meta { display: flex; align-items: baseline; gap: 18px; flex-wrap: wrap; }
.sr-movie-latest-meta .ep { font-size: 12px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; }
.sr-movie-latest-meta .date { font-family: var(--sr-font-serif); font-size: 14px; color: #3D4C58; }
.sr-movie-latest h2 { margin: 18px 0 0; font-family: var(--sr-font-jp); font-size: 28px; line-height: 1.65; font-weight: 700; }
.sr-movie-latest .desc { margin: 20px 0 0; font-family: var(--sr-font-jp); font-size: 15px; line-height: 2.05; }
.sr-movie-latest .watch { display: inline-flex; align-items: center; gap: 12px; margin-top: 28px; background: var(--sr-ink); color: var(--sr-footer-fg); border-radius: 6px; padding: 18px 26px; font-family: var(--sr-font-jp); font-size: 14px; font-weight: 500; }

.sr-movie-archive-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(420px,1fr)); gap: 48px 34px; }
.sr-movie-archive-card { display: block; min-width: 0; transition: transform .25s ease; }
.sr-movie-archive-card:hover { transform: translateY(-5px); }
.sr-movie-archive-card .sr-ph { aspect-ratio: 16/9; display: flex; align-items: center; justify-content: center; }
.sr-movie-archive-card .dur { position: absolute; bottom: 10px; right: 10px; background: rgba(26,26,24,.72); color: var(--sr-bg); padding: 4px 9px; font-family: var(--sr-font-serif); font-size: 12px; }
.sr-movie-archive-card .top { display: flex; align-items: baseline; gap: 16px; padding-top: 18px; }
.sr-movie-archive-card .ep { font-size: 11px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--sr-accent); }
.sr-movie-archive-card .date { font-family: var(--sr-font-serif); font-size: 13px; color: var(--sr-muted); }
.sr-movie-archive-card h3 { margin: 10px 0 0; font-family: var(--sr-font-jp); font-size: 20px; line-height: 1.7; font-weight: 700; }
.sr-movie-archive-card .desc { margin: 10px 0 0; font-family: var(--sr-font-jp); font-size: 14px; line-height: 2.05; color: var(--sr-muted); }

@media (max-width: 640px) {
  .sr-movie-latest { padding: 34px 16px 40px; }
  .sr-movie-latest h2 { font-size: 20px; }
  .sr-movie-archive-grid { grid-template-columns: 1fr; gap: 40px; }
}

.sr-subscribe-btn { display: inline-block; border: 1px solid var(--sr-ink); border-radius: 999px; padding: 14px 34px; font-family: var(--sr-font-jp); font-size: 13px; font-weight: 500; transition: background .2s ease, color .2s ease; }
.sr-subscribe-btn:hover { background: var(--sr-ink); color: var(--sr-bg); }

/* ==========================================================================
   Album archive + hashtag filter + lightbox
   ========================================================================== */
/* Masonry: 4 columns on desktop, 3 on tablet, 2 on mobile (see main.js's
   sr_photoGridColumns()) — items keep each photo's real aspect ratio and are
   packed shortest-column-first via JS, so a plain CSS column-count layout
   (which forces a uniform crop) can't be used here. Before JS lays things out
   (or if JS fails), items fall back to a simple stacked single column. */
.sr-photo-grid { position: relative; padding-top: 34px; }
.sr-photo-grid a { display: block; width: 100%; margin-bottom: 14px; transition: transform .25s ease; }
.sr-photo-grid a:hover { transform: translateY(-4px); }
.sr-photo-grid.is-masonry a { position: absolute; top: 0; left: 0; margin-bottom: 0; transition: transform .25s ease, left .2s ease, top .2s ease; }
/* No padding here (unlike other .sr-ph usages) — with padding, the diagonal-
   striped placeholder background shows through as a border around each photo. */
.sr-photo-grid .sr-ph { display: flex; align-items: flex-end; padding: 0; }
.sr-photo-grid .sr-ph img { height: auto; }
.sr-photo-grid .hashtag { position: absolute; top: 10px; right: 10px; background: var(--sr-bg); padding: 4px 10px; font-family: var(--sr-font-jp); font-size: 11px; font-weight: 500; }
.sr-photo-grid a.is-hidden { display: none; }

.sr-lightbox { position: fixed; inset: 0; z-index: 60; background: rgba(20,20,18,.85); display: none; align-items: center; justify-content: center; padding: 48px; cursor: pointer; }
.sr-lightbox.is-open { display: flex; }
.sr-lightbox-box { background: var(--sr-bg); padding: 20px; max-width: min(1000px,88vw); box-shadow: 0 30px 80px rgba(0,0,0,.3); cursor: auto; }
/* max-width/max-height (not a forced width) so the box hugs each photo's own
   aspect ratio instead of always laying out as a wide landscape frame. */
.sr-lightbox img { width: auto; height: auto; max-width: min(940px, 80vw); max-height: calc(100vh - 220px); object-fit: contain; margin: 0 auto; }
.sr-lightbox-meta { display: flex; align-items: baseline; gap: 20px; padding: 22px 4px 6px; flex-wrap: wrap; }
.sr-lightbox-meta .cap { margin: 0; font-family: var(--sr-font-jp); font-size: 17px; line-height: 1.7; font-weight: 500; color: var(--sr-ink); }
.sr-lightbox-meta .tag { font-family: var(--sr-font-jp); font-size: 12px; font-weight: 500; color: var(--sr-accent); }
.sr-lightbox-meta .date { margin-left: auto; font-family: var(--sr-font-serif); font-size: 14px; color: var(--sr-muted); }

@media (max-width: 640px) {
  .sr-lightbox { padding: 20px; }
}

/* ==========================================================================
   Generic page (fallback / 404 / stub)
   ========================================================================== */
.sr-page { padding: 96px 34px 140px; max-width: 720px; margin: 0 auto; }
.sr-page h1 { margin: 0; font-size: 56px; line-height: 1; font-weight: 400; letter-spacing: -0.02em; }
.sr-page .sr-content { margin-top: 22px; font-family: var(--sr-font-jp); font-size: 15px; line-height: 2; color: var(--sr-muted); }
.sr-page .sr-content p { margin: 0 0 1.4em; }
/* Long-form pages (Privacy Policy, Terms, etc.) need real heading/list/link
   styling — the sitewide reset strips all of this by default (h1-h6 margins,
   ul/ol list-style, a underline/color), which is fine for the theme's own
   hand-built markup elsewhere but leaves plain WYSIWYG page content with no
   visible structure at all. */
.sr-page .sr-content h2 { margin: 2.2em 0 0.8em; font-family: var(--sr-font-jp); font-size: 22px; font-weight: 700; color: var(--sr-ink); }
.sr-page .sr-content h2:first-child { margin-top: 0; }
.sr-page .sr-content h3 { margin: 1.8em 0 0.6em; font-family: var(--sr-font-jp); font-size: 17px; font-weight: 700; color: var(--sr-ink); }
.sr-page .sr-content ul, .sr-page .sr-content ol { margin: 0 0 1.4em; padding-left: 1.4em; }
.sr-page .sr-content ul { list-style: disc; }
.sr-page .sr-content ol { list-style: decimal; }
.sr-page .sr-content li { margin-bottom: 0.5em; }
.sr-page .sr-content strong { font-weight: 700; color: var(--sr-ink); }
.sr-page .sr-content a { color: var(--sr-accent); text-decoration: underline; text-underline-offset: 2px; }
.sr-page .sr-content a:hover { color: var(--sr-ink); }
.sr-back-home { display: inline-block; margin-top: 28px; font-size: 12px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; border-bottom: 1px solid var(--sr-ink); padding-bottom: 3px; }

@media (max-width: 640px) {
  .sr-page { padding: 56px 20px 80px; }
  .sr-page h1 { font-size: 34px; }
  .sr-page .sr-content h2 { font-size: 19px; }
  .sr-page .sr-content h3 { font-size: 16px; }
}

/* ==========================================================================
   Plain hero (About Us / Contact / Movie / Magazine) — vertical tagline rail
   + eyebrow + big title with an accent-highlighted badge word + lede.
   Reuses .sr-hero-tab.
   ========================================================================== */
.sr-hero-plain { display: flex; align-items: stretch; border-bottom: 1px solid var(--sr-line); }
.sr-hero-plain-text { flex: 1; min-width: 0; padding: 66px 40px 54px; }
.sr-hero-plain-text .eyebrow { font-size: 12px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--sr-accent); }
.sr-hero-plain-text h1 { margin: 18px 0 0; font-size: 76px; line-height: 1.14; font-weight: 400; letter-spacing: -0.03em; }
.sr-hero-plain-text h1 .badge { display: inline-block; background: var(--sr-accent); padding: 2px 16px 6px; font-family: var(--sr-font-jp); font-size: 58px; font-weight: 700; letter-spacing: .02em; }
.sr-hero-plain-text .lede { margin: 26px 0 0; max-width: 660px; font-family: var(--sr-font-jp); font-size: 15px; line-height: 2.15; color: var(--sr-muted); }

/* Magazine listing's hero runs ~25% larger than the shared About Us / Contact /
   Movie version of .sr-hero-plain (per design). Scoped to the
   .sr-hero-plain-magazine modifier home.php puts on its <section> so the other
   pages sharing this component are untouched. min-width matches the
   .sr-hero-plain column layout's own breakpoint below, so it never fights the
   mobile overrides' lower-specificity .sr-hero-plain-text rules there. */
@media (min-width: 861px) {
  .sr-hero-plain-magazine .sr-hero-tab { width: 65px; min-width: 65px; padding: 25px 0; }
  .sr-hero-plain-magazine .sr-hero-tab span { font-size: 16px; }
  .sr-hero-plain-magazine .sr-hero-plain-text { padding: 82px 50px 68px; }
  .sr-hero-plain-magazine .sr-hero-plain-text .eyebrow { font-size: 15px; }
  .sr-hero-plain-magazine .sr-hero-plain-text h1 { margin-top: 22px; font-size: 96px; }
  .sr-hero-plain-magazine .sr-hero-plain-text h1 .badge { padding: 3px 20px 8px; font-size: 72px; }
  .sr-hero-plain-magazine .sr-hero-plain-text .lede { margin-top: 32px; max-width: 820px; font-size: 19px; }
}

@media (max-width: 860px) {
  .sr-hero-plain { flex-direction: column; border-bottom: 0; }
  .sr-hero-plain-text { order: 1; }
}
@media (max-width: 640px) {
  .sr-hero-plain-text { padding: 30px 18px 34px; }
  .sr-hero-plain-text h1 { font-size: 40px; }
  .sr-hero-plain-text h1 .badge { font-size: 30px; padding: 1px 10px 4px; }
  .sr-hero-plain-text .lede { font-size: 14px; line-height: 1.95; }
}

/* ==========================================================================
   About Us — Our Story (4 beats) + Profile
   ========================================================================== */
.sr-story-section { padding: 52px 34px 72px; border-bottom: 1px solid var(--sr-line); }
.sr-story-row { display: grid; grid-template-columns: minmax(0,400px) minmax(0,1fr); gap: 44px; align-items: start; padding: 40px 0; border-top: 1px solid var(--sr-line); }
.sr-story-list .sr-story-row:last-child { border-bottom: 1px solid var(--sr-line); }
.sr-story-photo { aspect-ratio: 4/3; display: flex; align-items: center; justify-content: center; }
.sr-story-num { display: flex; align-items: baseline; gap: 16px; padding-bottom: 14px; }
.sr-story-num .n { font-family: var(--sr-font-serif); font-size: 34px; line-height: 1; color: var(--sr-accent); }
.sr-story-num .t { font-family: var(--sr-font-jp); font-size: 13px; font-weight: 700; letter-spacing: .06em; }
.sr-story-text p { margin: 0 0 20px; max-width: 620px; font-family: var(--sr-font-jp); font-size: 15px; line-height: 2.1; color: var(--sr-ink-soft); }
.sr-story-text p:last-child { margin-bottom: 0; }
/* Bottom-half only, like a highlighter pen, rather than a solid block behind the full text height. */
.sr-story-text mark.sr-hl { background: linear-gradient(transparent 55%, #fbfd8d 55%); color: inherit; padding: 0 2px; }

/* Our Story rows read as left-aligned on wide screens since the text column
   (minmax(0,1fr)) grows to fill all remaining space — cap the row's width and
   center it so both the photo and text sit in the middle of the page. The
   "Our Story" heading above needs the same treatment, or its left edge (stuck
   at the section's own 34px padding) won't line up with the now-centered
   row's left edge below it. */
@media (min-width: 861px) {
  .sr-story-section .sr-heading,
  .sr-story-row { max-width: 1100px; margin-left: auto; margin-right: auto; }
}

@media (max-width: 640px) {
  .sr-story-section { padding: 34px 16px 44px; }
  .sr-story-row { grid-template-columns: 1fr; gap: 20px; padding: 28px 0; }
}

.sr-profile-section { background: var(--sr-green-bg); padding: 52px 34px 84px; }
.sr-profile-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(460px,1fr)); gap: 44px; }
.sr-profile-card { display: grid; grid-template-columns: minmax(150px,200px) minmax(0,1fr); gap: 28px; align-items: start; }
.sr-profile-photo-wrap { position: relative; width: 100%; min-width: 0; }
.sr-profile-photo { aspect-ratio: 3/4; display: flex; align-items: center; justify-content: center; border-radius: 0; }
/* Fill the same rectangle as the diagonal-striped placeholder frame — no circle crop. */
.sr-profile-photo img { width: 100%; height: 100%; object-fit: cover; border-radius: 0; }
.sr-profile-photo-wrap .badge { position: absolute; bottom: -8px; right: -10px; background: var(--sr-accent); color: var(--sr-ink); border-radius: 999px; padding: 8px 14px; font-family: var(--sr-font-jp); font-size: 11px; font-weight: 700; letter-spacing: .06em; }
.sr-profile-card h3 { margin: 0; font-size: 40px; line-height: 1; font-weight: 400; letter-spacing: -0.02em; }
.sr-profile-card .role { margin: 14px 0 0; font-family: var(--sr-font-jp); font-size: 13px; font-weight: 700; letter-spacing: .04em; color: var(--sr-muted); }
.sr-profile-card .bio { margin: 22px 0 0; font-family: var(--sr-font-jp); font-size: 15px; line-height: 2.1; color: var(--sr-ink-soft); }

@media (max-width: 640px) {
  .sr-profile-section { padding: 34px 16px 48px; }
  /* Without this, auto-fit's minmax(460px,1fr) floor keeps each card at least
     460px wide even though the viewport itself is narrower — the whole card
     (photo included, even though it's centered *within* the card) then
     overflows and its right edge gets clipped by the page's overflow-x:hidden. */
  .sr-profile-grid { grid-template-columns: 1fr; gap: 40px; }
  .sr-profile-card { grid-template-columns: 1fr; gap: 16px; }
  /* Centered (not right-aligned via margin-left:auto) so the photo stays
     inside the screen instead of overflowing off the right edge. */
  .sr-profile-photo-wrap { width: 64%; margin: 0 auto; }
}

/* ==========================================================================
   Contact — form + aside
   ========================================================================== */
.sr-contact-section { padding: 56px 34px 90px; }
.sr-contact-grid { display: grid; grid-template-columns: minmax(0,1.35fr) minmax(0,1fr); gap: 72px; align-items: start; }
.sr-form { display: flex; flex-direction: column; gap: 30px; }
.sr-form-field { display: block; }
.sr-form-field .label { display: block; font-family: var(--sr-font-jp); font-size: 13px; font-weight: 700; letter-spacing: .04em; }
.sr-form-field .req { font-weight: 500; color: var(--sr-accent); }
.sr-form-field input, .sr-form-field select, .sr-form-field textarea { width: 100%; margin-top: 12px; background: var(--sr-bg); border: 1px solid var(--sr-line-2); padding: 16px 18px; font-family: var(--sr-font-jp); font-size: 15px; color: var(--sr-ink); }
.sr-form-field textarea { line-height: 1.9; resize: vertical; }
.sr-form-submit { align-self: flex-start; background: var(--sr-ink); color: var(--sr-footer-fg); border: none; border-radius: 6px; padding: 20px 44px; font-family: var(--sr-font-jp); font-size: 15px; font-weight: 500; cursor: pointer; transition: opacity .15s ease; }
.sr-form-submit:hover { opacity: .85; }
.sr-form-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; margin: 0; }
.sr-form-notice { margin: 0 0 26px; padding: 18px 20px; border-radius: 6px; font-family: var(--sr-font-jp); font-size: 14px; line-height: 1.8; }
.sr-form-notice.is-success { background: var(--sr-green-bg); color: var(--sr-ink); }
.sr-form-notice.is-error { background: #F7E5E1; color: #7A2E1B; }
.sr-contact-aside h2 { margin: 0; font-size: 30px; line-height: 1.4; font-weight: 400; letter-spacing: -0.02em; }
.sr-contact-aside h2 ~ h2 { margin-top: 56px; }
.sr-contact-aside p { margin: 18px 0 0; font-family: var(--sr-font-jp); font-size: 14px; line-height: 2.05; color: var(--sr-muted); }
.sr-contact-mail { display: block; margin-top: 22px; border: 1px solid var(--sr-ink); padding: 20px 24px; text-align: center; font-family: var(--sr-font-serif); font-size: 17px; letter-spacing: .03em; transition: background .2s ease, color .2s ease; }
.sr-contact-mail:hover { background: var(--sr-ink); color: var(--sr-footer-fg); }
.sr-contact-social { display: flex; gap: 14px; padding-top: 22px; }
.sr-contact-social a { width: 52px; height: 52px; border: 1px solid var(--sr-line-2); border-radius: 50%; display: flex; align-items: center; justify-content: center; overflow: hidden; font-size: 12px; font-weight: 600; transition: background .2s ease; }
.sr-contact-social a img { width: 100%; height: 100%; object-fit: cover; }
.sr-contact-social a:hover { background: var(--sr-accent); }

/* The form/aside grid has no width cap of its own, so on wide desktop screens
   it stretches edge-to-edge — cap and center it like the rest of the site's
   content instead. */
@media (min-width: 861px) {
  .sr-contact-grid { max-width: 1100px; margin-left: auto; margin-right: auto; }
}

@media (max-width: 640px) {
  .sr-contact-section { padding: 34px 16px 56px; }
  .sr-contact-grid { grid-template-columns: 1fr; gap: 48px; }
}

/* ==========================================================================
   Map
   ========================================================================== */
.sr-map-hero { position: relative; height: calc(100vh - 78px); min-height: 660px; border-bottom: 1px solid var(--sr-line); overflow: hidden; }
.sr-map-canvas { position: absolute; inset: 0; background: #EEEBE4; z-index: 1; }
.sr-map-petal { position: absolute; top: 0; left: 50%; transform: translateX(-50%); z-index: 600; width: 440px; max-width: calc(100% - 48px); background: var(--sr-bg); border-radius: 0 0 220px 220px; padding: 40px 44px 52px; display: flex; flex-direction: column; align-items: center; text-align: center; box-shadow: 0 22px 60px rgba(26,26,24,.14); }
.sr-map-petal-labels { display: flex; align-items: flex-start; gap: 10px; }
.sr-map-petal-labels span { writing-mode: vertical-rl; background: var(--sr-accent); color: var(--sr-ink); padding: 16px 8px; font-family: var(--sr-font-jp); font-size: 34px; font-weight: 700; letter-spacing: .06em; line-height: 1; }
.sr-map-petal-labels span:nth-child(1) { margin-top: 40px; } /* 歩く */
.sr-map-petal-labels span:nth-child(2) { margin-top: 8px; }  /* 地図から */
.sr-map-petal-labels span:nth-child(3) { margin-top: 24px; } /* 京都を */
.sr-map-petal-labels span:nth-child(4) { margin-top: 0; }    /* 日曜日の */
.sr-map-petal-lede { margin: 34px 0 0; font-family: var(--sr-font-jp); font-size: 14px; line-height: 2; font-weight: 500; color: var(--sr-ink-soft); }
.sr-map-petal-count { margin-top: 20px; font-family: var(--sr-font-serif); font-size: 14px; color: var(--sr-muted); }
/* Mobile-only intro block + lede (see page-map.php) — desktop keeps the .sr-map-petal
   overlay card above instead; both are re-shown/hidden the other way round at 640px. */
.sr-map-intro, .sr-map-intro-lede { display: none; }
.sr-map-filters { position: absolute; left: 22px; bottom: 22px; z-index: 600; display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
.sr-map-chip { display: inline-flex; align-items: center; gap: 9px; padding: 11px 20px; border: 1px solid var(--sr-line-2); border-radius: 999px; font-family: var(--sr-font-jp); font-size: 13px; font-weight: 500; background: var(--sr-bg); color: var(--sr-ink); box-shadow: 0 4px 14px rgba(26,26,24,.12); cursor: pointer; transition: transform .18s ease, background .15s ease, color .15s ease; }
.sr-map-chip:hover { transform: translateX(4px); }
.sr-map-chip:not(.is-active) { background: transparent; color: var(--sr-muted-2); box-shadow: none; }
.sr-map-chip .dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.sr-map-scroll { position: absolute; left: 50%; bottom: 22px; transform: translateX(-50%); z-index: 600; display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 10px; letter-spacing: .2em; text-transform: uppercase; color: var(--sr-muted); }
.sr-map-scroll .arrow { font-size: 15px; animation: srBob 1.8s ease-in-out infinite; }
@keyframes srBob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(5px); } }
.sr-pin { width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--sr-bg); box-shadow: 0 1px 4px rgba(0,0,0,.28); }
.sr-map-pop b { display: block; font-size: 14px; font-weight: 500; margin-bottom: 4px; }
.sr-map-pop span { font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--sr-muted-2); }
.sr-map-pop p { margin: 8px 0 0; font-size: 12px; line-height: 1.8; color: var(--sr-muted); }
.leaflet-container { font-family: var(--sr-font-jp); background: #EEEBE4; }

.sr-spots-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 38px 26px; }
.sr-spot-card { display: block; width: 100%; min-width: 0; text-align: left; background: none; border: 0; padding: 0; margin: 0; cursor: pointer; font: inherit; color: inherit; transition: transform .25s ease; }
.sr-spot-card:hover { transform: rotate(-1.4deg) translateY(-4px); }
.sr-spot-photo { position: relative; display: flex; align-items: center; justify-content: center; width: 100%; aspect-ratio: 1/1; border-radius: 50%; background: repeating-linear-gradient(135deg, var(--sr-photo-a) 0 6px, var(--sr-photo-b) 6px 12px); background-size: cover; background-position: center; }
.sr-spot-photo .dot { width: 12px; height: 12px; border-radius: 50%; box-shadow: 0 0 0 5px rgba(253,252,250,.9); }
.sr-spot-photo .num { position: absolute; top: 12px; left: 14px; font-family: var(--sr-font-serif); font-size: 15px; color: var(--sr-muted); }
.sr-spot-card .cat { display: block; margin: 14px 0 0; font-size: 11px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--sr-accent); }
.sr-spot-card .name { display: block; margin: 8px 0 0; font-family: var(--sr-font-jp); font-size: 16px; line-height: 1.7; font-weight: 500; }
.sr-spot-card .note { display: block; margin: 8px 0 0; font-family: var(--sr-font-jp); font-size: 13px; line-height: 1.9; color: var(--sr-muted); }

@media (max-width: 860px) {
  .sr-spots-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
}
@media (max-width: 640px) {
  /* Mobile redesign: everything stacks in normal document flow (title+count,
     then the map, then filters, then the lede) instead of the desktop's
     fixed-height hero with the petal card/filters overlaid on top of the map —
     that overlay pattern left too little of the map actually visible on a
     phone screen. */
  .sr-map-hero { position: static; height: auto; min-height: 0; overflow: visible; display: flex; flex-direction: column; }
  .sr-map-petal { display: none; }
  .sr-map-scroll { display: none; }

  .sr-map-intro { display: block; order: 1; padding: 28px 20px 0; }
  .sr-map-intro-title { margin: 0; font-family: var(--sr-font-jp); font-weight: 700; }
  .sr-map-intro-title .line { display: block; }
  .sr-map-intro-title mark { display: inline-block; background: var(--sr-accent); color: var(--sr-ink); font-size: 26px; line-height: 1.5; padding: 4px 14px; margin-bottom: 8px; }
  .sr-map-intro-count { display: block; margin-top: 14px; font-family: var(--sr-font-serif); font-size: 13px; color: var(--sr-muted); }

  #sr-map.sr-map-canvas { position: static; order: 2; width: 100%; height: 420px; }

  .sr-map-filters { position: static; order: 3; display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 20px 16px 0; }
  .sr-map-chip { justify-content: center; background: var(--sr-ink); color: var(--sr-bg); border-color: var(--sr-ink); box-shadow: none; }
  .sr-map-chip:not(.is-active) { background: transparent; color: var(--sr-muted-2); border-color: var(--sr-line-2); }

  .sr-map-intro-lede { display: block; order: 4; margin: 0; padding: 20px 20px 30px; font-family: var(--sr-font-jp); font-size: 13px; line-height: 1.9; font-weight: 500; color: var(--sr-ink-soft); }

  .sr-section .sr-spots-grid { gap: 28px 16px; }
}

/* ==========================================================================
   Footer
   ========================================================================== */
.sr-footer { background: var(--sr-accent); color: var(--sr-ink); }
.sr-footer-grid { display: grid; grid-template-columns: minmax(0,1fr) 380px; }
.sr-footer-main { padding: 44px 48px 40px; border-right: 1px solid rgba(26,26,24,.22); }
.sr-footer-logo img { height: 56px; width: auto; display: block; }
.sr-footer-main p.head, .sr-footer-aside p.head { margin: 52px 0 22px; font-family: var(--sr-font-jp); font-size: 14px; font-weight: 700; letter-spacing: .04em; }
.sr-footer-menu { display: flex; flex-wrap: wrap; align-items: baseline; gap: 14px 16px; font-size: 60px; font-weight: 500; line-height: 1.18; letter-spacing: -0.03em; }
.sr-footer-menu a { color: var(--sr-ink); }
.sr-footer-menu a:not(:last-child)::after { content: '/'; margin-left: 16px; color: rgba(26,26,24,.45); font-size: 44px; }
.sr-footer-social { display: flex; gap: 14px; }
.sr-footer-social a { width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center; overflow: hidden; font-size: 11px; font-weight: 600; color: var(--sr-ink); }
.sr-footer-social a img { width: 100%; height: 100%; object-fit: cover; }
.sr-footer-regulars { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 14px 24px; max-width: 640px; font-family: var(--sr-font-jp); font-size: 13px; }
.sr-footer-regulars a { color: var(--sr-ink); border-left: 1px solid rgba(26,26,24,.3); padding-left: 16px; }
/* Suppress the separator for whichever item starts each row — desktop is a
   3-column grid, the 860px breakpoint below switches it to 2 columns. */
.sr-footer-regulars a:nth-child(3n+1) { border-left: 0; padding-left: 0; }
.sr-footer-cta { display: flex; flex-wrap: wrap; gap: 16px; padding-top: 56px; }
.sr-footer-cta a { display: flex; align-items: center; justify-content: space-between; gap: 40px; min-width: 260px; background: var(--sr-footer-bg); color: var(--sr-footer-fg); border-radius: 6px; padding: 20px 26px; font-family: var(--sr-font-jp); font-size: 14px; font-weight: 500; }
/* Explicit re-affirmation, not just inheritance: these buttons already have their
   own dark background, so the broader ".sr-footer a:hover"/".sr-pc-menu a:hover"
   rule below (color:ink, for links sitting directly on the accent background)
   would otherwise put dark text on this dark button too. sr_footer_body() is
   rendered both inside <footer class="sr-footer"> and inside the PC full-screen
   menu's #sr-pc-menu, so both ancestors need the same guard. */
.sr-footer .sr-footer-cta a:hover, .sr-pc-menu .sr-footer-cta a:hover { color: var(--sr-footer-fg); }
.sr-footer-aside { padding: 44px 34px 40px; display: flex; flex-direction: column; align-items: center; text-align: center; }
.sr-footer-aside p.head { margin: 0 0 22px; align-self: flex-start; }
.sr-footer-movie { display: contents; }
/* .sr-footer-aside uses align-items:center (needed so the text/buttons below stay
   shrink-to-fit and centered), which also shrinks this link to its content width
   by default — explicitly stretch just this one flex item so the 16:9 thumbnail
   gets the full column width instead of collapsing to ~0. */
.sr-footer-movie > a { display: block; width: 100%; }
.sr-footer-movie .sr-ph { width: 100%; aspect-ratio: 16/9; display: flex; align-items: center; justify-content: center; background: repeating-linear-gradient(135deg,#26261F 0 6px,#2F2F27 6px 12px); }
.sr-footer-movie .play-big { width: 56px; height: 56px; border-radius: 50%; background: var(--sr-accent); display: flex; align-items: center; justify-content: center; }
.sr-footer-movie .play-big::after { content: ''; width: 0; height: 0; border-left: 15px solid var(--sr-footer-bg); border-top: 9px solid transparent; border-bottom: 9px solid transparent; margin-left: 5px; }
.sr-footer-movie .title { margin: 22px 0 0; font-family: var(--sr-font-jp); font-size: 15px; line-height: 1.9; font-weight: 500; }
.sr-footer-movie .meta { margin: 10px 0 0; font-family: var(--sr-font-serif); font-size: 13px; color: #3D4C58; }
.sr-footer-movie .subscribe { display: inline-block; margin-top: 26px; border: 1px solid var(--sr-ink); border-radius: 999px; padding: 14px 34px; color: var(--sr-ink); font-family: var(--sr-font-jp); font-size: 13px; font-weight: 500; }
.sr-footer-movie .all-movies { display: inline-block; width: fit-content; margin-top: 16px; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; border-bottom: 1px solid var(--sr-ink); padding-bottom: 3px; }
/* Same invisible-on-hover trap as B-2/E-3/H-2: the global a:hover rule turns text
   var(--sr-accent), which is also this section's (and the PC full-screen menu's,
   which reuses this markup) own background — "ALL MOVIES" had no color of its own
   to resist that override. Scoped to both containers so it also covers any future
   link added here, not just this one. */
.sr-footer a:hover, .sr-pc-menu a:hover { color: var(--sr-ink); }
.sr-footer-bottom { display: flex; flex-wrap: wrap; gap: 26px; align-items: center; padding: 24px 48px; border-top: 1px solid rgba(26,26,24,.22); font-size: 11px; letter-spacing: .1em; }
.sr-footer-bottom a { color: var(--sr-ink); }

@media (max-width: 860px) {
  .sr-footer-grid { grid-template-columns: 1fr; }
  .sr-footer-main { padding: 30px 16px 34px; border-right: 0; }
  .sr-footer-main p.head, .sr-footer-aside p.head { margin: 32px 0 16px; font-size: 13px; }
  .sr-footer-menu { gap: 0 10px; font-size: 34px; line-height: 1.25; }
  .sr-footer-menu a:not(:last-child)::after { margin-left: 10px; font-size: 26px; }
  .sr-footer-social a { width: 44px; height: 44px; }
  .sr-footer-regulars { grid-template-columns: minmax(0,1fr) minmax(0,1fr); max-width: none; }
  .sr-footer-regulars a:nth-child(3n+1) { border-left: 1px solid rgba(26,26,24,.3); padding-left: 16px; }
  .sr-footer-regulars a:nth-child(2n+1) { border-left: 0; padding-left: 0; }
  .sr-footer-cta { flex-direction: column; padding-top: 32px; }
  .sr-footer-cta a { min-width: 0; padding: 18px 22px; }
  .sr-footer-aside { padding: 30px 16px 34px; border-top: 1px solid rgba(26,26,24,.22); }
  .sr-footer-bottom { flex-direction: column; align-items: flex-start; gap: 10px; padding: 22px 16px 30px; }
}
