/*
Theme Name: RockinMe Base
Description: RockinMeコアプラグイン向けの汎用baseテーマ（骨格）。配色hex・フォント名・コピーは一切含まない。すべてtenant-config（label-config層）からCSSカスタムプロパティとして注入される（functions.php参照）。レーベルモード／アーティストモードの出し分けにも対応。
Author: Five Magics Inc.
Version: 0.9.0
Text Domain: rockinme-base
*/

/*
 * 重要: このファイルには配色hex値・フォントファミリー名を一切書かない。
 * :root のCSSカスタムプロパティ（--color-*, --font-*）は
 * functions.php の rockinme_base_inline_tokens() が、アクティブな
 * tenant-configの値から動的に生成して<head>に出力する。
 * これにより、baseテーマ本体を一切変更せずにtenant-configの差し替えだけで
 * 別レーベル・別アーティストの配色に切り替えられる（設計原則の絶対条件）。
 */

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
@media (prefers-reduced-motion:reduce){ html{scroll-behavior:auto;} }

body{
	margin:0;
	background:var(--color-canvas);
	color:var(--color-ink);
	font-family:var(--font-body);
	font-size:16px;
	line-height:1.7;
	-webkit-font-smoothing:antialiased;
}

a{color:inherit;text-decoration:none;}
a:focus-visible, button:focus-visible{outline:2px solid var(--color-accent-2);outline-offset:3px;}

.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums;}

.wrap{max-width:1240px;margin:0 auto;padding:0 32px;}
@media (max-width:640px){.wrap{padding:0 20px;}}

/* ---------- NAV ---------- */
/* ヘッダー全体をスクロール追従（sticky）にする。site-headerは常にビューポート
   全幅で背景色を敷き、中のsite-navだけを.wrapで中央寄せの最大幅にする
   （sticky時に左右の余白が透けないようにするため）。 */
.site-header{
	position:sticky;
	top:0;
	z-index:100;
	background:var(--color-canvas);
	border-bottom:1px solid var(--color-line-dark);
}
nav.site-nav{
	display:flex;align-items:center;justify-content:space-between;
	padding:18px 32px;
	gap:16px;
	position:relative;
}
.wordmark{
	font-family:var(--font-display);
	font-size:1.4rem;
	letter-spacing:0.01em;
	display:flex;align-items:baseline;gap:8px;
	flex-shrink:0;
}
.wordmark .bang{color:var(--color-accent-1);}
/* レーベルロゴ（SVG、2026-08新設）。設定されている場合、ナビのワードマークで
   テキストの代わりに表示する（.wordmark.has-logoの時のみ）。ロゴの
   fill="currentColor"は.wordmarkの文字色に自動追従する（単色ロゴの場合。
   このロゴのように内部で独自の色を持つSVGはそちらが優先される）。
   2026-08-10、Jackyさんの指示でテキスト時より大きく表示するよう変更
   （高さはもはやテキストのfont-sizeに揃えていない）。
   同日、「まだ小さい」とのフィードバックを受け2.4rem→4remへさらに拡大
   （1段階目からさらに約1.7倍）。 */
.wordmark.has-logo{align-items:center;}
/* 2026-08-10、Jackyさんの要望でサイズをハードコードから設定可能に変更。
   --logo-size-nav等はGeneral Settingsの「Logo Sizes」から設定でき、
   functions.phpのrockinme_base_inline_tokens()が<head>にCSS変数として
   出力する。未設定時はこれまで通りのデフォルト値（var()の第2引数）に
   フォールバックする。 */
.wordmark-logo{display:block;height:var(--logo-size-nav, 4rem);width:auto;}
.wordmark-logo svg{height:100%;width:auto;max-width:100%;display:block;}
@media (max-width:800px){.wordmark-logo{height:var(--logo-size-nav-mobile, 3.2rem);}}
.nav-links{display:flex;gap:32px;align-items:center;}
/* 2026-08、ナビをWP標準のwp_nav_menu()に置き換えた際（Jackyさんの要望:
   外観 > メニューで編集できるようにしたい）に追加。標準の出力は
   <ul class="menu"><li><a>...という構造だが、.nav-linksが元々<a>を直接の
   flexアイテムとして並べる前提のレイアウトだったため、生成される<ul>には
   display:contentsを当てて箱としての存在を消し、<li>がそのまま.nav-links
   のflexアイテムになるようにしている（既存のgap/align-items等の指定を
   一切変更せずに済む）。 */
.nav-links > ul{display:contents;}
.nav-links li{list-style:none;position:relative;}
.nav-links a{font-size:0.82rem;letter-spacing:0.06em;text-transform:uppercase;color:var(--color-ink-muted);transition:color .15s ease;}
.nav-links a:hover{color:var(--color-ink);}
/* サブメニュー（外観 > メニューで子項目として追加した場合、標準の
   Walker_Nav_Menuが自動的に付与する.sub-menuクラス）。PC幅ではホバー/
   フォーカスで展開するドロップダウン、モバイル幅では常時展開に
   @media側で切り替える（下記参照）。 */
.sub-menu{
	display:none;
	position:absolute;
	top:100%;left:0;
	flex-direction:column;
	gap:0;
	margin:0;padding:6px 0;
	background:var(--color-canvas-raised);
	border:1px solid var(--color-line-dark);
	min-width:180px;
	z-index:20;
}
.nav-links li:hover > .sub-menu,
.nav-links li:focus-within > .sub-menu{display:flex;}
.sub-menu a{display:block;padding:10px 16px;white-space:nowrap;}
.lang-chip{
	font-family:var(--font-mono);
	font-size:0.7rem;
	border:1px solid var(--color-line-dark);
	border-radius:4px;
	padding:4px 8px;
	color:var(--color-ink-muted);
}

/* ハンバーガートグル（狭幅時のみ表示） */
.nav-toggle{
	display:none;
	flex-direction:column;
	justify-content:center;
	gap:5px;
	width:38px;height:38px;
	background:transparent;
	border:1px solid var(--color-line-dark);
	border-radius:3px;
	cursor:pointer;
	flex-shrink:0;
}
.nav-toggle-bar{display:block;width:18px;height:2px;background:var(--color-ink);margin:0 auto;transition:transform .15s ease, opacity .15s ease;}
.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(2){transform:translateY(7px) rotate(45deg);}
.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(3){opacity:0;}
.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(4){transform:translateY(-7px) rotate(-45deg);}

@media (max-width:800px){
	.wordmark{font-size:1.15rem;}
	.nav-toggle{display:flex;}
	.nav-links{
		display:none;
		position:absolute;
		top:100%;left:0;right:0;
		flex-direction:column;
		align-items:flex-start;
		gap:0;
		background:var(--color-canvas);
		border-bottom:1px solid var(--color-line-dark);
		padding:6px 32px 18px;
	}
	.nav-links.is-open{display:flex;}
	.nav-links li{width:100%;}
	/* 2026-08-13、Jackyさんのモバイル表示指摘: <a>が既定のdisplay:inlineのまま
	   だったため、width:100%が無視され（inline要素には効かない仕様）、
	   padding/border-bottomも周囲のレイアウトを押し広げず描画のみされる
	   （行の高さに影響しない）。その結果、各項目の区切り線が自分の文字の
	   下ではなく次の項目のテキストに重なって表示されていた（スクショで発覚）。
	   display:blockにして通常のブロック要素として高さを確保させることで解消。 */
	.nav-links a{display:block;padding:14px 0;border-bottom:1px solid var(--color-line-dark);width:100%;}
	/* モバイル幅ではホバーが使えないため、サブメニューは常時展開（インデント
	   付きの通常表示）に切り替える（PC幅の.sub-menu定義を上書き）。 */
	.sub-menu{
		display:flex;position:static;
		background:none;border:none;
		padding:0 0 0 16px;
		min-width:0;
	}
	.sub-menu a{padding:12px 0;}
	.lang-chip{margin-top:14px;}
}

