/* ═══════════════════════════════════════════════════════════════
   COMPONENTS
   NYT-inspired component library for Nordic Observer
   ═══════════════════════════════════════════════════════════════ */

/* ── MASTHEAD (NYT-style centered nameplate) ─────────────────── */

.masthead {
	border-top: 4px solid var(--no-ink);
	border-bottom: 1px solid var(--no-rule);
	padding: var(--s4) 0;
	text-align: center;
}

.masthead__top {
	display: flex;
	justify-content: space-between;
	align-items: center;
	margin-bottom: var(--s3);
}

.masthead__date {
	font: 400 0.8125rem/1 var(--sans);
	color: var(--no-ink-tertiary);
}

.masthead__motto {
	font: italic 400 0.75rem/1.3 var(--serif);
	color: var(--no-ink-tertiary);
}

.masthead__name {
	font-family: var(--display);
	font-weight: 900;
	font-size: clamp(1.25rem, 3vw + 0.5rem, 2.5rem);
	line-height: 1;
	color: var(--no-ink);
	text-transform: uppercase;
	letter-spacing: 0.25em;
	margin: var(--s3) 0;
}

.masthead__tagline {
	font: italic 400 0.875rem/1 var(--serif);
	color: var(--no-ink-tertiary);
	margin-top: var(--s1);
}

/* ── FLAGS ────────────────────────────────────────────────────── */

.flag {
	display: inline-block;
	width: 1.25em;
	height: 1.25em;
	vertical-align: -0.2em;
	border-radius: 50%;
	background-size: cover;
	background-position: center;
}

.flag--sm  { width: 1em; height: 1em; }
.flag--lg  { width: 2em; height: 2em; }
.flag--xl  { width: 3em; height: 3em; }

.flag-se { background-image: url("https://hatscripts.github.io/circle-flags/flags/se.svg"); }
.flag-dk { background-image: url("https://hatscripts.github.io/circle-flags/flags/dk.svg"); }
.flag-no { background-image: url("https://hatscripts.github.io/circle-flags/flags/no.svg"); }
.flag-fi { background-image: url("https://hatscripts.github.io/circle-flags/flags/fi.svg"); }
.flag-is { background-image: url("https://hatscripts.github.io/circle-flags/flags/is.svg"); }

.flag-row {
	display: flex;
	align-items: center;
	gap: var(--s2);
	justify-content: center;
}

/* ── SITE HEADER / NAVIGATION ────────────────────────────────── */

.site-nav {
	border-bottom: 1px solid var(--no-rule);
	padding: var(--s2) 0;
}

.site-nav__inner {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: var(--s5);
}

.site-nav a {
	font: 600 0.8125rem/1 var(--sans);
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--no-ink-tertiary);
	white-space: nowrap;
	padding: var(--s2) 0;
	border-bottom: 2px solid transparent;
	transition: color var(--fast) var(--ease), border-color var(--fast) var(--ease);
}

.site-nav a:hover {
	color: var(--no-ink);
	border-bottom-color: var(--no-ink);
}

@media (max-width: 600px) {
	.site-nav__inner {
		justify-content: flex-start;
		gap: var(--s4);
		overflow-x: auto;
		padding-bottom: var(--s1);
	}
}

/* ── NAV DROPDOWN (<details> based) ──────────────────────────── */

.nav-dropdown {
	position: relative;
}

.nav-dropdown__toggle {
	font: 600 0.8125rem/1 var(--sans);
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--no-ink-tertiary);
	cursor: pointer;
	padding: var(--s2) 0;
	border-bottom: 2px solid transparent;
	transition: color var(--fast) var(--ease), border-color var(--fast) var(--ease);
	white-space: nowrap;
	list-style: none;
}

.nav-dropdown__toggle::-webkit-details-marker { display: none; }
.nav-dropdown__toggle .flag { vertical-align: middle; }

.nav-dropdown__toggle:hover,
.nav-dropdown[open] .nav-dropdown__toggle {
	color: var(--no-ink);
	border-bottom-color: var(--no-ink);
}

