/*!
 * IIIF Viewer — mini mode stylesheet (includes shared info modal)
 * Licensed under GPL-2.0-or-later.
 *
 * Two root scopes here:
 *   .iiif-mini   — inline mini viewer (one per shortcode instance)
 *   .iiif-modal  — singleton info modal appended to <body> on first open
 *
 * The tokens below are shared between mini and any full-mode instance on
 * the same page, so the :where() selector names all three plugin classes
 * for consistency with iiif-full.css. (If both stylesheets load, the rules
 * are identical and the cascade resolves cleanly.)
 */

/* ═══════════════════════════════════════════════════════════════════
   Theming tokens — see readme.txt for override pattern
   ═══════════════════════════════════════════════════════════════════ */
:where(.iiif-viewer, .iiif-mini, .iiif-modal) {
	/* Backgrounds */
	--iiif-bg:          #16120f;
	--iiif-bg-panel:    #1e1a16;
	--iiif-bg-stage:    #0b0907;

	/* Ink */
	--iiif-ink:         #ede4d3;
	--iiif-ink-dim:     #a89d89;
	--iiif-ink-faint:   #6b6355;

	/* Structure */
	--iiif-rule:        #332b22;
	--iiif-radius:      2px;

	/* Accent */
	--iiif-accent:      #c19a4b;
	--iiif-accent-soft: rgba(193, 154, 75, 0.15);

	/* Typography */
	--iiif-font-serif:  "Averia Serif Libre", serif;
	--iiif-font-sans:   "Open Sans", sans-serif;
	--iiif-font-mono:   "Open Sans", sans-serif;
}

/* ═══════════════════════════════════════════════════════════════════
   Mini viewer
   ═══════════════════════════════════════════════════════════════════ */
.iiif-mini {
	position: relative;
	display: inline-block;
	max-width: 100%;
	background: var(--iiif-bg-stage);
	border-radius: var(--iiif-radius);
	overflow: hidden;
	line-height: 0;
	box-shadow:
		0 1px 0 rgba(255, 245, 225, 0.04) inset,
		0 8px 24px -8px rgba(0, 0, 0, 0.5);
	box-sizing: border-box;
}
.iiif-mini *,
.iiif-mini *::before,
.iiif-mini *::after {
	box-sizing: border-box;
}
.iiif-mini img {
	display: block;
	max-width: 100%;
	height: auto;
}

/* Loading / error micro-states (reuse the stage background) */
.iiif-mini-loading,
.iiif-mini-error {
	display: block;
	padding: 24px 20px;
	background: var(--iiif-bg-panel);
	color: var(--iiif-ink-faint);
	font-family: var(--iiif-font-mono);
	font-size: 10px;
	text-transform: uppercase;
	letter-spacing: 0.14em;
	line-height: 1.4;
	text-align: center;
	min-width: 180px;
}
.iiif-mini-error {
	color: #c78a6a;
}
.iiif-mini-loading::before {
	content: "";
	display: inline-block;
	width: 8px;
	height: 8px;
	border: 1px solid var(--iiif-ink-faint);
	border-top-color: transparent;
	border-radius: 50%;
	margin-right: 8px;
	animation: iiif-spin 1s linear infinite;
	vertical-align: -1px;
}
@keyframes iiif-spin {
	to { transform: rotate(360deg); }
}

/* ═══════════════════════════════════════════════════════════════════
   Info icon button (top-right overlay)
   ═══════════════════════════════════════════════════════════════════ */
.mini-info {
	position: absolute;
	top: 10px;
	right: 10px;
	width: 28px;
	height: 28px;
	border-radius: 50%;
	background: rgba(15, 12, 10, 0.7);
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
	border: 1px solid rgba(237, 228, 211, 0.12);
	color: var(--iiif-ink-dim);
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
	opacity: 1;                         /* Default visible; hover devices hide below. */
	transition: opacity 0.25s ease, color 0.15s, background 0.15s;
	padding: 0;
	line-height: 0;
}
.mini-info:hover,
.mini-info:focus-visible {
	color: var(--iiif-ink);
	background: rgba(15, 12, 10, 0.9);
	outline: none;
}
.mini-info svg {
	width: 14px;
	height: 14px;
	stroke: currentColor;
	fill: none;
	stroke-width: 1.5;
}

/* Hide on idle only on devices that genuinely hover; keep always-visible on touch */
@media (hover: hover) {
	.mini-info {
		opacity: 0;
	}
	.iiif-mini:hover .mini-info,
	.iiif-mini:focus-within .mini-info {
		opacity: 1;
	}
}

/* Bigger tap target on touch */
@media (pointer: coarse) {
	.mini-info {
		width: 40px;
		height: 40px;
		top: 8px;
		right: 8px;
	}
	.mini-info svg {
		width: 18px;
		height: 18px;
	}
}

/* ═══════════════════════════════════════════════════════════════════
   Info modal (singleton, appended to <body>)
   ═══════════════════════════════════════════════════════════════════ */
.iiif-modal {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: none;
	font-family: var(--iiif-font-sans);
	color: var(--iiif-ink);
	line-height: 1.6;
	box-sizing: border-box;
}
.iiif-modal *,
.iiif-modal *::before,
.iiif-modal *::after {
	box-sizing: border-box;
}
.iiif-modal.open {
	display: block;
}