.screen-reader-text{
	position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
	clip:rect(0,0,0,0);white-space:nowrap;border:0;
}

/* ---------- HERO ---------- */
/* 2026-08-10、Jackyさんの指摘対応: 「ヒーローロゴを大きくするとヒーロー
   セクション自体がそのまま拡大するのが微妙」という指摘を受け、.hero自体に
   ロゴサイズ設定値とは独立した高さの枠（min-height）を持たせた。
   min-heightはあくまで「下限」のため、中身がこの枠を超える量であれば
   従来通り.hero自体も伸びる。「ロゴサイズ設定をいくら大きくしても
   ヒーローが際限なく伸び続ける」という本来の問題は、.hero-logo側で
   ロゴの実効最大サイズ自体に（設定値とは無関係の）固定の上限を
   別途設けることで解消している（.hero-logoのコメント参照）。
   2026-08-10追記（同日中に修正）: 上記の初回実装ではdisplay:grid＋
   align-items:centerを併用し、中身をmin-heightの枠内で縦方向センタリング
   していたが、これによりLeoの元デザイン（左上寄せ・テキストは常に
   padding-top分の位置から開始）から見た目が縦方向に大きく変わってしまい
   （中身がmin-heightの枠より低い場合、paddingの位置ではなく枠の縦中央に
   浮くようになっていた）、Jackyさんから「センタリングになったのはなぜ？」
   との指摘を受けた。display:grid／align-items:centerを撤去し、通常の
   ブロックレイアウトに戻すことで、中身は常にpadding-top（96px）の位置から
   開始する元通りの左上寄せの見た目に戻した。min-heightによる下限効果
   （中身が枠より小さい場合は枠の「下」に余白が残るだけで、中身の位置自体は
   動かない）と、.hero-logoのロゴサイズ上限キャップは維持している。 */
.hero{
	position:relative;
	padding:96px 0 88px;
	overflow:hidden;
	border-bottom:1px solid var(--color-line-dark);
	min-height:clamp(440px, 44vw, 620px);
}
/* 背景画像が設定されている場合（最新リリースのジャケ写等）はcover表示にする。
   将来スライダー化する場合、この.has-hero-imageのbackground-image指定を
   JS側で複数枚を差し替える形に流用できる。 */
.hero.has-hero-image{
	background-size:cover;
	background-position:center;
}
.hero::before{
	content:"";
	position:absolute; inset:-20% -10% auto -10%;
	height:140%;
	background:
		radial-gradient(circle at 72% 30%, color-mix(in srgb, var(--color-accent-1) 55%, transparent), transparent 55%),
		radial-gradient(circle at 30% 75%, color-mix(in srgb, var(--color-accent-2) 12%, transparent), transparent 50%);
	filter:blur(10px);
	pointer-events:none;
}
/* 背景画像使用時のみ、可読性確保のための暗いオーバーレイを重ねる
   （::beforeのアクセントグローとは別レイヤー。画像が無い時は不要なので
   .has-hero-imageの時だけ有効化する）。 */
.hero.has-hero-image::after{
	content:"";
	position:absolute; inset:0;
	background:linear-gradient(180deg,
		color-mix(in srgb, var(--color-canvas) 55%, transparent) 0%,
		color-mix(in srgb, var(--color-canvas) 88%, transparent) 100%);
	pointer-events:none;
}
/* 背景スライドショー（複数リリースのジャケ写をディゾルブでクロスフェード）。
   ホールド秒はJS（hero-slideshow.js）側のdata-hold-seconds属性で制御し、
   ディゾルブ（クロスフェード）秒はCSSカスタムプロパティ --hero-dissolve-duration
   （インラインstyleでPHP側から注入）で制御する。 */
.hero-slideshow{position:absolute; inset:0; z-index:0;}
.hero-slide{
	position:absolute; inset:0;
	background-size:cover;
	background-position:center;
	opacity:0;
	transition:opacity var(--hero-dissolve-duration, 1.5s) ease;
}
.hero-slide.is-active{opacity:1;}
/* パンアップ/ダウン演出。横長画面でbackground-size:coverにより
   ジャケ写（正方形基準）の上下が大きくトリミングされる問題を緩和するため、
   背景位置を上→下へゆっくりパンさせる（左右はセンター固定）。
   ループ・往復はさせず一方通行のみ：指定秒数かけて下まで着いたらそこで
   静止する（animation-fill-mode:forwardsで終端の状態を保持）。等速（linear）。
   スライドショー時の狙いは「1枚ごとに上からパンし直す。ただし表示から
   外れる（フェードアウトが始まる）瞬間にパン位置が巻き戻らず、
   パンしたまま/パン中ならパンを続けたままフェードアウトする」という動き。
   これを実現するため、パンのanimationは.is-activeにスコープせず
   全.hero-slideへ常時適用する（opacityの表示制御と完全に分離し、
   .is-active脱落時にanimationごとキャンセルされて位置が戻るのを防ぐ）。
   その代わり「新しく表示されるスライドは必ず上から再生し直す」処理は
   JS（hero-slideshow.js）側で、そのスライドをis-active化するのと同時に
   animationを強制リスタート（inline style一時的にnoneにしてリフロー）
   することで実現している。
   単一画像モード（スライドショーOFF）ではページ読み込み時に1回だけパンし、
   下で静止する（is-activeの概念自体が無いためJS側の処理は不要）。
   パンし切るまでの秒数はCSSカスタムプロパティ --hero-pan-duration
   （インラインstyleでPHP側から注入）で制御する。 */
@keyframes hero-pan{
	from{ background-position:50% 0%; }
	to{ background-position:50% 100%; }
}
.hero.has-hero-image.has-pan,
.hero-slideshow.has-pan .hero-slide{
	animation:hero-pan var(--hero-pan-duration, 8s) linear forwards;
}
@media (prefers-reduced-motion:reduce){
	.hero-slide{transition:none;}
	.hero.has-hero-image.has-pan,
	.hero-slideshow.has-pan .hero-slide{
		animation:none;
	}
}
.hero-inner{position:relative;z-index:1;}
.eyebrow{
	font-family:var(--font-mono);
	font-size:0.72rem;
	letter-spacing:0.16em;
	text-transform:uppercase;
	color:var(--color-accent-2);
	display:block;
	margin-bottom:22px;
}
/* 2026-08-13新設: 詳細ページ上部の「← 一覧へ」コンテキストリンク
   （rockinme_base_render_back_link()）。ブラウザバックの代替ではなく、
   SNS等から直接詳細ページに来た場合でも一覧に戻れる軽い道しるべなので、
   .eyebrowより主張を抑えた地味な配色（ミュート→hoverでink）にしている。 */
.back-link{
	font-family:var(--font-mono);
	font-size:0.72rem;
	letter-spacing:0.06em;
	text-transform:uppercase;
	color:var(--color-ink-muted);
	display:inline-block;
	margin-bottom:22px;
	transition:color .15s ease;
}
.back-link:hover{color:var(--color-ink);}
/* 2026-08-13、Jackyさんの指摘: back-link導入後、直後に続く<section>自体の
   padding-top（既定80px、または各テンプレート個別のモバイル調整値）が
   back-linkのmargin-bottom（22px）に上乗せされ、リンクとタイトル/日付等の
   間が二重に空いてしまっていた。back-linkは「その1つ下の見出しのための
   間隔」をmargin-bottomで既に持っているため、直後のsection自身の
   padding-topは不要——隣接セレクタで0に打ち消す（Release/Artist/Show/News
   の4テンプレート全てに共通で効く。他の要素が続く場合のsection側の
   padding-topには影響しない）。 */