.nav-dropdown__menu {
	position: absolute;
	top: calc(100% + var(--s2));
	left: 0;
	min-width: 160px;
	background: var(--no-white, #fff);
	border: 1px solid var(--no-rule);
	box-shadow: 0 4px 12px rgba(0,0,0,0.08);
	padding: var(--s2) 0;
	z-index: 100;
}

.nav-dropdown__menu a.nav-dropdown__item {
	display: flex;
	align-items: center;
	gap: var(--s2);
	padding: var(--s2) var(--s4);
	font: 500 0.875rem/1 var(--sans);
	color: var(--no-ink-secondary);
	white-space: nowrap;
	border-bottom: none;
	text-transform: none;
	transition: background var(--fast) var(--ease), color var(--fast) var(--ease);
}

.nav-dropdown__menu a.nav-dropdown__item:hover {
	background: var(--no-canvas);
	color: var(--no-ink);
	border-bottom: none;
}

/* ── BREAKING NEWS BANNER ────────────────────────────────────── */

.breaking-banner {
	background: var(--no-breaking);
	color: var(--no-white);
	padding: var(--s2) var(--s4);
	display: flex;
	align-items: center;
	gap: var(--s3);
	z-index: var(--z-breaking);
}

.breaking-banner__label {
	font: 700 0.6875rem/1 var(--sans);
	text-transform: uppercase;
	letter-spacing: 0.1em;
	white-space: nowrap;
	animation: breaking-pulse 2s ease-in-out infinite;
}

@keyframes breaking-pulse {
	0%, 100% { opacity: 1; }
	50% { opacity: 0.7; }
}

.breaking-banner__text {
	font: 600 0.875rem/1.3 var(--sans);
}

/* ── SECTION BLOCK HEADER (NYT-style rule + label) ───────────── */

.block-header {
	border-top: 2px solid var(--no-ink);
	padding-top: var(--s2);
	margin-bottom: var(--s4);
}

.block-header__label {
	font: 700 0.75rem/1 var(--sans);
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--no-ink);
}

.block-header--accent {
	border-top-color: var(--no-brand);
}

.block-header--accent .block-header__label {
	color: var(--no-brand);
}

.block-header--thin {
	border-top-width: 1px;
	border-top-color: var(--no-rule);
}

/* ── PROMO CARD ──────────────────────────────────────────────── */

.promo { display: block; }

.promo__img {
	aspect-ratio: 3/2;
	overflow: hidden;
	position: relative;
}

.promo__img img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform var(--med) var(--ease);
}

.promo:hover .promo__img img { transform: scale(1.03); }

.promo__body { padding-top: var(--s3); }

.promo__kicker {
	font: 700 0.6875rem/1 var(--sans);
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--no-brand);
	margin-bottom: var(--s1);
}

.promo__kicker--opinion { color: var(--no-section-opinion); }
.promo__kicker--culture { color: var(--no-section-culture); }
.promo__kicker--sport   { color: var(--no-section-sport); }

.promo__headline {
	font-family: var(--serif);
	font-weight: 700;
	color: var(--no-ink);
	letter-spacing: -0.01em;
	transition: color var(--fast) var(--ease);
}

.promo:hover .promo__headline { color: var(--no-ink-tertiary); }

.promo__summary {
	font: italic 400 1rem/1.5 var(--serif);
	color: var(--no-ink-secondary);
	margin-top: var(--s1);
}

.promo__meta {
	font: 400 0.75rem/1 var(--sans);
	color: var(--no-ink-muted);
	margin-top: var(--s2);
}

/* Hero variant */
.promo--hero .promo__headline { font: 900 2rem/1.0625 var(--serif); letter-spacing: -0.02em; }
.promo--hero .promo__summary  { font-size: 1.0625rem; line-height: 1.5; }

@media (min-width: 400px) {
	.promo--hero .promo__headline { font-size: 2.25rem; line-height: 1.056; }
}
@media (min-width: 600px) {
	.promo--hero .promo__headline { font-size: 2.75rem; line-height: 1.045; }
}
@media (min-width: 900px) {
	.promo--hero .promo__headline { font-size: 3.25rem; line-height: 1.038; }
	.promo--hero .promo__summary  { font-size: 1.25rem; line-height: 1.4; }
}

/* Standard variant */
.promo--standard .promo__headline { font: 700 1.25rem/1.2 var(--serif); }
.promo--standard .promo__summary  { font-size: 0.9375rem; line-height: 1.4; }

@media (min-width: 600px) {
	.promo--standard .promo__headline { font-size: 1.375rem; line-height: 1.182; }
}
@media (min-width: 900px) {
	.promo--standard .promo__headline { font-size: 1.5rem; line-height: 1.167; }
}

/* Compact variant (no image) */
.promo--compact .promo__img     { display: none; }
.promo--compact .promo__body    { padding-top: 0; }
.promo--compact .promo__headline { font: 700 1.0625rem/1.235 var(--serif); }

/* Horizontal variant */
.promo--horizontal {
	display: grid;
	grid-template-columns: 140px 1fr;
	gap: var(--s3);
	align-items: start;
}

.promo--horizontal .promo__img  { aspect-ratio: 4/3; }
.promo--horizontal .promo__body { padding-top: 0; }
.promo--horizontal .promo__headline { font-size: 1rem; line-height: 1.25; }

/* ── HEADLINE LIST (NYT dense ticker style) ──────────────────── */

.headline-list { list-style: none; }

.headline-list li {
	padding: var(--s3) 0;
	border-bottom: 1px solid var(--no-rule);
}