.iiif-modal-backdrop {
	position: absolute;
	inset: 0;
	background: rgba(10, 8, 6, 0.7);
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
	animation: iiif-modal-fade 0.25s ease;
}
@keyframes iiif-modal-fade {
	from { opacity: 0; }
	to   { opacity: 1; }
}

.iiif-modal-scroll {
	position: relative;
	height: 100%;
	overflow-y: auto;
	padding: 40px 20px;
	-webkit-overflow-scrolling: touch;
}

.iiif-modal-panel {
	position: relative;
	max-width: 640px;
	margin: 0 auto;
	background: var(--iiif-bg-panel);
	border-radius: var(--iiif-radius);
	padding: 48px 40px 40px;
	animation: iiif-modal-slide 0.3s cubic-bezier(0.2, 0.9, 0.4, 1);
	box-shadow:
		0 1px 0 rgba(255, 245, 225, 0.04) inset,
		0 40px 100px -20px rgba(0, 0, 0, 0.7);
}
@keyframes iiif-modal-slide {
	from { opacity: 0; transform: translateY(12px); }
	to   { opacity: 1; transform: translateY(0); }
}

.iiif-modal-close {
	position: absolute;
	top: 12px;
	right: 12px;
	width: 32px;
	height: 32px;
	border-radius: 50%;
	background: transparent;
	border: none;
	color: var(--iiif-ink-dim);
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
	transition: all 0.2s;
	padding: 0;
}
.iiif-modal-close:hover {
	color: var(--iiif-ink);
	background: rgba(237, 228, 211, 0.06);
}
.iiif-modal-close svg {
	width: 14px;
	height: 14px;
	stroke: currentColor;
	stroke-width: 1.5;
	fill: none;
	stroke-linecap: round;
}
@media (pointer: coarse) {
	.iiif-modal-close {
		width: 44px;
		height: 44px;
		top: 8px;
		right: 8px;
	}
}

/* ── Modal content typography ────────────────────────────────────── */
.iiif-modal-content .modal-institution {
	font-family: var(--iiif-font-mono);
	text-transform: uppercase;
	letter-spacing: 0.18em;
	font-size: 10px;
	color: var(--iiif-ink-faint);
	margin: 0 0 16px;
	font-weight: 400;
}
.iiif-modal-content .modal-title {
	font-family: var(--iiif-font-serif);
	font-weight: 500;
	font-size: clamp(22px, 3vw, 28px);
	line-height: 1.2;
	color: var(--iiif-ink);
	margin: 0 0 10px;
	letter-spacing: 0.005em;
}
.iiif-modal-content .modal-byline {
	font-family: var(--iiif-font-serif);
	font-style: italic;
	font-size: 16px;
	color: var(--iiif-ink-dim);
	margin: 0 0 4px;
}
.iiif-modal-content .modal-sublabel {
	font-family: var(--iiif-font-sans);
	font-size: 13px;
	color: var(--iiif-ink-faint);
	margin: 0;
	letter-spacing: 0.02em;
}
.iiif-modal-content .modal-sublabel .sep {
	margin: 0 10px;
	color: var(--iiif-rule);
}

.iiif-modal-content .modal-section {
	margin-top: 32px;
}
.iiif-modal-content .modal-section-label {
	font-family: var(--iiif-font-mono);
	font-size: 10px;
	text-transform: uppercase;
	letter-spacing: 0.18em;
	color: var(--iiif-ink-faint);
	margin: 0 0 12px;
	font-weight: 500;
}
.iiif-modal-content .modal-summary {
	font-family: var(--iiif-font-serif);
	font-size: 17px;
	line-height: 1.55;
	color: var(--iiif-ink);
	margin: 0;
	font-weight: 400;
}

.iiif-modal-content dl {
	display: grid;
	grid-template-columns: minmax(110px, 150px) 1fr;
	gap: 0;
	font-size: 13px;
	margin: 0;
}
.iiif-modal-content dl dt,
.iiif-modal-content dl dd {
	padding: 10px 0;
	border-bottom: 1px solid var(--iiif-rule);
	margin: 0;
}
.iiif-modal-content dl dt {
	color: var(--iiif-ink-dim);
	font-weight: 400;
}
.iiif-modal-content dl dd {
	color: var(--iiif-ink);
}
.iiif-modal-content dl dd a {
	color: var(--iiif-accent);
	text-decoration: none;
	border-bottom: 1px solid var(--iiif-accent-soft);
	transition: border-color 0.2s;
}
.iiif-modal-content dl dd a:hover {
	border-bottom-color: var(--iiif-accent);
}

.iiif-modal-content .modal-rights {
	font-size: 13px;
	color: var(--iiif-ink-dim);
	line-height: 1.6;
}
.iiif-modal-content .modal-rights a {
	color: var(--iiif-accent);
	text-decoration: none;
}
.iiif-modal-content .modal-rights a:hover {
	text-decoration: underline;
}

/* ═══════════════════════════════════════════════════════════════════
   Responsive (narrow viewports)
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 680px) {
	.iiif-modal-scroll {
		padding: 20px 14px;
	}
	.iiif-modal-panel {
		padding: 40px 24px 32px;
	}
	.iiif-modal-content dl {
		grid-template-columns: 1fr;
	}
	.iiif-modal-content dl dt {
		padding-bottom: 2px;
		border-bottom: none;
		font-size: 11px;
		text-transform: uppercase;
		letter-spacing: 0.12em;
		font-family: var(--iiif-font-mono);
	}
	.iiif-modal-content dl dd {
		padding-top: 2px;
	}
}