.back-link+section{padding-top:0;}
h1.hero-title{
	font-family:var(--font-display);
	font-weight:400;
	font-size:clamp(3rem, 9vw, 7.5rem);
	line-height:0.92;
	letter-spacing:0.005em;
	margin:0 0 28px;
	text-wrap:balance;
	max-width:16ch;
}
.hero-title .accent{color:var(--color-accent-1);}
/* レーベルロゴ（SVG、2026-08新設）。設定されている場合、ヒーローの見出しで
   テキスト（h1.hero-title、視覚的にはscreen-reader-textで隠す）の代わりに
   表示する。サイズ・下マージンはh1.hero-titleに揃え、色もfill="currentColor"
   でテキストと同じインクカラーに追従させる（Artist個別ページの
   .artist-name-logoと同じ考え方）。 */
/* 2026-08-10、Jackyさんの指示で「ヒーローの縦幅（高さ）に対して概ね30%程度」
   に拡大。.heroはpadding:96px 0 88px＋中身（eyebrow/タイトル/tagline/
   ボタン）で高さが決まる可変（auto）ボックスであり、CSSのheight:30%は
   「明示的に高さを持つ親」にしか効かないため、.hero自体には適用できない
   （このサイトはheroに固定のvh等を与えていない）。そのため、
   .heroの実測高さがだいたい収まるレンジ（96+88pxの余白＋本文一式で
   概ね400〜500px程度）から逆算し、その30%に相当する高さになるよう
   clamp()の上下限とvw基準値を調整して近似した。
   同日、最初の調整（clamp(5rem,14vw,9.5rem)）では「まだ小さい」との
   フィードバックを受け、上限・下限とも明確に引き上げた
   （下限5rem→8rem、vw基準14vw→22vw、上限9.5rem→15rem）。
   同日、ハードコードをやめてサイズ設定可能に変更。画面幅追従の
   最小値(8rem)・vw係数(22vw)は据え置き、設定できるのは上限のみ
   （--logo-size-hero、General Settings「Logo Sizes」）。
   2026-08-10追記: 「ロゴを大きくするとヒーロー全体が際限なく拡大する」
   というJackyさんの指摘を受け、--logo-size-heroの値がどれだけ大きく
   設定されても実際のロゴ高さが15remを超えないよう、min()でハード
   キャップした。.hero側に新設したmin-heightの枠（440〜620px）は
   この15rem上限を前提に計算しているため、これより先は設定値を
   大きくしてもロゴもヒーロー全体もこれ以上は大きくならない
   （縮小方向＝15rem未満の値を設定する分には従来通り反映される）。 */
.hero-logo{
	height:clamp(8rem, 22vw, min(var(--logo-size-hero, 15rem), 15rem));
	max-width:100%;
	margin:0 0 28px;
	color:var(--color-ink);
}
.hero-logo svg{height:100%;width:auto;max-width:100%;display:block;}
/* 2026-08-10、Jackyさんの要望でTagline（本テキスト）のフォントサイズ・
   フォントをハードコードから設定可能に変更（Frontpage Settings
   「Tagline Font Size」「Tagline Font」）。未設定時は従来通り。 */
.hero-sub{
	font-size:var(--hero-tagline-font-size, 1.15rem);
	font-family:var(--hero-tagline-font-family, var(--font-body));
	color:var(--color-ink-muted);
	max-width:34ch;
	margin:0 0 40px;
}
.hero-actions{display:flex;gap:14px;flex-wrap:wrap;}
.btn{
	font-family:var(--font-body);
	font-weight:600;
	font-size:0.9rem;
	padding:14px 26px;
	border-radius:2px;
	border:1px solid transparent;
	cursor:pointer;
	transition:transform .15s ease, background .15s ease, border-color .15s ease, color .15s ease;
	display:inline-flex;align-items:center;gap:8px;
}
.btn:hover{transform:translateY(-2px);}
.btn-primary{background:var(--color-accent-1);color:var(--color-canvas);}
.btn-ghost{border-color:var(--color-line-dark);color:var(--color-ink);}
.btn-ghost:hover{border-color:var(--color-ink-muted);}

/* ---------- SECTION HEADERS ---------- */
section{padding:80px 0;border-bottom:1px solid var(--color-line-dark);}
.sec-head{
	display:flex;justify-content:space-between;align-items:flex-end;
	margin-bottom:40px;gap:20px;flex-wrap:wrap;
}
/* 2026-08-13、Jackyさんの指摘「折り返し関係を一挙にチェック」を受け、
   ディスプレイ書体の見出し・タイトル系セレクタでline-height未指定（body既定の
   1.7を継承）のまま2行以上に折り返しうる箇所を横断的に洗い出して修正した。
   page.php（固定ページ、例: 「特設ページ」）のようにthe_title()で任意長の
   タイトルが入る場合はこのh2も折り返しうる。 */
.sec-head h2{
	font-family:var(--font-display);
	font-weight:400;
	font-size:clamp(1.8rem,4vw,3rem);
	line-height:1.05;
	margin:0;
	letter-spacing:0.005em;
}
.sec-note{font-size:0.85rem;color:var(--color-ink-muted);max-width:32ch;text-align:right;}
@media (max-width:700px){.sec-note{text-align:left;}}
.sec-more{font-family:var(--font-mono);font-size:0.75rem;color:var(--color-ink-muted);border:1px solid var(--color-line-dark);padding:8px 14px;border-radius:3px;white-space:nowrap;}
.sec-more:hover{border-color:var(--color-accent-2);color:var(--color-accent-2);}

/* ---------- LATEST RAIL ---------- */
.rail{
	display:flex;gap:18px;overflow-x:auto;padding-bottom:8px;
	scrollbar-width:thin;
}
.rail-card{
	flex:0 0 220px;
	background:var(--color-canvas-raised);
	border:1px solid var(--color-line-dark);
	padding:16px;
}
/* 2026-08-13: 元は`.rail-thumb`という名前でここにサイズ指定があったが、実際にPHP側
   （rockinme_base_render_cover()）が出力するクラス名は`.cover`で、`.rail-thumb`は
   どこからも参照されない孤立したCSSだった。画像ありの場合は<img>自体の実寸で
   偶然表示されていたが、画像なし（色面パターンのフォールバック）の場合は`.cover`に
   一切サイズ指定が無く高さ0に潰れ、Newsカード等で何も表示されない不具合になっていた。 */
.rail-card .cover{width:100%;aspect-ratio:1;margin-bottom:14px;}
.rail-tag{font-family:var(--font-mono);font-size:0.68rem;color:var(--color-accent-2);letter-spacing:0.08em;text-transform:uppercase;}
.rail-card h4{font-size:0.98rem;line-height:1.3;margin:8px 0 4px;font-weight:700;}
.rail-card p{font-size:0.8rem;color:var(--color-ink-muted);margin:0;}

/* ---------- jacket placeholder（アートワーク未設定時のフォールバック） ---------- */
/* 2026-08-13: 旧cv-a〜cv-fの純CSS色面パターンから、事前合成済みwebp画像
   （themes/rockinme-base/assets/cover-fallback/、functions.php
   rockinme_base_render_cover()参照）に置き換え。画像側で背景・グレイン・
   スキャンライン・ロゴを全て含んでいるため、ここでは箱のサイズ・
   読み込み中の下地色のみを指定する。 */