.headline-list li:first-child { padding-top: 0; }
.headline-list li:last-child  { border-bottom: none; }

.headline-list a {
	font: 600 1rem/1.3 var(--serif);
	color: var(--no-ink);
	transition: color var(--fast) var(--ease);
}

.headline-list a:hover { color: var(--no-link); }

.headline-list .hl-time {
	font: 400 0.75rem/1 var(--sans);
	color: var(--no-ink-muted);
	margin-top: var(--s1);
	display: block;
}

/* ── ARTICLE BODY ────────────────────────────────────────────── */

.article-body h1 {
	font: 900 2.5rem/1.05 var(--serif);
	color: var(--no-ink);
	letter-spacing: -0.02em;
	margin-bottom: var(--s4);
}

.article-body h2 {
	font: 700 1.625rem/1.154 var(--serif);
	color: var(--no-ink);
	margin: var(--s7) 0 var(--s3);
}

.article-body h3 {
	font: 700 1.25rem/1.2 var(--serif);
	color: var(--no-ink);
	margin: var(--s6) 0 var(--s2);
}

.article-body p {
	font: 400 1.1875rem/1.684 var(--serif);
	color: var(--no-ink-secondary);
	max-width: var(--measure);
	margin-bottom: var(--s4);
}

.article-body p.lead {
	font-size: 1.375rem;
	line-height: 1.545;
	font-weight: 400;
	color: var(--no-ink);
}

.article-body blockquote {
	border-left: 3px solid var(--no-brand);
	padding-left: var(--s5);
	font-style: italic;
	color: var(--no-ink-tertiary);
	margin-block: var(--s5);
}

.article-body figure {
	margin-block: var(--s5);
}

.article-body figcaption {
	font: 400 0.8125rem/1.4 var(--sans);
	color: var(--no-ink-muted);
	margin-top: var(--s2);
	padding-top: var(--s2);
	border-top: 1px solid var(--no-rule);
}

/* ── SIDEBAR ─────────────────────────────────────────────────── */

.sidebar__section {
	border-top: 2px solid var(--no-ink);
	padding-top: var(--s3);
}

.sidebar__section + .sidebar__section {
	margin-top: var(--s5);
}

.sidebar__title {
	font: 700 0.6875rem/1 var(--sans);
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--no-ink);
	margin-bottom: var(--s3);
}

/* Small-thumb promo for sidebar */
.sidebar-promo {
	display: flex;
	gap: var(--s3);
	padding: var(--s2) 0;
	border-bottom: 1px solid var(--no-rule);
}

.sidebar-promo:last-child { border-bottom: none; }

.sidebar-promo__img {
	width: 80px;
	min-width: 80px;
	height: 60px;
	object-fit: cover;
}

.sidebar-promo__headline {
	font: 600 0.875rem/1.286 var(--serif);
	color: var(--no-ink);
}

.sidebar-promo__headline:hover {
	color: var(--no-link);
}

/* ── OPINION CARD (NYT-style opinion treatment) ──────────────── */

.opinion-card {
	border-top: 3px solid var(--no-section-opinion);
	padding-top: var(--s3);
}

.opinion-card__author {
	font: 700 0.875rem/1 var(--sans);
	color: var(--no-ink);
	margin-bottom: var(--s1);
}

.opinion-card__headline {
	font: italic 700 1.25rem/1.2 var(--serif);
	color: var(--no-ink);
}

.opinion-card__headline:hover {
	color: var(--no-section-opinion);
}

/* ── SITE FOOTER ─────────────────────────────────────────────── */

.site-footer {
	background: var(--no-canvas);
	border-top: 1px solid var(--no-rule);
	padding: var(--s7) 0 var(--s6);
	margin-top: var(--s8);
}

.site-footer__brand {
	font-family: var(--display);
	font-weight: 900;
	font-size: 0.875rem;
	color: var(--no-ink);
	text-align: center;
	text-transform: uppercase;
	letter-spacing: 0.25em;
	margin-bottom: var(--s5);
}

.site-footer__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--s5);
}

@media (min-width: 600px) {
	.site-footer__grid { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 900px) {
	.site-footer__grid { grid-template-columns: repeat(4, 1fr); }
}

.site-footer__heading {
	font: 700 0.6875rem/1 var(--sans);
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--no-ink);
	margin-bottom: var(--s3);
}

.site-footer__links {
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: var(--s2);
}

.site-footer__links a {
	font: 400 0.875rem/1.4 var(--serif);
	color: var(--no-ink-tertiary);
	transition: color var(--fast) var(--ease);
}

.site-footer__links a:hover { color: var(--no-ink); }

.site-footer__bottom {
	margin-top: var(--s6);
	padding-top: var(--s4);
	border-top: 1px solid var(--no-rule);
	font: 400 0.75rem/1.4 var(--sans);
	color: var(--no-ink-muted);
	text-align: center;
}