.cover{position:relative;overflow:hidden;background:var(--color-artwork-letterbox);}
/* 2026-08-14、Jackyさんの指摘「横長のジャケット画像が切れる」で修正:
   アルバムジャケットは正方形が大半のため、object-fit:coverでも普段は
   containと見た目の差が出ない（正方形の画像なら両者が同じ結果になる）。
   ただし横長・縦長など正方形でないジャケット（例: INSPIRANTE (DEMO)、
   512×339px）だと、coverは正方形の枠に合わせて左右（または上下）を
   はみ出す形でトリミングしてしまい、意図しない範囲が切れて見える。
   containに変更し、非正方形の画像は枠内に収まる形でレターボックス
   表示されるようにした（正方形画像の見た目はcover/containで違いが
   出ないため、既存のジャケット表示への影響は無い）。 */
.cover img{width:100%;height:100%;object-fit:contain;display:block;}

/* ---------- DISCOGRAPHY ---------- */
/* 2026-08-10、Jackyさんの指示でソーターUIを再設計。従来はNEWEST FIRST/
   OLDEST FIRSTの2つのpillが他のフィルターpillと同列に並んでいたが、
   dashicons-sortのトグルボタン1つに統合した。
   配置は以下の変遷を経ている:
   1) 当初.filters内（フィルターpill群の右）にflexboxで右寄せを試みたが、
      pillが折り返して複数行になった際に位置が安定しない不具合が発生。
   2) .sec-head（見出し行）へ移動したが、Jackyさんの具体的な指定
      「ALL ARTISTSと同じ行の右寄せぐらいの位置か、そのちょい下
      （アルバムジャケット画像のちょい上）」により、見出し行では位置が
      離れすぎていることが判明。
   3) 最終的に、.filters（FORMAT/TYPE/ARTISTの3行のフィルターpill）の
      直後・グリッドの直前に独立した行（.sort-row）として配置する形に
      変更した。ARTISTのpill行と同じ行に同居させる案も検討したが、
      各filter-groupの内容幅次第で収まるかどうかが変動し1)の問題を
      再発させるリスクがあったため、確実に固定表示される独立行を選んだ。 */
.filters{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px;}
/* 2026-08、FORMAT/TYPE/ARTISTを常に別行にするため各グループにflex-basis:100%を
   付与。従来は自然な折り返し任せだったため、フィルターに出る項目数が少ない
   （例: 未使用の値を隠すようになった後のFORMAT行）と横幅に余裕ができ、
   TYPE行と同じ行に並んでしまっていた（Jackyさんの指摘）。 */
.filter-group{display:flex;flex-wrap:wrap;gap:8px;flex-basis:100%;}
.sort-row{display:flex;justify-content:flex-end;margin-bottom:22px;}
.pill{
	font-family:var(--font-mono);
	font-size:0.72rem;
	letter-spacing:0.03em;
	padding:7px 14px;
	border:1px solid var(--color-line-dark);
	border-radius:3px;
	color:var(--color-ink-muted);
	background:transparent;
	cursor:pointer;
	display:inline-block;
}
.pill.is-active{background:var(--color-accent-2);color:var(--color-canvas);border-color:var(--color-accent-2);font-weight:700;}
.pill.is-active-alt{background:var(--color-accent-1);color:var(--color-canvas);border-color:var(--color-accent-1);font-weight:700;}
/* 2026-08新設: Discography一覧のFORMAT/TYPE/ARTISTの3つのフィルターを
   色で見分けやすくするための3色目（Jackyさんの要望）。 */
.pill.is-active-3{background:var(--color-accent-3);color:var(--color-canvas);border-color:var(--color-accent-3);font-weight:700;}
/* 2026-08-14新設: カタログ検索欄（archive-release.php）。既存の.pill/
   .sort-toggleと同じ配色・角丸・ボーダーのトーンに揃え、フィルターpillの
   直前に独立した行として置く。 */
.search-row{display:flex;align-items:stretch;gap:8px;margin-bottom:14px;max-width:420px;}
.search-input{
	flex:1;
	font-family:var(--font-mono);
	font-size:0.82rem;
	padding:7px 12px;
	border:1px solid var(--color-line-dark);
	border-radius:3px;
	background:transparent;
	color:var(--color-ink);
}
.search-input::placeholder{color:var(--color-ink-muted);}
.search-submit{
	flex:0 0 auto;
	display:inline-flex;
	align-items:center;
	justify-content:center;
	width:34px;
	border:1px solid var(--color-line-dark);
	border-radius:3px;
	color:var(--color-ink-muted);
	background:transparent;
	cursor:pointer;
	transition:color .15s ease,border-color .15s ease;
}
.search-submit:hover{color:var(--color-accent-2);border-color:var(--color-accent-2);}
.search-clear{
	flex:0 0 auto;
	display:inline-flex;
	align-items:center;
	justify-content:center;
	width:34px;
	color:var(--color-ink-muted);
	font-size:1.2rem;
	line-height:1;
	text-decoration:none;
}
.search-clear:hover{color:var(--color-accent-1);}
.sort-toggle{
	flex:0 0 auto;
	display:inline-flex;
	align-items:center;
	justify-content:center;
	width:34px;
	height:34px;
	border:1px solid var(--color-line-dark);
	border-radius:3px;
	color:var(--color-ink-muted);
	background:transparent;
	cursor:pointer;
	transition:color .15s ease,border-color .15s ease;
}
.sort-toggle:hover{color:var(--color-ink);border-color:var(--color-line-light);}
.sort-toggle .dashicons{width:18px;height:18px;font-size:18px;}

.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:22px 20px;}
@media (max-width:900px){.grid{grid-template-columns:repeat(2,1fr);}}
.grid-item{cursor:pointer;}
.grid-item .cover{aspect-ratio:1;transition:transform .18s ease;}
.grid-item:hover .cover{transform:scale(1.015);}
.grid-item .meta{margin-top:12px;}
/* 2026-08-10、Jackyさんの指示で表示順をアーティスト名→タイトル（太字）→
   カタログ番号等のメタ情報に変更（archive-release.php/front-page.php）。
   末尾だった.cat（margin-bottom）から先頭だった.p（margin-bottom無し）へ
   下マージンの役割を付け替えた（各要素間の余白が保たれるように）。 */
.grid-item .meta p{margin:0 0 3px;font-size:0.78rem;color:var(--color-ink-muted);}
/* 2026-08-13、Jackyさんの指摘: フロントページ/カタログ一覧ページのカードで
   タイトルが2行に折り返した時、body既定のline-height:1.7を継承していて
   行間が間延びして見えていた。.detail-meta h3（リリース詳細ページのタイトル、
   同じ指摘で修正済み）と同種の対応。 */
.grid-item .meta h4{margin:0 0 3px;font-size:0.95rem;font-weight:700;line-height:1.3;}
.grid-item .meta .cat{font-family:var(--font-mono);font-size:0.7rem;color:var(--color-ink-muted);display:block;}
/* 発売日（2026-08-10、Jackyさんの指示でカタログ情報行から独立した4行目に分離）。
   .catと同じmono/ミュートカラーだが、行として区別できるよう上にわずかな余白を持たせる。 */
.grid-item .meta .rdate{font-family:var(--font-mono);font-size:0.7rem;color:var(--color-ink-muted);display:block;margin-top:2px;}

/* ---------- RELEASE DETAIL ---------- */
.detail{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:start;}
@media (max-width:820px){
	.detail{grid-template-columns:1fr;gap:0;}
	/* 2026-08-13、Jackyさんのモバイル表示指摘: PC版は「ジャケット＋説明／
	   タイトル＋アーティスト＋諸元＋リンク」の2カラムだが、1カラムに
	   収束するスマホでは単純にDOM順（ジャケット→説明→タイトル→…）に
	   積み上がってしまい、タイトル・アーティスト名を確認する前にジャケットが
	   来る不自然な順序になっていた。.detail-metaをdisplay:contentsにして
	   中身（タイトル・アーティスト名・諸元表・トラックリスト・各種リンク）を
	   .detailの直接のグリッドアイテムとして扱い、orderで
	   タイトル→アーティスト→ジャケット（.detail-media、説明文含む）→諸元→
	   トラックリスト/リンクの順に並べ替える。デスクトップ幅は無変更
	   （このブロックは@media (max-width:820px)内のみ）。
	   `gap:56px`はPC版で2カラム間に1箇所だけ効かせる想定の値だったが、
	   display:contentsで要素がバラバラの独立したグリッドアイテムになった
	   ことで、要素間すべてに56pxずつ掛かってしまい、タイトル・
	   アーティスト名の上下が異常に間延びする不具合が発生（Jackyさん指摘）。
	   グリッドアイテム同士の余白は各要素が元々持っているmargin
	   （h3のmargin-bottom:6px、.byのmargin-bottom:24px等）に委ね、
	   gap自体はモバイルでは0にする。 */
	.detail-meta{display:contents;}
	.detail-meta h3{order:0;}
	.detail-meta .by{order:1;}
	/* 2026-08-13、Jackyさん指摘その2: 諸元（発売日・型番等）と説明文の順序を
	   入れ替え、先に諸元を確認できるようにしたい（短い事実情報を先に、長い
	   説明文は後に読む方が自然、との判断）。説明文（.release-description）は
	   PC版では.detail-media内（ジャケット直下）に留めたいため、.detail-media
	   自体もdisplay:contentsにして中身（.cover・.detail-gallery・
	   .release-description）を個別のグリッドアイテムに分解し、説明文だけ
	   諸元の後ろへorderで移動させる。PC版のレイアウト（左カラムにジャケット
	   ＋説明文が縦に並ぶ）は無変更（このブロックは@media (max-width:820px)
	   内のみ）。 */
	.detail-media{display:contents;}
	.detail-media .cover,
	.detail-media .detail-gallery{order:2;}
	/* 2026-08-14、Jackyさんの指摘: モバイルではジャケット（.cover/.detail-gallery、
	   order:2）の直後に諸元表（.meta-table、order:3）が来るが、.detailの
	   gapを0にしている（このコメント少し上参照）ため、両者の間に余白が
	   一切無くくっついて見えていた。デスクトップは.meta-tableが.byの直後
	   （別カラム内、ジャケットとは隣接しない）に来るため、margin-topを
	   ここに足してもデスクトップの見た目には影響しない。 */
	.detail-meta .meta-table{order:3;margin-top:15px;}
	.release-description{order:4;}
	/* 2026-08-13、Jackyさん指摘その3: ディスク番号見出し（.tracklist-disc-heading、
	   2枚組以上の作品でトラックリストをディスク単位に区切る小見出し）が
	   このリストから漏れていたため、order未指定＝既定値0のままタイトル
	   （同じorder:0）の直後という意味不明な位置に表示されてしまっていた
	   （Jackyさんのスクリーンショットで発覚）。トラックリスト関連要素の
	   グループに含める。 */
	.detail-meta .detail-section-heading,
	.detail-meta .tracklist-disc-heading,
	.detail-meta .tracklist,
	.detail-meta .stream-row{order:5;}
	/* 2026-08-13、Jackyさんのモバイル表示指摘その4: order:0のタイトル（h3）が
	   ヘッダー直下に来るようになったことで、section本体のpadding-top（80px、
	   デスクトップの2カラムレイアウトを前提にした余白）がそのままタイトル
	   上の空白として出てしまい間延びして見える問題は、この後「← 一覧へ」
	   コンテキストリンクを新設した際に`.back-link+section{padding-top:0}`
	   （下記.back-link定義の近く）で全詳細ページ共通の形で解消したため、
	   ここでの#detail-example個別上書きは不要になり削除した。 */
}
.detail .cover{aspect-ratio:1;}
.detail-gallery{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;}
/* 2026-08-14新設、Jackyさんの指摘「追加画像がクリックしても何もしない」に
   対応。サムネイル自体を<button>にし、クリックでjs/gallery-lightbox.jsが
   拡大表示するライトボックスを開く。 */
.gallery-thumb{display:block;padding:0;border:none;background:none;cursor:pointer;}
.detail-gallery img{width:64px;height:64px;object-fit:cover;border:1px solid var(--color-line-dark);transition:border-color .15s ease;}
.gallery-thumb:hover img, .gallery-thumb:focus-visible img{border-color:var(--color-accent-2);}
/* ライトボックス本体。背景の暗さ・オーバーレイの挙動はテーマ配色に依存しない
   汎用UIパターンのため、rgba(0,0,0,..)の固定値を使う（レターボックスの
   下地色のようなブランド色相の判断は不要な領域）。 */
.gallery-lightbox{
	position:fixed;inset:0;z-index:1000;
	display:flex;align-items:center;justify-content:center;
	background:rgba(0,0,0,0.85);
	padding:32px;
}
.gallery-lightbox img{max-width:100%;max-height:100%;object-fit:contain;box-shadow:0 8px 32px rgba(0,0,0,0.4);}
.gallery-lightbox-close{
	position:absolute;top:20px;right:24px;
	width:40px;height:40px;
	display:flex;align-items:center;justify-content:center;
	background:transparent;border:1px solid rgba(255,255,255,0.4);border-radius:50%;
	color:#fff;font-size:1.5rem;line-height:1;cursor:pointer;
	transition:border-color .15s ease;
}
.gallery-lightbox-close:hover{border-color:#fff;}
body.gallery-lightbox-open{overflow:hidden;}
/* アルバム概要・説明文（description、2026-08-10新設）。ジャケット画像・
   ギャラリーの直下に配置。.artist-bioと同じ考え方の可読性重視スタイル。 */
.release-description{max-width:52ch;font-size:0.92rem;color:var(--color-ink-muted);margin-top:20px;}
.release-description p{margin:0 0 1.1em;}
.detail-meta .eyebrow{margin-bottom:14px;}
/* 2026-08-13、Jackyさんのモバイル表示指摘その5: body既定のline-height:1.7を
   そのまま継承していたため、2行以上に自然改行するタイトルで行間が間延びして
   見えていた。h1.hero-title（同じ--font-display、line-height:0.92）と同様、
   ディスプレイ書体は詰め気味の行間の方が見出しとして自然という判断で指定。 */
.detail-meta h3{font-family:var(--font-display);font-weight:400;font-size:2.2rem;line-height:1.05;margin:0 0 6px;letter-spacing:0.005em;}
.detail-meta .by{color:var(--color-ink-muted);margin:0 0 24px;font-size:1rem;}
.meta-table{width:100%;border-collapse:collapse;margin-bottom:28px;}
.meta-table td{font-family:var(--font-mono);font-size:0.82rem;padding:9px 0;border-bottom:1px solid var(--color-line-dark);}
.meta-table td:first-child{color:var(--color-ink-muted);width:38%;text-transform:uppercase;letter-spacing:0.05em;font-size:0.7rem;}
/* Catalog Noのそばに添える任意の注意書き（catalog_note、2026-08-10新設）。
   カタログ番号自体（mono、上段）とは視覚的に区別するため、非mono・小さめ・
   ミュートカラーで番号の下に折り返す。 */
.catalog-note{display:block;font-family:var(--font-body);font-size:0.72rem;color:var(--color-ink-muted);margin-top:3px;letter-spacing:0;}
.tracklist{list-style:none;margin:0 0 28px;padding:0;}
.tracklist li{display:flex;gap:14px;padding:9px 0;border-bottom:1px solid var(--color-line-dark);font-size:0.9rem;}
.tracklist .tnum{font-family:var(--font-mono);color:var(--color-ink-muted);width:2ch;}
.tracklist .tdur{margin-left:auto;font-family:var(--font-mono);color:var(--color-ink-muted);font-size:0.8rem;}
/* 2026-08-13新設: 曲ごとにクレジット（ボーカル・Feat.等）が異なる作品
   （ボーカルコレクション等）で表示するため、タイトルの下にサブテキストとして
   添える。ラベル文言（"Vocal."/"Feat."等）自体も管理画面側の入力値に含まれる
   ため、ここでは値をそのまま出力するのみ。クレジット欄が空の曲（BGM等）では
   tcreditスパン自体が出力されないため、行の高さは従来通りタイトル1行分のみで
   変わらない。 */
.tracklist .ttitle-group{display:flex;flex-direction:column;gap:2px;}
.tracklist .tcredit{font-size:0.76rem;color:var(--color-ink-muted);}
/* 複数ディスク構成のトラックリスト用の見出し（disc_label、2026-08-10新設）。
   単一ディスク作品ではこの見出し自体が出ないため、既存の表示に影響しない。 */
.tracklist-disc-heading{
	font-family:var(--font-mono);
	font-size:0.72rem;
	letter-spacing:0.08em;
	text-transform:uppercase;
	color:var(--color-accent-2);
	margin:24px 0 8px;
}
/* 2026-08-13、Jackyさんのモバイル表示指摘その6: 「Tracklist」見出し
   （.detail-section-heading）の直後に来る最初のディスク見出し
   （「Disc 1:」等）だけmargin-topを0にしたかったが、`:first-of-type`は
   タグ名（h4）単位での「そのタイプの最初の兄弟要素か」の判定であり、
   実際のDOM順で最初のh4は.detail-section-heading（Tracklist）側のため
   一度もマッチせず、意図した打ち消しが機能していなかった（常に
   margin-top:24pxが乗り、TracklistとDisc 1:の間が間延びして見えていた）。
   直前に.detail-section-headingが来る場合のみを隣接セレクタで明示的に
   狙う形に修正。2つ目以降のディスク見出し（Disc 2:等）はこのセレクタに
   マッチしないため、従来通りmargin-top:24pxで区切りの余白を保つ。 */
.detail-section-heading+.tracklist-disc-heading{margin-top:0;}
/* Tracklist・Streaming Linksの公開ページ側セクション見出し（2026-08-10新設）。
   見出しも説明も無くリストやアイコン列が唐突に始まるのが分かりにくいという
   Jackyさんのご指摘に対応。.tracklist-disc-heading（ディスク単位の小見出し）
   と同じマイクロタイポグラフィのトーンを踏襲し、直前の要素（meta-table・
   tracklistどちらもmargin-bottomを持つ）と衝突しないようmargin-topは0。 */
.detail-section-heading{
	font-family:var(--font-mono);
	font-size:0.72rem;
	letter-spacing:0.08em;
	text-transform:uppercase;
	color:var(--color-accent-2);
	margin:0 0 8px;
}
/* 2026-08、Streaming/Digital Sales/Physical Sales等、.detail-section-heading+
   .stream-rowの組が複数連続するようになったため、次の見出しとの間隔が
   詰まりすぎる不具合が発生（Jackyさんの指摘）。.stream-row側にmargin-bottom
   を持たせることで、組が何回続いても常に一定の間隔があくようにした。 */
/* Official Store（2026-08新設、2026-08-13デザイン変更）。当初は
   accent-1地色の単独バナーで目立たせていたが、Jackyさんの指摘「他の
   Streaming/Digital Sales/Physical Salesセクションと見た目のトーンを
   揃えたい。特別感はロゴがあるだけで十分」を受け、通常の
   .detail-section-heading+.stream-rowの組と同じ見た目に変更した。
   .official-store-headingはWordmark SVGを見出しテキストと同じ行に
   インラインで並べるための最小限の指定のみ持つ。 */
.official-store-heading{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap;}
.official-store-wordmark{height:28px;display:inline-flex;align-items:flex-end;margin-bottom:2px;}
.official-store-wordmark svg{height:100%;width:auto;display:block;}

.stream-row{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:20px;}
.stream-btn{
	display:inline-flex;align-items:center;justify-content:center;
	/* 2026-08-10、Jackyさんの指示でもう少し大きく（視認性・タップしやすさ
	   向上のため）。40px→44pxへ、アイコン本体（.platform-icon）とあわせて
	   微調整（極端な変更は不要とのことだったため、ボタン外枠・アイコン
	   本体とも1割前後の増加に留めた。周囲の余白比率は概ね維持）。 */
	width:44px;height:44px;
	border:1px solid var(--color-line-dark);
	border-radius:3px;color:var(--color-ink);
	transition:border-color .15s ease, color .15s ease;
}
.stream-btn:hover{border-color:var(--color-accent-2);color:var(--color-accent-2);}
/* 2026-08-10、Jackyさんの指示で「サイズの統一は縦サイズの統一でいい」と
   なったため、height（縦サイズ）のみ固定しwidth:autoで各アイコン本来の
   アスペクト比のまま横幅が決まるようにした（以前はwidth/height両方を
   18pxに固定しており、正方形以外のviewBoxのアイコンが来ると歪む
   構成だった）。
   2026-08-10追記: 18px→20pxへ微調整（.stream-btnの拡大とあわせて、視認性
   向上のためのサイズアップ依頼）。 */
.platform-icon{height:20px;width:auto;display:block;}

/* ---------- ARTISTS ---------- */
.artist-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;}
@media (max-width:700px){.artist-grid{grid-template-columns:1fr;}}

/* 2026-08-10、Jackyさんの指摘で構成を変更: 当初ロゴを写真に重ねる実装
   だったが「肝心のアーティストの顔を隠してしまっている」との指摘を受け、
   写真の下にキャプションのように配置する構成に変更した（左寄せ指定）。
   これに伴い、カード全体を1枚の絶対配置画像として扱う旧構成
   （.artist-card自体にaspect-ratio、img/duo/labelを全てposition:absolute
   で重ねる）をやめ、「写真ブロック（.artist-card-media、アスペクト比固定）
   →キャプション（.artist-card-caption、通常のブロックフロー）」という
   .grid-item（Release一覧カード）と同種の縦積み構成に統一した。 */
.artist-card{display:block;}
.artist-card-media{position:relative;aspect-ratio:4/3;overflow:hidden;background:var(--color-canvas-raised);}
.artist-card-media img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0;}
.artist-card-media .duo{position:absolute;inset:0;}
.artist-card-media .duo.a{background:radial-gradient(circle at 30% 20%, color-mix(in srgb, var(--color-accent-1) 90%, transparent), var(--color-canvas) 65%);}
.artist-card-media .duo.b{background:radial-gradient(circle at 70% 30%, color-mix(in srgb, var(--color-accent-2) 55%, transparent), var(--color-canvas) 65%);}

.artist-card-caption{margin-top:14px; text-align:left;}
.artist-card-caption .tag{font-family:var(--font-mono);font-size:0.68rem;color:var(--color-accent-2);text-transform:uppercase;letter-spacing:0.08em;display:block;margin-bottom:6px;}
.artist-card-caption h4{font-family:var(--font-display);font-weight:400;font-size:1.7rem;line-height:1.1;margin:0;color:var(--color-ink);}

/* ロゴ（SVG）が設定されている場合、写真の下のキャプション領域に
   テキストの代わりにロゴを左寄せで表示する（2026-08-10、Jackyさんの指摘で
   写真重ね配置から変更）。もはや写真の上ではなく通常のカード背景の上に
   乗るため、視認性のための白色化・スクリム・drop-shadowは不要になった。
   Artist個別ページの.artist-name-logoと同じ考え方で、
   fill="currentColor"（rockinme_get_inline_svg_markup()が付与）を
   テキストと同じ.artist-card-caption内のcolorトークンに追従させる。
   2026-08-10、ハードコードをやめてサイズ設定可能に変更
   （--logo-size-artist-card、General Settings「Logo Sizes」）。 */
.artist-card-caption .card-name-logo{
	/* 2026-08-10、Jackyさんの指示で既定サイズも拡大（2.6rem→3.6rem）。 */
	height:var(--logo-size-artist-card, 3.6rem);
	max-width:100%;
	color:var(--color-ink);
}
.artist-card-caption .card-name-logo svg{
	height:100%;
	width:auto;
	max-width:100%;
	display:block;
}

/* 2026-08: 一度object-fit:containで写真全体を表示する方式を試したが、
   letterbox/pillarboxの見た目が「ださい」とのJackyさんの判断で撤回し、
   21:9横長バンドへのcoverクロップに戻した（元の実装）。その代わり、
   Artist編集画面の「Add Photo」フィールド説明に推奨解像度・アスペクト比
   （21:9、被写体は中央に配置）を明記する対応にした
   （plugins/rockinme-core/includes/cmb2-fields.php参照）。 */
.artist-profile-hero{aspect-ratio:21/9;margin-bottom:32px;}

/* ロゴ（SVG）が設定されている場合、写真には重ねず、通常テキストの
   アーティスト名見出しと同じ位置（説明文の直前）に配置する
   （2026-08、Jackyさんの指示。一度写真へ重ねる案を実装したが、
   「テキストの時と同じ場所に」という指示で撤回した）。
   下マージンはh1のCSS既定値（margin:0 0 28px、211行目付近）に合わせる。
   高さは当初テキスト見出し（single-artist.phpのインラインstyle上書き値
   clamp(2.2rem,6vw,4.5rem)）と揃えていたが、2026-08-10「もっと大きくして
   いい」とのJackyさんの指示でテキスト見出しの規定サイズ（h1.hero-titleの
   デフォルトclamp(3rem,9vw,7.5rem)、211行目付近）よりもさらに大きい
   clamp(4.5rem,14vw,10rem)に拡大した。ロゴは主役として扱う方針のため、
   テキストより目立つサイズが自然という判断。
   同日、ハードコードをやめてサイズ設定可能に変更。画面幅追従の
   最小値(4.5rem)・vw係数(14vw)は据え置き、設定できるのは上限のみ
   （--logo-size-artist-detail、General Settings「Logo Sizes」）。 */
.artist-name-logo{
	height:clamp(4.5rem, 14vw, var(--logo-size-artist-detail, 10rem));
	max-width:100%;
	margin:0 0 28px;
	color:var(--color-ink);
}
.artist-name-logo svg{
	height:100%;
	width:auto;
	max-width:100%;
	display:block;
}
.artist-bio{max-width:64ch;font-size:1rem;margin-bottom:32px;}
.artist-bio p{margin:0 0 1.2em;}
.sns-row{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:48px;}

/* ---------- EVENTS ---------- */
table.events{width:100%;border-collapse:collapse;}
table.events th{
	text-align:left;font-family:var(--font-mono);font-size:0.68rem;letter-spacing:0.08em;
	text-transform:uppercase;color:var(--color-ink-muted);padding:0 0 14px;border-bottom:1px solid var(--color-line-dark);
}
table.events td{padding:18px 0;border-bottom:1px solid var(--color-line-dark);font-size:0.92rem;vertical-align:middle;}
table.events td.date{font-family:var(--font-mono);color:var(--color-accent-2);white-space:nowrap;}
table.events td.venue{color:var(--color-ink-muted);font-size:0.85rem;}
.ticket-link{font-family:var(--font-mono);font-size:0.75rem;border:1px solid var(--color-line-dark);padding:7px 14px;border-radius:3px;white-space:nowrap;}
.ticket-link:hover{border-color:var(--color-accent-1);color:var(--color-accent-1);}

/* ---------- NEWS ---------- */
.news-list{display:flex;flex-direction:column;}
.news-item{display:flex;justify-content:space-between;gap:24px;padding:26px 0;border-bottom:1px solid var(--color-line-dark);align-items:baseline;flex-wrap:wrap;}
/* 2026-08-13、Jackyさんの指摘: 「News」見出しと1件目の日付の間が、Catalog/
   Artists/Events一覧に比べて間延びして見える。原因は.sec-head自身の
   margin-bottom（40px）に加えて.news-item自身のpadding-top（26px）が
   1件目にも乗り、計66pxになっていたため（他の一覧は1件目に余分な
   padding-topを持たない）。1件目だけpadding-topを打ち消し、他の一覧と
   同じ40px基調に揃える（2件目以降のitem間の余白は変えない）。 */
.news-list .news-item:first-child{padding-top:0;}
/* 2026-08-13、Jackyさんの指摘: News詳細ページの日付（.eyebrow、accent-2の
   グリーン）と一覧ページの日付（ここ、ink-muted）で色が食い違っていた。
   一覧側もaccent-2に揃えて統一。 */
.news-item .date{font-family:var(--font-mono);font-size:0.78rem;color:var(--color-accent-2);flex:0 0 110px;}
.news-item .body{flex:1;min-width:220px;}
.news-item h4{margin:0 0 8px;font-size:1.05rem;line-height:1.3;font-weight:700;}
.news-item .tags{display:flex;gap:6px;flex-wrap:wrap;}
.news-item .tags span{font-family:var(--font-mono);font-size:0.66rem;color:var(--color-accent-1);border:1px solid var(--color-line-dark);padding:3px 8px;border-radius:3px;}
.news-single .body-content{max-width:68ch;font-size:1.02rem;margin-top:32px;}
.news-single .body-content p{margin:0 0 1.3em;}
/* 2026-08-14新設、Jackyさんの依頼「ブログ投稿でアイキャッチある場合には
   記事ページにはアイキャッチどっかに表示してほしい」に対応。アイキャッチ
   未設定の投稿では何も出さない（rockinme_base_render_cover()のような
   合成フォールバック画像は使わない。News記事の実写真等が前提のため、
   ジャケ写用のフォールバックを流用すると不自然になる）。 */
.news-single-thumb{margin:20px 0 8px;max-width:68ch;}
.news-single-thumb img{width:100%;height:auto;display:block;border-radius:3px;}

/* ---------- SUPPORT (quiet) ---------- */
/* panelは骨格上「明るい面」であることが前提のため、その上の文字色には
   ダーク基調の--color-canvasを転用する（新たなhexトークンを追加しない）。
   2026-08、ライトテーマ導入にあたりLeo（design部門）から指摘: panel/canvasは
   ライトテーマでは役割ごと入れ替わる（ライトのpanel＝暗い差し込み面、
   canvas＝明るい紙面）ため、この前提自体はライトテーマでも変わらず成立する
   （詳細は design/whiplash_records_site/20260810_提案_ライトテーマ配色.md 1章）。 */
.support{background:var(--color-panel);color:var(--color-canvas);border-bottom:none;}
.support .sec-head h2{color:var(--color-canvas);}
/* 2026-08-13新設: Supportページ単独表示時のback-link対応。.supportは
   背景/文字色が反転した配色（panel背景・canvas文字）なので、他ページ用の
   .back-link既定色（ink-muted、canvas背景前提）ではなく、.support-note等と
   同じcolor-mix(canvas)系に合わせる。has-back-link時のみsection自身の
   padding-topを0にし、back-linkのmargin-bottomだけで間隔を持たせる
   （他ページの`.back-link+section{padding-top:0}`と同じ意図）。 */
.support.has-back-link{padding-top:0;}
.support .back-link{color:color-mix(in srgb, var(--color-canvas) 55%, transparent);}
.support .back-link:hover{color:var(--color-canvas);}
.support-inner{max-width:640px;}
.support p{color:color-mix(in srgb, var(--color-canvas) 75%, transparent);font-size:0.98rem;}
/* 2026-08-14、Jackyさんの指摘「デザイン的にやっつけなんでもう少し
   スタイリッシュに、UI/UXをちゃんと考えたデザインに」を受けて全面刷新。
   .btn/.btn-primary/.btn-ghost（他ページのCTAと共通）を流用しつつ、
   .support区画だけcanvas/panel/inkの役割が反転している前提
   （上部コメント参照）に合わせてスコープ内だけ色を補正している。 */
.support-form{margin-top:32px;max-width:480px;}
.support-fields{display:flex;flex-direction:column;gap:20px;}
.support-field{display:flex;flex-direction:column;gap:6px;}
.support-field label{
	font-family:var(--font-mono);font-size:0.72rem;letter-spacing:0.06em;text-transform:uppercase;
	color:color-mix(in srgb, var(--color-canvas) 65%, transparent);
}
/* 2026-08、Leoの指摘で修正: 背景がbackground:#fff直書きだったため、ライト
   テーマ（文字色var(--color-canvas)が明るい色になる）と組み合わせると
   「明るい文字×白背景」で実質読めなくなる不具合があった。#fffの代わりに
   var(--color-ink)を使うことで、ink/canvasという「常に強いコントラストを
   持つよう設計されたトークンペア」をそのまま入力欄の背景/文字色に転用する
   形にした。ダークテーマではink(#f5f3ee)は元の#fffとほぼ同じ見た目のため
   実質変化なし、ライトテーマではink(#1a1917付近)が暗い背景になり、明るい
   canvas文字と正しくコントラストする。2026-08-14、UI/UX改善の一環で
   border-radius・focus状態・トランジションを追加。 */
.support-form input, .support-form textarea, .support-form select{
	background:var(--color-ink);border:1px solid var(--color-line-light);border-radius:3px;padding:12px 14px;
	font-family:var(--font-body);font-size:0.9rem;color:var(--color-canvas);
	transition:border-color .15s ease;
}
.support-form input:hover, .support-form textarea:hover, .support-form select:hover{border-color:var(--color-canvas);}
.support-form input:focus-visible, .support-form textarea:focus-visible, .support-form select:focus-visible{
	outline:2px solid var(--color-accent-2);outline-offset:1px;border-color:var(--color-accent-2);
}
.support-form textarea{resize:vertical;min-height:120px;}
.support-fields > button{margin-top:6px;align-self:flex-start;}
/* サイト全体のCTA（.btn系）を流用するが、.support区画だけcanvas/ink/panelの
   役割が反転しているため、.btn-ghostの文字色（既定var(--color-ink)、通常の
   canvas背景を前提にした値）だけこの区画専用に補正する。.btn-primaryは
   accent-1が固定の配色トークンで反転の影響を受けないためそのまま使える。 */
.support .btn-ghost{color:var(--color-canvas);border-color:color-mix(in srgb, var(--color-canvas) 40%, transparent);}
.support .btn-ghost:hover{border-color:var(--color-canvas);}
.support-form button:disabled{opacity:0.6;cursor:default;transform:none;}
/* 2026-08-14、実機確認時に発覚した不具合の修正: `.support-fields{display:flex}`
   と`.support-confirm{display:flex}`（下記）が、hidden属性のUAスタイル
   （[hidden]{display:none}）と同じ詳細度のため、author側のこのdisplay
   指定がhidden属性を実質無効化してしまい、JSでhidden切り替えしても
   両方同時に表示され続けていた。[hidden]込みのセレクタで明示的に
   display:noneを上書きし直すことで解消。 */
.support-fields[hidden], .support-confirm[hidden]{display:none;}
/* 確認画面（.support-confirm、初期状態はhidden属性で非表示。
   support-form.jsがトグルする）。入力画面との違いが一目で分かるよう、
   内容をカード状のパネル（.support-confirm-card）に収めている。 */
.support-confirm{display:flex;flex-direction:column;gap:4px;margin-top:32px;max-width:480px;}
.support-confirm-card{
	border:1px solid color-mix(in srgb, var(--color-canvas) 25%, transparent);
	border-radius:4px;padding:20px 22px;
	background:color-mix(in srgb, var(--color-canvas) 6%, transparent);
}
.support-confirm-list{margin:0;}
.support-confirm-row{padding:12px 0;border-bottom:1px solid color-mix(in srgb, var(--color-canvas) 18%, transparent);}
.support-confirm-row:first-child{padding-top:0;}
.support-confirm-row:last-child{padding-bottom:0;border-bottom:none;}
.support-confirm-list dt{font-family:var(--font-mono);font-size:0.7rem;letter-spacing:0.06em;text-transform:uppercase;color:color-mix(in srgb, var(--color-canvas) 55%, transparent);margin:0;}
.support-confirm-list dd{margin:5px 0 0;font-size:0.95rem;color:var(--color-canvas);}
.support-confirm-message{white-space:pre-wrap;line-height:1.6;}
.support-confirm-note{font-size:0.82rem;line-height:1.7;color:color-mix(in srgb, var(--color-canvas) 65%, transparent);margin:16px 0 0;}
.support-confirm-actions{display:flex;gap:12px;margin-top:14px;flex-wrap:wrap;}
.support-note{font-size:0.8rem;color:color-mix(in srgb, var(--color-canvas) 55%, transparent);margin-top:10px;}
/* ハニーポット欄（スパムbot対策）。display:noneは一部のbotが素通りするため、
   視覚的には隠しつつDOM上には存在させる方式にする（アクセシビリティ上も
   aria-hidden+tabindex="-1"で実際の利用者には一切触れさせない）。 */
.support-hp{position:absolute;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden;}
/* 2026-08-14、UI/UX改善: 送信結果を単なるテキストからアラートボックスに変更。
   is-success/is-errorが付いた時だけ枠・背景・パディングが現れるようにし、
   平常時（クラス無し）は何も表示されないよう変数で切り替える。 */
.support-form-status{font-size:0.85rem;margin-top:4px;border-radius:3px;transition:padding .15s ease;}
.support-form-status:empty{margin:0;}
.support-form-status.is-success, .support-form-status.is-error{
	padding:14px 16px;line-height:1.6;margin-top:18px;
	border:1px solid transparent;
}
.support-form-status.is-success{background:color-mix(in srgb, var(--color-accent-2) 14%, transparent);border-color:color-mix(in srgb, var(--color-accent-2) 40%, transparent);color:var(--color-accent-2);}
.support-form-status.is-error{background:color-mix(in srgb, var(--color-accent-1) 14%, transparent);border-color:color-mix(in srgb, var(--color-accent-1) 40%, transparent);color:var(--color-accent-1);}

footer.site-footer{padding:40px 0;}
.footer-row{display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;font-size:0.78rem;color:var(--color-ink-muted);}
.footer-row .wordmark{font-size:1rem;}

.empty-note{color:var(--color-ink-muted);font-size:0.9rem;}
