/*
Theme Name: Dopiryak
Theme URI: https://www.dopiryak.it/
Author: Artem Dopiryak
Author URI: https://www.dopiryak.it/
Description: Tema personale per vetrina tecnica: liquid glass su gradienti grigio-verde, terminale interattivo, portfolio filtrabile, animazioni allo scroll e preloader configurabile. Font e icone serviti dal tema, nessuna risorsa esterna. Sora + JetBrains Mono.
Version: 6.0.0
Requires at least: 6.0
Requires PHP: 7.4
License: GPL-2.0-or-later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: dopiryak
Tags: portfolio, one-column, custom-menu, featured-images, translation-ready, block-styles, wide-blocks
*/

/* ============================================================== token */

:root {
	/* inchiostro dei veli: chiaro sul tema scuro, scuro sul tema chiaro */
	--dr-ink: 1 0 0;
	--dr-on-accent: oklch(0.16 0.02 172);
	--dr-x: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 3l10 10M13 3L3 13' stroke='%23000' stroke-width='2' stroke-linecap='round' fill='none'/%3E%3C/svg%3E");
	--dr-surface: oklch(0.185 0.012 172);
	--dr-deep: 0.12 0.02 172;

	--dr-accent: oklch(0.72 0.16 150);
	--dr-accent-2: oklch(0.80 0.13 150);
	--dr-bg: oklch(0.155 0.008 172);
	--dr-line: oklch(var(--dr-ink) / 0.14);
	--dr-line-strong: oklch(var(--dr-ink) / 0.2);
	--dr-text: oklch(0.96 0.005 170);
	--dr-muted: oklch(0.73 0.008 170);
	--dr-dim: oklch(0.62 0.008 170);
	--dr-grad: linear-gradient(140deg, var(--dr-accent-2), var(--dr-accent) 55%, oklch(0.62 0.03 205));
	--dr-glass: linear-gradient(150deg, oklch(var(--dr-ink) / 0.085), oklch(var(--dr-ink) / 0.015));
	--dr-glass-hi: inset 0 1px 0 oklch(var(--dr-ink) / 0.18);
	--dr-panel: linear-gradient(160deg, oklch(0.32 0.025 180 / 0.34), oklch(var(--dr-deep) / 0.42));
	--dr-blur: blur(20px) saturate(135%);
	/* scala dei comandi: compatto a sola icona, standard, principale */
	--dr-ctrl-sm: 40px;
	--dr-ctrl: 44px;
	--dr-ctrl-lg: 48px;

	/* scala dei raggi */
	--dr-r-sm: 12px;
	--dr-r-card: 22px;
	--dr-r-panel: 28px;
	--dr-r-pill: 999px;

	/* scala delle spaziature: i valori ricorrenti, richiamabili */
	--dr-sp-1: 6px;
	--dr-sp-2: 8px;
	--dr-sp-3: 10px;
	--dr-sp-4: 12px;
	--dr-sp-5: 16px;
	--dr-sp-6: 20px;
	--dr-sp-7: 26px;

	/* quanto si vedono i caratteri nello sfondo */
	--dr-glifo: 0.13;

	/* scala dei tempi: tre, non diciassette */
	--dr-t-fast: 0.25s;
	--dr-t: 0.35s;
	--dr-t-slow: 0.5s;

	/* etichette in mono: due misure, non cinque */
	--dr-label: 10.5px;
	--dr-label-sm: 9.5px;

	--dr-radius: 22px;
	--dr-ease: cubic-bezier(0.22, 1, 0.36, 1);
	--dr-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
}

html {
	scroll-behavior: smooth;
	scroll-padding-top: clamp(78px, 11vw, 108px);
	background: var(--dr-bg);
}

body {
	-webkit-tap-highlight-color: transparent;
}

body [id]:not(html):not(body) {
	scroll-margin-top: clamp(78px, 11vw, 108px);
}

::selection {
	background: var(--dr-accent);
	color: oklch(0.15 0.01 172);
}

*:focus-visible {
	outline: 2px solid var(--dr-accent-2);
	outline-offset: 3px;
}

/* ====================================================== sfondo animato */

.dr-mesh {
	position: fixed;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	overflow: hidden;
}

.dr-mesh i {
	position: absolute;
	display: block;
	border-radius: 50%;
}

.dr-mesh i:nth-child(1) {
	top: -18vh;
	left: -10vw;
	width: 62vw;
	height: 62vw;
	opacity: 0.5;
	background: radial-gradient(circle at 40% 40%, var(--dr-accent), transparent 62%);
	animation: drFloat1 24s ease-in-out infinite;
}

.dr-mesh i:nth-child(2) {
	bottom: -22vh;
	right: -12vw;
	width: 55vw;
	height: 55vw;
	opacity: 0.36;
	background: radial-gradient(circle, var(--dr-accent-2), transparent 60%);
	animation: drFloat2 31s ease-in-out infinite;
}

.dr-mesh i:nth-child(3) {
	top: 34vh;
	left: 42vw;
	width: 40vw;
	height: 40vw;
	opacity: 0.28;
	background: radial-gradient(circle, oklch(0.48 0.03 200), transparent 65%);
	animation: drFloat3 38s ease-in-out infinite;
}

/* caratteri che fluttuano nello sfondo, dietro tutto */

.dr-glifi {
	position: fixed;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	overflow: hidden;
	/* sfumano ai bordi, come la griglia */
	-webkit-mask-image: radial-gradient(ellipse 130% 110% at 50% 25%, black 52%, transparent 92%);
	mask-image: radial-gradient(ellipse 130% 110% at 50% 25%, black 52%, transparent 92%);
}

.dr-glifi span {
	position: absolute;
	left: var(--gx);
	top: var(--gy);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: calc(var(--gs) * 1.25);
	line-height: 1;
	color: oklch(var(--dr-ink) / var(--dr-glifo));
	user-select: none;
	will-change: transform;
	animation: drGlifo var(--gt) linear var(--gd) infinite;
}

/*
 * Salgono piano e ruotano appena. Il percorso e lungo quanto lo schermo, cosi
 * rientrano dal basso senza che si veda un salto.
 */
@keyframes drGlifo {
	0% {
		transform: translate3d(0, 12vh, 0) rotate(0deg);
		opacity: 0;
	}

	12% {
		opacity: 1;
	}

	88% {
		opacity: 1;
	}

	100% {
		transform: translate3d(2vw, -78vh, 0) rotate(24deg);
		opacity: 0;
	}
}

html[data-dr-theme='chiaro'] {
	--dr-glifo: 0.18;
}

body.dr-anim-ridotte .dr-glifi span {
	animation: none;
	opacity: 0.55;
}

/* sul telefono meno caratteri: lo schermo e piccolo e la batteria conta */
@media (max-width: 700px) {
	.dr-glifi span:nth-child(2n) {
		display: none;
	}
}

.dr-grid-overlay {
	position: fixed;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	background-image: linear-gradient(oklch(var(--dr-ink) / 0.026) 1px, transparent 1px),
		linear-gradient(90deg, oklch(var(--dr-ink) / 0.026) 1px, transparent 1px);
	background-size: 72px 72px;
	-webkit-mask-image: radial-gradient(ellipse 120% 90% at 50% 0%, black 20%, transparent 78%);
	mask-image: radial-gradient(ellipse 120% 90% at 50% 0%, black 20%, transparent 78%);
}

.dr-spot {
	position: fixed;
	top: 0;
	left: 0;
	width: 640px;
	height: 640px;
	margin: -320px 0 0 -320px;
	z-index: 1;
	pointer-events: none;
	opacity: 0;
	transition: opacity 0.6s var(--dr-ease);
	background: radial-gradient(circle, var(--dr-accent) 0%, transparent 58%);
	mix-blend-mode: screen;
}

.dr-progress {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	height: 2px;
	z-index: 9998;
	background: oklch(var(--dr-ink) / 0.06);
}

.dr-progress i {
	display: block;
	height: 100%;
	transform: scaleX(0);
	transform-origin: 0 50%;
	background: linear-gradient(90deg, var(--dr-accent), var(--dr-accent-2));
}

/* ========================================================== preloader */

#dr-preloader {
	position: fixed;
	inset: 0;
	z-index: 99999;
	display: grid;
	place-items: center;
	background: linear-gradient(150deg, oklch(0.17 0.01 175) 0%, oklch(0.24 0.02 172) 45%, oklch(0.30 0.06 168) 100%);
	font-family: 'Sora', system-ui, sans-serif;
	color: var(--dr-text);
}

#dr-preloader.dr-done {
	opacity: 0;
	transform: scale(1.08);
	filter: blur(14px);
	transition: opacity 0.7s var(--dr-ease), transform 0.9s cubic-bezier(0.7, 0, 0.2, 1), filter 0.7s var(--dr-ease);
	pointer-events: none;
}

/* ========================================================== terminale */

.dr-term-wrap {
	position: relative;
	overflow: hidden;
	border-radius: var(--dr-radius);
	border: 1px solid var(--dr-line);
	background: linear-gradient(160deg, oklch(0.28 0.02 180 / 0.52), oklch(0.18 0.01 172 / 0.62));
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
	box-shadow: var(--dr-glass-hi), 0 30px 80px oklch(var(--dr-deep) / 0.42);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
}

.dr-term-bar {
	position: relative;
	z-index: 2;
	display: flex;
	align-items: center;
	gap: 7px;
	padding: 13px 16px;
	border-bottom: 1px solid oklch(var(--dr-ink) / 0.12);
}

.dr-term-dot {
	display: block;
	width: 10px;
	height: 10px;
	border-radius: 50%;
}

.dr-term-dot-1 { background: oklch(0.64 0.17 25); }
.dr-term-dot-2 { background: oklch(0.80 0.15 85); }
.dr-term-dot-3 { background: var(--dr-accent-2); }

.dr-term-title {
	margin-left: 8px;
	font-size: var(--dr-label);
	letter-spacing: 0.16em;
	color: var(--dr-dim);
}

.dr-term-glow {
	position: absolute;
	inset: -30% -10% auto -10%;
	height: 70%;
	pointer-events: none;
	background: radial-gradient(ellipse 60% 100% at 30% 0%, var(--dr-accent), transparent 70%);
	opacity: 0.22;
}

.dr-term-lines {
	position: absolute;
	inset: 0;
	pointer-events: none;
	background: repeating-linear-gradient(0deg, oklch(var(--dr-ink) / 0.022) 0 1px, transparent 1px 3px);
}

.dr-term-screen {
	position: relative;
	z-index: 2;
	min-height: 150px;
	padding: 18px 18px 10px;
	font-size: 12.5px;
	line-height: 1.95;
	color: oklch(0.86 0.02 168);
	white-space: pre-wrap;
	word-break: break-word;
}

.dr-term-caret {
	display: inline-block;
	width: 8px;
	height: 1.05em;
	vertical-align: -2px;
	background: var(--dr-accent-2);
	animation: drBlink 1.05s step-end infinite;
}

.dr-term-keys {
	position: relative;
	z-index: 2;
	display: flex;
	flex-wrap: wrap;
	gap: var(--dr-sp-2);
	padding: 14px 18px 18px;
	border-top: 1px solid oklch(var(--dr-ink) / 0.07);
	background: oklch(var(--dr-deep) / 0.35);
}

.dr-term-key {
	flex: 0 1 auto;
	min-height: var(--dr-ctrl);
	padding: 0 18px;
	border-radius: var(--dr-r-pill);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	font-weight: 500;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	white-space: nowrap;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

/* ======================================================== animazioni */

.dr-reveal {
	opacity: 0;
	transform: translateY(26px);
}

.dr-reveal.dr-in {
	opacity: 1;
	transform: none;
	transition: opacity 0.85s var(--dr-ease), transform 0.9s var(--dr-ease);
}

@keyframes drSpin { to { transform: rotate(360deg); } }
@keyframes drSpinRev { to { transform: rotate(-360deg); } }
@keyframes drBlink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }
@keyframes drBars { 0%, 100% { transform: scaleY(0.25); } 50% { transform: scaleY(1); } }
@keyframes drSheen { 0% { transform: translateX(-120%) skewX(-18deg); } 100% { transform: translateX(320%) skewX(-18deg); } }
@keyframes drGrad { 0% { background-position: 0% 50%; } 100% { background-position: 200% 50%; } }
@keyframes drFloat1 { 0%, 100% { transform: translate3d(0, 0, 0) scale(1); } 50% { transform: translate3d(6vw, -4vh, 0) scale(1.15); } }
@keyframes drFloat2 { 0%, 100% { transform: translate3d(0, 0, 0) scale(1.1); } 50% { transform: translate3d(-7vw, 5vh, 0) scale(0.9); } }
@keyframes drFloat3 { 0%, 100% { transform: translate3d(0, 0, 0) scale(0.95); } 50% { transform: translate3d(4vw, 7vh, 0) scale(1.2); } }

body.dr-anim-misurate .dr-spot,
body.dr-anim-ridotte .dr-spot {
	display: none !important;
}

body.dr-anim-ridotte .dr-mesh i,
body.dr-anim-ridotte .dr-title,
body.dr-anim-ridotte .dr-avatar-ring,
body.dr-anim-ridotte .dr-cv::after {
	animation: none !important;
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
	}

	.dr-reveal {
		opacity: 1;
		transform: none;
	}
}

/*
 * Dopiryak Redesign 2026 — modalità standalone
 * Stili per il markup dr-* servito da templates/standalone.php
 */

body {
	margin: 0;
	background: var(--dr-bg);
	color: var(--dr-muted);
	font-family: 'Sora', system-ui, -apple-system, sans-serif;
	-webkit-font-smoothing: antialiased;
	overflow-x: clip;
}

body * {
	box-sizing: border-box;
}

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

/* salto al contenuto: invisibile finche non lo raggiungi da tastiera */

.dr-skip {
	position: fixed;
	top: 10px;
	left: -9999px;
	z-index: 10000;
	padding: 12px 20px;
	border-radius: var(--dr-r-pill);
	background: var(--dr-grad);
	color: var(--dr-on-accent);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
}

.dr-skip:focus,
.dr-skip:focus-visible {
	left: 10px;
}

/* icone social: SVG inline, ereditano il colore del link */

.dr-icon {
	width: 17px;
	height: 17px;
	display: block;
	color: inherit;
	fill: currentColor;
}

.dr-app {
	position: relative;
	z-index: 2;
	max-width: 1480px;
	margin: 0 auto;
	padding: clamp(16px, 2.4vw, 34px);
	display: flex;
	flex-wrap: wrap;
	gap: clamp(18px, 2vw, 30px);
	align-items: flex-start;
}

/* ------------------------------------------------------------ colonna profilo */

.dr-rail {
	flex: 1 1 300px;
	max-width: 380px;
	position: sticky;
	top: clamp(16px, 2vw, 28px);
	max-height: calc(100vh - 44px);
	overflow-y: auto;
	overscroll-behavior: contain;
	scrollbar-width: thin;
	padding: clamp(20px, 2vw, 28px);
	border-radius: var(--dr-r-panel);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
	box-shadow: 0 30px 80px oklch(var(--dr-deep) / 0.45);
}

.dr-rail-head {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 14px;
	text-align: center;
}

.dr-avatar {
	position: relative;
	width: 144px;
	height: 144px;
	display: grid;
	place-items: center;
}

.dr-avatar-ring {
	position: absolute;
	inset: 0;
	border-radius: 50%;
	background: conic-gradient(from 140deg, var(--dr-accent), oklch(0.45 0.02 200), var(--dr-accent-2), var(--dr-accent));
	animation: drSpin 14s linear infinite;
}

.dr-avatar-hole {
	position: absolute;
	inset: 4px;
	border-radius: 50%;
	background: oklch(var(--dr-deep));
}

.dr-avatar img {
	position: relative;
	width: 128px;
	height: 128px;
	border-radius: 50%;
	object-fit: cover;
}

.dr-avatar-mono {
	position: relative;
	z-index: 1;
	font-size: 42px;
	font-weight: 300;
	letter-spacing: 0.06em;
	line-height: 1;
	color: color-mix(in oklab, var(--dr-accent-2) 60%, white);
	user-select: none;
}

.dr-avatar-lamp {
	position: absolute;
	bottom: 9px;
	right: 9px;
	width: 15px;
	height: 15px;
	border-radius: 50%;
	background: var(--dr-accent-2);
	box-shadow: 0 0 0 3px oklch(var(--dr-deep)), 0 0 14px var(--dr-accent-2);
}

.dr-name {
	font-size: 20px;
	font-weight: 600;
	letter-spacing: 0.02em;
	color: var(--dr-text);
	text-decoration: none;
	transition: color var(--dr-t) var(--dr-ease);
}

.dr-name:hover {
	color: var(--dr-accent-2);
}

.dr-handle {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.2em;
	color: color-mix(in oklab, var(--dr-accent-2) 72%, white);
}

.dr-social {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--dr-sp-2);
}

.dr-social a {
	width: var(--dr-ctrl);
	height: var(--dr-ctrl);
	display: grid;
	place-items: center;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.035);
	color: var(--dr-text);
	font-size: 17px;
	text-decoration: none;
	transition: transform var(--dr-t) cubic-bezier(0.34, 1.56, 0.64, 1), background var(--dr-t) var(--dr-ease), border-color var(--dr-t) var(--dr-ease), color var(--dr-t) var(--dr-ease);
}

.dr-social a:hover {
	transform: translateY(-4px) scale(1.05);
	background: var(--dr-grad);
	border-color: transparent;
	color: var(--dr-on-accent);
}

.dr-facts {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: var(--dr-sp-2);
	margin: 22px 0;
}

.dr-fact {
	padding: 10px 8px;
	border-radius: var(--dr-r-sm);
	border: 1px solid oklch(var(--dr-ink) / 0.06);
	background: oklch(var(--dr-ink) / 0.03);
	text-align: center;
}

.dr-fact-k {
	display: block;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label-sm);
	letter-spacing: 0.14em;
	color: var(--dr-dim);
}

.dr-fact-v {
	display: block;
	margin-top: 3px;
	font-size: 13px;
	font-weight: 500;
	color: var(--dr-text);
}

.dr-block {
	margin-bottom: 20px;
}

.dr-block-title {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.2em;
	color: var(--dr-dim);
	margin-bottom: 10px;
}

.dr-skill {
	margin-bottom: 11px;
}

.dr-skill-head {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	font-size: 12.5px;
	color: var(--dr-text);
	margin-bottom: 5px;
}

.dr-skill-pct {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	color: color-mix(in oklab, var(--dr-accent-2) 70%, white);
}

.dr-skill-track {
	display: block;
	height: 4px;
	border-radius: 4px;
	background: oklch(var(--dr-ink) / 0.07);
	overflow: hidden;
}

.dr-skill-bar {
	display: block;
	height: 100%;
	width: 0;
	background: linear-gradient(90deg, oklch(0.52 0.02 200), var(--dr-accent), var(--dr-accent-2));
	transition: width 1.2s var(--dr-ease);
}

.dr-chips {
	display: flex;
	flex-wrap: wrap;
	gap: var(--dr-sp-1);
}

.dr-chip {
	padding: 5px 11px;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.03);
	font-size: 11.5px;
	color: var(--dr-muted);
}

.dr-tag {
	padding: 4px 9px;
	border-radius: 8px;
	border: 1px solid oklch(var(--dr-ink) / 0.07);
	background: linear-gradient(135deg, oklch(0.30 0.015 185 / 0.9), oklch(0.34 0.05 170 / 0.75));
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	color: oklch(0.85 0.03 168);
}

.dr-cv {
	position: relative;
	overflow: hidden;
	width: 100%;
	min-height: var(--dr-ctrl-lg);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--dr-sp-2);
	padding: 0 24px;
	border-radius: var(--dr-r-pill);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	font-weight: 600;
	letter-spacing: 0.14em;
	text-decoration: none;
}

.dr-cv:hover {
	transform: translateY(-3px);
	color: var(--dr-on-accent);
}

.dr-cv::after {
	content: '';
	position: absolute;
	top: 0;
	bottom: 0;
	width: 60px;
	background: linear-gradient(90deg, transparent, oklch(var(--dr-ink) / 0.45), transparent);
	animation: drSheen 3.6s ease-in-out infinite;
}

/* --------------------------------------------------------------- colonna main */

.dr-main {
	flex: 4 1 560px;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: clamp(30px, 4vw, 58px);
}

/* ------------------------------------------------- utilita nella barra */

.dr-navstatus {
	margin: 0 auto;
	display: flex;
	align-items: center;
	gap: 9px;
	padding: 0 14px;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.16em;
	color: var(--dr-dim);
	white-space: nowrap;
	user-select: none;
}

.dr-navstatus-dot {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--dr-accent);
	box-shadow: 0 0 0 0 oklch(0.72 0.16 150 / 0.55);
	animation: drPulse 2.6s ease-out infinite;
}

@keyframes drPulse {
	70%  { box-shadow: 0 0 0 9px oklch(0.72 0.16 150 / 0); }
	100% { box-shadow: 0 0 0 0 oklch(0.72 0.16 150 / 0); }
}

.dr-navstatus-meteo {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	padding-left: 9px;
	margin-left: 3px;
	border-left: 1px solid var(--dr-line);
	color: var(--dr-muted);
}

.dr-navstatus-meteo .dr-icon {
	width: 12px;
	height: 12px;
	color: var(--dr-accent-2);
}

.dr-navstatus-time {
	color: var(--dr-muted);
	font-variant-numeric: tabular-nums;
}

body.dr-anim-ridotte .dr-navstatus-dot {
	animation: none;
}

@media (max-width: 1180px) {
	.dr-navstatus {
		display: none;
	}
}

.dr-navbar-tools {
	display: flex;
	align-items: center;
	gap: var(--dr-sp-1);
	padding-left: 10px;
}

.dr-navbar .dr-navtool {
	appearance: none;
	/* i button non ereditano il carattere: senza questa riga usciva in Arial */
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	padding: 0;
	min-height: var(--dr-ctrl-sm);
	flex: 0 0 auto;
	width: var(--dr-ctrl-sm);
	height: 40px;
	display: grid;
	place-items: center;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: var(--dr-glass);
	box-shadow: var(--dr-glass-hi);
	color: var(--dr-muted);
	cursor: pointer;
	text-decoration: none;
	transition: transform var(--dr-t) var(--dr-bounce), color var(--dr-t) var(--dr-ease), border-color var(--dr-t) var(--dr-ease);
}

.dr-navbar .dr-navtool .dr-icon {
	width: 17px;
	height: 17px;
}

.dr-navbar .dr-navtool:hover,
.dr-navbar .dr-navtool:focus-visible {
	transform: translateY(-2px);
	color: var(--dr-text);
	border-color: var(--dr-line-strong);
}

.dr-navbar .dr-navtool.is-text {
	width: auto;
	padding: 0 12px;
}

.dr-navbar .dr-navtool.is-current {
	background: var(--dr-grad);
	border-color: transparent;
	color: var(--dr-on-accent);
}

.dr-navlangs {
	display: flex;
	gap: 4px;
}

.dr-navsearch {
	display: flex;
	align-items: center;
	gap: 4px;
}

.dr-navsearch input[type='search'] {
	width: 0;
	min-width: 0;
	height: 40px;
	padding: 0;
	border: 1px solid transparent;
	border-radius: var(--dr-r-pill);
	background: transparent;
	color: var(--dr-text);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.06em;
	opacity: 0;
	transition: width var(--dr-t-slow) var(--dr-ease), opacity var(--dr-t) var(--dr-ease), padding var(--dr-t-slow) var(--dr-ease);
}

/* si apre passandoci sopra o entrandoci da tastiera */
.dr-navsearch:hover input[type='search'],
.dr-navsearch:focus-within input[type='search'] {
	width: clamp(120px, 14vw, 200px);
	padding: 0 16px;
	border-color: var(--dr-line);
	background: oklch(var(--dr-ink) / 0.06);
	opacity: 1;
}

.dr-navsearch input[type='search']::placeholder {
	color: var(--dr-dim);
}

body.dr-anim-ridotte .dr-navsearch input[type='search'] {
	transition: none;
}

@media (max-width: 1180px) {
	.dr-navsearch {
		display: none;
	}
}

.dr-navbar-wrap {
	position: sticky;
	top: clamp(10px, 2vw, 28px);
	z-index: 40;
	display: flex;
	align-items: center;
	gap: var(--dr-sp-2);
}

.dr-navbar {
	flex: 1 1 auto;
	min-width: 0;
	display: flex;
	align-items: center;
	gap: var(--dr-sp-1);
	padding: 7px;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-deep) / 0.78);
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
	overflow-x: auto;
	scrollbar-width: none;
	box-shadow: 0 16px 46px oklch(var(--dr-deep) / 0.4);
}

.dr-navbar::-webkit-scrollbar {
	display: none;
}

.dr-navbar a,
.dr-navbar .dr-menu a {
	flex: 0 0 auto;
	min-height: var(--dr-ctrl);
	display: inline-flex;
	align-items: center;
	padding: 0 17px;
	border-radius: var(--dr-r-pill);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--dr-muted);
	text-decoration: none;
	transition: background var(--dr-t) var(--dr-ease), color var(--dr-t) var(--dr-ease);
}

.dr-navbar a:hover {
	background: oklch(var(--dr-ink) / 0.07);
	color: var(--dr-text);
}

.dr-navbar a.is-active,
.dr-navbar .current-menu-item > a {
	background: var(--dr-grad);
	color: var(--dr-on-accent);
}

.dr-navbar .dr-menu {
	display: flex;
	align-items: center;
	gap: var(--dr-sp-1);
	margin: 0;
	padding: 0;
	list-style: none;
}

/* ------------------------------------------------------------------- hero */

.dr-hero {
	display: flex;
	flex-wrap: wrap;
	gap: clamp(24px, 3vw, 44px);

	align-items: flex-end;
}

.dr-hero-text {
	min-width: 0;
	container-type: inline-size;
	position: relative;
	z-index: 3;
	isolation: isolate;
	display: flex;
	flex-direction: column;
	gap: 14px;

	flex: 2 1 300px;
}

.dr-badge {
	align-self: flex-start;
	display: inline-flex;
	align-items: center;
	gap: 9px;
	padding: 7px 14px;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.03);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.16em;
	color: oklch(0.78 0.04 168);
}

.dr-badge-dot {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--dr-accent-2);
	animation: drPulse 2.2s ease-in-out infinite;
}

@keyframes drPulse {
	0%, 100% { opacity: 0.35; transform: scale(1); }
	50% { opacity: 1; transform: scale(1.35); }
}

.dr-title {
	margin: 0;
	max-width: 100%;
	/*
	 * Misurato sulla colonna, non sulla finestra: con i vw il titolo cresceva
	 * senza sapere che accanto c'era l'immagine hero, usciva dal proprio box e
	 * background-clip: text smetteva di disegnare le ultime lettere.
	 */
	font-size: clamp(34px, 14cqw, 82px);
	padding-right: 0.06em;
	line-height: 0.98;
	font-weight: 700;
	letter-spacing: -0.035em;
	background: linear-gradient(104deg, oklch(0.97 0 0) 8%, oklch(0.80 0.06 180) 44%, var(--dr-accent) 72%, var(--dr-accent-2) 100%);
	background-size: 220% 100%;
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
	animation: drGrad 9s linear infinite alternate;
}

.dr-code {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--dr-sp-2);
	row-gap: 4px;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: clamp(12px, 1.5vw, 16px);
}

.dr-code-tag {
	color: oklch(0.58 0.02 190);
}

.dr-code-word {
	font-weight: 600;
	color: var(--dr-accent-2);
	min-width: 0;
}

.dr-code-caret {
	flex: 0 0 auto;
	width: 8px;
	height: 1.15em;
	background: var(--dr-accent-2);
	animation: drBlink 1.05s step-end infinite;
}

.dr-lead {
	margin: 0;
	max-width: 46ch;
	font-size: clamp(14.5px, 1.5vw, 17px);
	line-height: 1.72;
	color: var(--dr-muted);
	text-wrap: pretty;
}

.dr-hero-art {
	flex: 1 1 260px;
	max-width: 340px;
	min-width: 0;
	position: relative;
	z-index: 0;
	display: grid;
	place-items: center;
	padding: 10px;
	perspective: 1000px;
}

.dr-orbit {
	position: absolute;
	aspect-ratio: 1;
	border-radius: 50%;
}

.dr-orbit-1 {
	width: min(86%, 380px);
	border: 1px solid oklch(var(--dr-ink) / 0.08);
	animation: drSpin 34s linear infinite;
}

.dr-orbit-2 {
	width: min(68%, 300px);
	border: 1px dashed oklch(var(--dr-ink) / 0.09);
	animation: drSpinRev 26s linear infinite;
}

.dr-orbit i {
	position: absolute;
	top: -4px;
	left: 50%;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--dr-accent-2);
	box-shadow: 0 0 20px var(--dr-accent-2);
}

.dr-hero-card {
	position: relative;
	width: 100%;
	aspect-ratio: 3 / 4;
	border-radius: var(--dr-r-card);
	overflow: hidden;
	border: 1px solid var(--dr-line);
	background: linear-gradient(150deg, oklch(0.26 0.015 180 / 0.9), oklch(var(--dr-deep) / 0.9));
	box-shadow: 0 40px 90px oklch(var(--dr-deep) / 0.6);
	transition: transform var(--dr-t-fast) ease-out;
	transform-style: preserve-3d;
}

.dr-hero-card img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	opacity: 0.92;
}

/* --------------------------------------------------------------- sezioni */

.dr-section {
	display: flex;
	flex-direction: column;
	gap: clamp(20px, 2.4vw, 30px);
}

.dr-section-head {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
	gap: 14px;
}

.dr-section-head h2 {
	margin: 0;
	font-size: clamp(30px, 4.4vw, 54px);
	font-weight: 600;
	letter-spacing: -0.03em;
	color: var(--dr-text);
}

.dr-section-meta {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.18em;
	color: var(--dr-dim);
}

.dr-stats {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));
	gap: var(--dr-sp-4);
	padding: clamp(18px, 2vw, 26px);
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: linear-gradient(120deg, oklch(0.22 0.012 180 / 0.75), oklch(0.19 0.008 172 / 0.75));
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
}

.dr-stat-n {
	display: flex;
	align-items: baseline;
	gap: 3px;
}

.dr-stat-v {
	font-size: clamp(30px, 4.4vw, 48px);
	font-weight: 700;
	letter-spacing: -0.03em;
	font-variant-numeric: tabular-nums;
	background: linear-gradient(135deg, oklch(0.97 0 0), var(--dr-accent));
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.dr-stat-suffix {
	font-size: 20px;
	font-weight: 600;
	color: var(--dr-accent-2);
}

.dr-stat-k {
	margin-top: 4px;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--dr-dim);
}

.dr-cards {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(272px, 1fr));
	gap: 14px;
}

.dr-card {
	position: relative;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	gap: var(--dr-sp-4);
	padding: clamp(20px, 2vw, 28px);
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	transition: transform var(--dr-t-slow) var(--dr-ease), border-color var(--dr-t-slow) var(--dr-ease), box-shadow var(--dr-t-slow) var(--dr-ease);
}

.dr-card::before {
	content: '';
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	height: 2px;
	background: linear-gradient(90deg, transparent, var(--dr-accent), transparent);
	opacity: 0.5;
}

.dr-card:hover {
	transform: translateY(-8px);
	border-color: color-mix(in oklab, var(--dr-accent) 55%, transparent);
	box-shadow: 0 28px 60px oklch(var(--dr-deep) / 0.55);
}

.dr-card-top {
	display: flex;
	align-items: center;
	justify-content: space-between;
}

.dr-card-num {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.16em;
	color: var(--dr-dim);
}

.dr-card-icon {
	width: 34px;
	height: 34px;
	border-radius: var(--dr-r-sm);
	display: grid;
	place-items: center;
	background: linear-gradient(135deg, oklch(0.36 0.02 195), oklch(0.44 0.08 168));
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	font-weight: 600;
	color: oklch(0.94 0.02 165);
}

.dr-card h3 {
	margin: 0;
	font-size: clamp(17px, 1.7vw, 21px);
	font-weight: 600;
	letter-spacing: -0.01em;
	color: var(--dr-text);
}

.dr-card p {
	margin: 0;
	font-size: 13.5px;
	line-height: 1.68;
	color: var(--dr-muted);
	text-wrap: pretty;
}

/* ------------------------------------------------------------- portfolio */

.dr-filter {
	display: flex;
	flex-wrap: wrap;
	gap: var(--dr-sp-2);
}

.dr-filter button {
	min-height: var(--dr-ctrl);
	padding: 0 18px;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.03);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--dr-muted);
	cursor: pointer;
	transition: transform var(--dr-t) cubic-bezier(0.34, 1.56, 0.64, 1), background var(--dr-t) var(--dr-ease), color var(--dr-t) var(--dr-ease), border-color var(--dr-t) var(--dr-ease);
}

.dr-filter button:hover {
	transform: translateY(-2px);
	color: var(--dr-text);
}

.dr-filter button.is-active {
	background: var(--dr-grad);
	border-color: transparent;
	color: var(--dr-on-accent);
}

.dr-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
	gap: 14px;
}

/* le copertine entrano in dissolvenza quando arrivano */

img.dr-lazy {
	opacity: 0;
	transition: opacity var(--dr-t-slow) var(--dr-ease);
}

img.dr-lazy.dr-caricata {
	opacity: 1;
}

body.dr-anim-ridotte img.dr-lazy {
	opacity: 1;
	transition: none;
}

/*
 * Progetto senza immagine: la copertina restava un rettangolo grigio vuoto alto
 * duecento pixel. Meglio una superficie disegnata con la sigla del progetto.
 */
/*
 * Il velo scuro sopra la copertina.
 *
 * Sborda di un pixel su tutti i lati: fermandosi al bordo esatto, durante
 * l'animazione bastava mezzo pixel di sfasamento perche l'ultima riga
 * dell'immagine restasse NON scurita. Su una schermata chiara come quella di
 * aiDA quel mezzo pixel e la riga chiara che si vedeva.
 */
/* --------------------------------------------------------------- contatti */

.dr-cta {
	position: relative;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: var(--dr-sp-6);
	padding: clamp(30px, 4.6vw, 68px);
	border-radius: var(--dr-r-panel);
	border: 1px solid var(--dr-line-strong);
	background: linear-gradient(135deg, oklch(0.26 0.015 190) 0%, oklch(0.30 0.04 178) 42%, oklch(0.42 0.09 168) 100%);
	box-shadow: 0 40px 100px oklch(var(--dr-deep) / 0.5);
}

.dr-cta-eyebrow {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.2em;
	color: oklch(0.88 0.06 160);
}

.dr-cta h2 {
	margin: 0;
	max-width: 22ch;
	font-size: clamp(28px, 4.6vw, 56px);
	font-weight: 600;
	line-height: 1.05;
	letter-spacing: -0.03em;
	color: oklch(0.98 0.005 165);
}

.dr-cta p {
	margin: 0;
	max-width: 48ch;
	font-size: clamp(14px, 1.5vw, 16.5px);
	line-height: 1.7;
	color: oklch(0.92 0.02 160);
	text-wrap: pretty;
}

.dr-cta-links {
	display: flex;
	flex-wrap: wrap;
	gap: var(--dr-sp-3);
}

.dr-cta-btn {
	min-height: var(--dr-ctrl-lg);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--dr-sp-2);
	padding: 0 24px;
	border-radius: var(--dr-r-pill);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	font-weight: 500;
	letter-spacing: 0.14em;
	text-decoration: none;
}

.dr-cta-btn.is-primary {
	font-weight: 600;
}

/* ---------------------------------------------------------------- footer */

.dr-footer-links {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px 16px;
}

.dr-footer-links a {
	color: var(--dr-dim);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: color var(--dr-t) var(--dr-ease), border-color var(--dr-t) var(--dr-ease);
}

.dr-footer-links a:hover {
	color: var(--dr-accent-2);
	border-bottom-color: currentColor;
}

.dr-footer {
	display: flex;
	flex-wrap: wrap;
	gap: 14px;
	align-items: center;
	justify-content: space-between;
	padding: 26px 4px 10px;
	border-top: 1px solid var(--dr-line);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.1em;
	color: var(--dr-dim);
}

/* ================================================= dock fissa su telefono */

.dr-dock {
	display: none;
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 60;
	padding: 0 10px calc(10px + env(safe-area-inset-bottom, 0px));
	pointer-events: none;
}

.dr-dock-bar {
	pointer-events: auto;
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 4px;
	padding: 6px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: oklch(0.17 0.01 172 / 0.9);
	/* la dock resta scura: dentro di lei vale l'inchiostro chiaro */
	--dr-ink: 1 0 0;
	--dr-text: oklch(0.96 0.005 170);
	--dr-muted: oklch(0.73 0.008 170);
	--dr-dim: oklch(0.62 0.008 170);
	-webkit-backdrop-filter: blur(18px);
	backdrop-filter: blur(18px);
	box-shadow: var(--dr-glass-hi), 0 -10px 40px oklch(var(--dr-deep) / 0.55);
}

.dr-dock-btn {
	appearance: none;
	/* piu alta della scala: e il bersaglio del pollice */
	min-height: 52px;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: var(--dr-sp-1);
	line-height: 1;
	padding: 9px 2px;
	border: 0;
	border-radius: var(--dr-r-sm);
	background: transparent;
	color: var(--dr-muted);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: 8.5px;
	letter-spacing: 0.1em;
	text-decoration: none;
	cursor: pointer;
	transition: background var(--dr-t) var(--dr-ease), color var(--dr-t) var(--dr-ease), transform var(--dr-t) var(--dr-bounce);
}

.dr-dock-btn .dr-icon {
	width: 18px;
	height: 18px;
}

.dr-dock-btn > span {
	display: block;
	line-height: 1;
}

.dr-dock-btn:hover,
.dr-dock-btn:focus-visible {
	color: var(--dr-text);
	background: oklch(var(--dr-ink) / 0.06);
}

.dr-dock-btn:active {
	transform: scale(0.94);
}

/* "sei qui" */
.dr-dock-btn.is-active {
	background: var(--dr-grad);
	color: var(--dr-on-accent);
}

/* "pannello aperto": diverso, altrimenti si accendono due pillole insieme */
.dr-dock-btn.is-open {
	background: oklch(var(--dr-ink) / 0.1);
	color: var(--dr-accent-2);
}

.dr-dock-chip.is-current {
	border-color: var(--dr-accent);
	color: var(--dr-accent-2);
}

/* l'interruttore mostra la meta giusta a seconda del tema attivo */
.dr-theme-scuro,
.dr-theme-chiaro {
	display: none;
	align-items: center;
	gap: 7px;
}

html:not([data-dr-theme='chiaro']) .dr-theme-scuro,
html[data-dr-theme='chiaro'] .dr-theme-chiaro {
	display: inline-flex;
}

.dr-dock-chip {
	flex: 1 1 auto;
	min-height: var(--dr-ctrl);
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	padding: 0 14px;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: var(--dr-glass);
	box-shadow: var(--dr-glass-hi);
	color: var(--dr-text);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.12em;
	text-transform: uppercase;
	text-decoration: none;
	text-align: center;
}

.dr-dock-chip.is-icon {
	flex-direction: column;
	gap: var(--dr-sp-1);
	/* interlinea a 1: senza, la parola porta con se lo spazio del discendente
	   e sotto l'etichetta sembra esserci piu aria che sopra l'icona */
	line-height: 1;
	padding: 10px 4px;
	font-size: 8px;
	letter-spacing: 0.06em;
}

.dr-dock-chip.is-icon > span {
	display: block;
	line-height: 1;
}

.dr-dock-chip .dr-icon {
	width: 17px;
	height: 17px;
}

.dr-dock-chip:hover,
.dr-dock-chip:focus-visible {
	border-color: oklch(var(--dr-ink) / 0.28);
	color: var(--dr-text);
}

/*
 * L'attributo hidden vale display:none, ma arriva dal foglio del browser e
 * qualsiasi regola nostra lo batte: senza questa riga i due pannelli restavano
 * aperti tutti e due, sempre.
 */

/* ------------------------------------------------------ modulo di ricerca */

.search-form {
	display: flex;
	gap: var(--dr-sp-2);
	flex-wrap: wrap;
}

.search-form label {
	flex: 1 1 200px;
	min-width: 0;
}

.search-form .search-field,
.search-form input[type='search'] {
	width: 100%;
	min-height: var(--dr-ctrl);
	padding: 0 18px;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.05);
	color: var(--dr-text);
	font-family: inherit;
	font-size: 14px;
}

.search-form .search-field::placeholder {
	color: var(--dr-dim);
}

.search-form .search-submit,
.search-form input[type='submit'] {
	min-height: var(--dr-ctrl);
	padding: 0 22px;
	border-radius: var(--dr-r-pill);
	border: 0;
	background: var(--dr-grad);
	color: var(--dr-on-accent);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	cursor: pointer;
	transition: transform var(--dr-t) var(--dr-bounce);
}

.search-form .search-submit:hover:not(:disabled) {
	transform: translateY(-2px);
}

/* spento finche non si scrive: cliccarlo a vuoto non porta da nessuna parte */
.search-form .search-submit:disabled,
.dr-navbar .dr-navtool:disabled {
	opacity: 0.4;
	cursor: not-allowed;
	transform: none;
}

.dr-navbar .dr-navtool:disabled:hover {
	transform: none;
	color: var(--dr-muted);
	border-color: var(--dr-line);
}

/* --------------------------------------------------------------- demo */

/* il tasto e uno solo: cambia il posto, non la forma */

.dr-demo-cta,
.dr-nav-demo {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	min-height: var(--dr-ctrl);
	padding: 0 20px;
	border-radius: var(--dr-r-pill);
	border: 1px solid color-mix(in oklab, var(--dr-accent) 55%, transparent);
	background: color-mix(in oklab, var(--dr-accent) 14%, transparent);
	color: var(--dr-text);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-decoration: none;
	white-space: nowrap;
	transition: transform var(--dr-t) var(--dr-bounce), border-color var(--dr-t) var(--dr-ease), background var(--dr-t) var(--dr-ease);
}

.dr-hero-riga {
	/*
	 * Fascia a tutta larghezza sopra le colonne: la colonna del titolo e larga
	 * poco piu di trecento pixel e i due elementi non ci starebbero affiancati.
	 */
	flex: 1 1 100%;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--dr-sp-3);
	margin-bottom: 4px;
}

/* il tasto e alto quanto l'etichetta accanto: stessa riga, stesso peso */
.dr-demo-cta {
	/* alto quanto l'etichetta accanto, non quanto un comando */
	min-height: 38px;
	padding: 0 16px;
}

.dr-nav-demo {
	min-height: var(--dr-ctrl-sm);
	padding: 0 16px;
	margin-left: 6px;
}

.dr-demo-cta:hover,
.dr-nav-demo:hover {
	transform: translateY(-2px);
	border-color: var(--dr-accent);
	background: color-mix(in oklab, var(--dr-accent) 22%, transparent);
}

.dr-demo-punto {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--dr-accent);
	box-shadow: 0 0 0 0 color-mix(in oklab, var(--dr-accent) 55%, transparent);
	animation: drPulse 2.6s ease-out infinite;
}

body.dr-anim-ridotte .dr-demo-punto {
	animation: none;
}

/* stato della demo sulla scheda */

@media (max-width: 1180px) {
	.dr-nav-demo {
		display: none;
	}
}

/* ============================================================ scheda progetto */

/*
 * Si chiama dr-work e non dr-card perche dr-card era gia occupato dalle schede
 * dei servizi: chiamandole allo stesso modo, le schede progetto ereditavano i
 * loro stili e sembravano scatole dentro scatole.
 */

/*
 * Ricostruita da zero.
 *
 * La riga chiara sotto l'immagine nasceva da una combinazione precisa: un
 * contenitore che RITAGLIA (overflow + angoli arrotondati) e che allo stesso
 * tempo SI MUOVE. A ogni fotogramma il browser ricalcola la maschera
 * arrotondata, e agli sfasamenti di mezzo pixel il bordo del ritaglio veniva
 * fuso con quello che stava sotto.
 *
 * Qui le due cose sono separate:
 * - la scheda si muove ma non ritaglia niente;
 * - a ritagliare e la sola area dell'immagine, che sta ferma;
 * - il corpo risale di un pixel e ha un fondo pieno, quindi copre comunque
 *   il bordo inferiore dell'immagine.
 *
 * Effetti e animazioni sono gli stessi di prima: sollevamento, ingrandimento
 * dell'immagine, riflesso del puntatore, filtri per categoria.
 */

.dr-work {
	position: relative;
	display: flex;
	flex-direction: column;
	border-radius: var(--dr-r-card);
	color: inherit;
	text-decoration: none;
	background: var(--dr-panel);
	box-shadow: inset 0 0 0 1px var(--dr-line);
	content-visibility: auto;
	contain-intrinsic-size: auto 420px;
	transition: transform var(--dr-t-slow) var(--dr-ease), box-shadow var(--dr-t-slow) var(--dr-ease), opacity var(--dr-t-slow) var(--dr-ease);
}

/* lo stesso filo luminoso in cima delle schede servizi */
.dr-work-media::before {
	content: '';
	position: absolute;
	z-index: 3;
	top: 0;
	left: 0;
	right: 0;
	height: 2px;
	background: linear-gradient(90deg, transparent, var(--dr-accent), transparent);
	opacity: 0.5;
	transition: opacity var(--dr-t-slow) var(--dr-ease);
}

.dr-work:hover .dr-work-media::before {
	opacity: 0.95;
}

.dr-work:hover {
	transform: translateY(-10px);
	box-shadow:
		inset 0 0 0 1px color-mix(in oklab, var(--dr-accent) 60%, transparent),
		0 34px 70px oklch(var(--dr-deep) / 0.6);
}

.dr-work.is-attesa {
	opacity: 0.62;
	cursor: default;
}

.dr-work.is-attesa:hover {
	transform: none;
	box-shadow: inset 0 0 0 1px var(--dr-line);
}

.dr-work.is-hidden {
	display: none;
}

/* --- l'immagine: e l'unica cosa che ritaglia, e non si muove --- */

.dr-work-media {
	position: relative;
	display: block;
	aspect-ratio: 16 / 10;
	overflow: hidden;
	border-radius: var(--dr-r-card) var(--dr-r-card) 0 0;
	background: oklch(var(--dr-deep));
}

/*
 * Nessuna trasformazione qui dentro.
 *
 * L'ingrandimento al passaggio del mouse era una scala applicata a un elemento
 * dentro un ritaglio arrotondato: e la combinazione che produce la sbavatura di
 * mezzo pixel sul bordo. Il sollevamento della scheda resta, lo zoom no.
 */
.dr-work-media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.dr-work-media.is-empty {
	display: grid;
	place-items: center;
	background:
		radial-gradient(120% 120% at 20% 0%, oklch(var(--dr-ink) / 0.06), transparent 60%),
		oklch(var(--dr-deep));
}

.dr-work-mark {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: clamp(30px, 4vw, 44px);
	letter-spacing: 0.06em;
	color: oklch(var(--dr-ink) / 0.38);
}

/* il velo che scurisce il fondo dell'immagine, dove poi arriva il corpo */

.dr-work-velo {
	position: absolute;
	inset: 0;
	pointer-events: none;
	background: linear-gradient(180deg, transparent 45%, oklch(var(--dr-deep) / 0.85));
}

.dr-work-cat,
.dr-work-stato {
	position: absolute;
	z-index: 2;
	padding: 5px 11px;
	border-radius: var(--dr-r-pill);
	box-shadow: inset 0 0 0 1px var(--dr-line);
	background: oklch(var(--dr-deep) / 0.9);
	-webkit-backdrop-filter: blur(8px);
	backdrop-filter: blur(8px);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label-sm);
	letter-spacing: 0.14em;
	color: var(--dr-muted);
	white-space: nowrap;
}

.dr-work-cat {
	top: 12px;
	left: 12px;
}

.dr-work-stato {
	right: 12px;
	bottom: 12px;
}

.dr-work-stato.is-online {
	box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--dr-accent) 60%, transparent);
	color: var(--dr-accent-2);
}

/* --- il corpo: risale di un pixel e copre il bordo dell'immagine --- */

.dr-work-body {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: var(--dr-sp-2);
	padding: 20px 22px 22px;
	border-radius: 0 0 var(--dr-r-card) var(--dr-r-card);
	/* trasparente: sotto c'e il vetro della scheda, che deve continuare */
	background: transparent;
}

.dr-work-titolo {
	font-size: 15.5px;
	font-weight: 600;
	letter-spacing: -0.01em;
	color: var(--dr-text);
}

.dr-work-desc {
	font-size: 14px;
	line-height: 1.6;
	color: var(--dr-muted);
}

.dr-work-nota {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label-sm);
	letter-spacing: 0.12em;
	color: var(--dr-dim);
}

body.dr-anim-ridotte .dr-work {
	transition: none;
}

body.dr-anim-ridotte .dr-work:hover {
	transform: none;
}

/* ==================================== quello che colora il browser, non noi */

/*
 * Il browser mette del suo in parecchi punti: la crocetta del campo ricerca,
 * le caselle di spunta, il cursore che lampeggia, le barre di scorrimento.
 * Senza istruzioni sono blu di sistema, e in mezzo al verde stonano.
 */

:root {
	color-scheme: dark;
	accent-color: var(--dr-accent);
	caret-color: var(--dr-accent-2);
	scrollbar-color: oklch(var(--dr-ink) / 0.22) transparent;
}

html[data-dr-theme='chiaro'] {
	color-scheme: light;
	scrollbar-color: oklch(var(--dr-ink) / 0.2) transparent;
}

/* la crocetta che svuota il campo di ricerca */

input[type='search']::-webkit-search-cancel-button {
	-webkit-appearance: none;
	appearance: none;
	width: 14px;
	height: 14px;
	margin-left: 6px;
	cursor: pointer;
	background-color: var(--dr-dim);
	-webkit-mask: var(--dr-x) center / contain no-repeat;
	mask: var(--dr-x) center / contain no-repeat;
	transition: background-color var(--dr-t-fast) var(--dr-ease);
}

input[type='search']:hover::-webkit-search-cancel-button,
input[type='search']:focus::-webkit-search-cancel-button {
	background-color: var(--dr-accent-2);
}

/* barre di scorrimento nei pannelli, dove il tema ne disegna di proprie */

.dr-rail::-webkit-scrollbar,
.dr-drawer-body::-webkit-scrollbar,
.dr-rail-body::-webkit-scrollbar {
	width: 8px;
	height: 8px;
}

.dr-rail::-webkit-scrollbar-thumb,
.dr-drawer-body::-webkit-scrollbar-thumb,
.dr-rail-body::-webkit-scrollbar-thumb {
	border-radius: 999px;
	background: oklch(var(--dr-ink) / 0.22);
}

.dr-rail::-webkit-scrollbar-track,
.dr-drawer-body::-webkit-scrollbar-track,
.dr-rail-body::-webkit-scrollbar-track {
	background: transparent;
}

/* ==================================================================== 404 */

.dr-404 {
	display: grid;
	gap: var(--dr-sp-7);
}

.dr-404-scene {
	position: relative;
	overflow: hidden;
	padding: clamp(28px, 5vw, 60px);
	border-radius: var(--dr-radius);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	box-shadow: var(--dr-glass-hi);
	isolation: isolate;
}

.dr-404-grid {
	position: absolute;
	inset: -40% -10% -10%;
	z-index: -2;
	background:
		linear-gradient(oklch(var(--dr-ink) / 0.05) 1px, transparent 1px) 0 0 / 100% 34px,
		linear-gradient(90deg, oklch(var(--dr-ink) / 0.05) 1px, transparent 1px) 0 0 / 34px 100%;
	transform: perspective(340px) rotateX(58deg);
	transform-origin: 50% 100%;
	mask-image: linear-gradient(180deg, transparent, #000 60%);
	animation: dr404Grid 7s linear infinite;
}

@keyframes dr404Grid {
	to { background-position: 0 34px, 34px 0; }
}

.dr-404-scan {
	position: absolute;
	inset: 0;
	z-index: -1;
	background: repeating-linear-gradient(180deg, oklch(var(--dr-ink) / 0.035) 0 1px, transparent 1px 4px);
	animation: dr404Scan 5.5s linear infinite;
}

@keyframes dr404Scan {
	to { transform: translateY(8px); }
}

.dr-404-kicker {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	margin: 0 0 14px;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.16em;
	color: var(--dr-dim);
}

.dr-404-dot {
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: oklch(0.68 0.19 25);
	box-shadow: 0 0 14px oklch(0.68 0.19 25);
	animation: dr404Blink 1.4s steps(2) infinite;
}

@keyframes dr404Blink {
	50% { opacity: 0.25; }
}

.dr-404-code {
	position: relative;
	margin: 0;
	font-size: clamp(88px, 22cqw, 190px);
	line-height: 0.86;
	font-weight: 700;
	letter-spacing: -0.04em;
	color: var(--dr-text);
}

.dr-404-ghost {
	position: absolute;
	inset: 0;
	pointer-events: none;
}

.dr-404-ghost-a {
	color: oklch(0.72 0.17 150 / 0.85);
	animation: dr404A 3.4s steps(1) infinite;
}

.dr-404-ghost-b {
	color: oklch(0.66 0.16 25 / 0.7);
	animation: dr404B 3.4s steps(1) infinite;
}

@keyframes dr404A {
	0%, 92%, 100% { transform: none; clip-path: none; opacity: 0; }
	93%           { transform: translate(-4px, 2px); clip-path: inset(12% 0 58% 0); opacity: 1; }
	96%           { transform: translate(3px, -3px); clip-path: inset(64% 0 8% 0); opacity: 1; }
}

@keyframes dr404B {
	0%, 90%, 100% { transform: none; clip-path: none; opacity: 0; }
	91%           { transform: translate(5px, -1px); clip-path: inset(38% 0 34% 0); opacity: 1; }
	97%           { transform: translate(-6px, 2px); clip-path: inset(6% 0 72% 0); opacity: 1; }
}

.dr-404-lead {
	max-width: 44ch;
	margin: 12px 0 22px;
	color: var(--dr-muted);
	font-size: 15px;
	line-height: 1.6;
}

.dr-404-log {
	min-height: 132px;
	padding: 16px 18px;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-deep) / 0.55);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: 12px;
	line-height: 1.9;
	color: oklch(0.86 0.03 165);
	overflow-wrap: anywhere;
}

.dr-404-caret {
	display: inline-block;
	width: 8px;
	height: 14px;
	vertical-align: -2px;
	background: var(--dr-accent-2);
	animation: drBlink 1.05s steps(2) infinite;
}

.dr-404-search {
	margin: 22px 0 18px;
	max-width: 460px;
}

.dr-404-links {
	display: flex;
	flex-wrap: wrap;
	gap: var(--dr-sp-2);
}

.dr-404-link {
	min-height: var(--dr-ctrl);
	display: inline-flex;
	align-items: center;
	padding: 0 20px;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: var(--dr-glass);
	box-shadow: var(--dr-glass-hi);
	color: var(--dr-text);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-decoration: none;
	transition: transform var(--dr-t) var(--dr-bounce), border-color var(--dr-t) var(--dr-ease), color var(--dr-t) var(--dr-ease);
}

.dr-404-link:hover {
	transform: translateY(-2px);
	border-color: var(--dr-line-strong);
	color: var(--dr-text);
}

.dr-404-link.is-primary {
	background: var(--dr-grad);
	border-color: transparent;
	color: var(--dr-on-accent);
}

.dr-404-suggest-title {
	margin: 0 0 12px;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--dr-dim);
}

.dr-404-suggest-list {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: var(--dr-sp-3);
}

.dr-404-suggest-item {
	display: flex;
	align-items: center;
	gap: var(--dr-sp-4);
	padding: 14px 16px;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: var(--dr-glass);
	box-shadow: var(--dr-glass-hi);
	color: var(--dr-text);
	text-decoration: none;
	font-size: 14px;
	transition: transform var(--dr-t) var(--dr-bounce), border-color var(--dr-t) var(--dr-ease);
}

.dr-404-suggest-item:hover {
	transform: translateY(-2px);
	border-color: var(--dr-line-strong);
}

.dr-404-suggest-mark {
	flex: 0 0 auto;
	width: 38px;
	height: 38px;
	display: grid;
	place-items: center;
	border-radius: var(--dr-r-sm);
	background: oklch(var(--dr-ink) / 0.07);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: 12px;
	letter-spacing: 0.08em;
	color: var(--dr-accent-2);
}

body.dr-anim-ridotte .dr-404-grid,
body.dr-anim-ridotte .dr-404-scan,
body.dr-anim-ridotte .dr-404-ghost,
body.dr-anim-ridotte .dr-404-dot,
body.dr-anim-ridotte .dr-404-caret {
	animation: none;
}

body.dr-anim-ridotte .dr-404-ghost {
	display: none;
}

/* =============================================================== tema chiaro */

/*
 * Non e un secondo foglio di stile: il tema chiaro ribalta l'inchiostro dei
 * veli e le tinte di fondo, e tutto il resto segue da solo.
 */

html[data-dr-theme='chiaro'] {
	--dr-ink: 0.18 0.012 172;
	--dr-deep: 0.99 0.003 170;
	--dr-bg: oklch(0.965 0.006 170);
	--dr-surface: oklch(0.985 0.004 170);
	--dr-text: oklch(0.24 0.015 172);
	--dr-muted: oklch(0.40 0.014 172);
	--dr-dim: oklch(0.455 0.012 172);
	--dr-line: oklch(var(--dr-ink) / 0.16);
	--dr-line-strong: oklch(var(--dr-ink) / 0.3);
	--dr-accent: oklch(0.55 0.15 155);
	--dr-accent-2: oklch(0.52 0.13 152);
	/*
	 * Vetro vero anche di giorno: il bianco al 90% non lasciava passare nulla e
	 * la sfocatura non aveva niente da sfocare. Superfici piu trasparenti,
	 * sfocatura piu larga e un pizzico di saturazione, cosi il colore del fondo
	 * filtra attraverso i pannelli come succede sul tema scuro.
	 */
	--dr-blur: blur(30px) saturate(195%);
	--dr-glass: linear-gradient(150deg, oklch(1 0 0 / 0.42), oklch(1 0 0 / 0.16));
	--dr-glass-hi:
		inset 0 1px 0 oklch(1 0 0 / 0.9),
		inset 0 -1px 0 oklch(var(--dr-ink) / 0.04),
		0 1px 2px oklch(var(--dr-ink) / 0.05),
		0 14px 38px oklch(var(--dr-ink) / 0.09);
	--dr-panel: linear-gradient(160deg, oklch(1 0 0 / 0.38), oklch(0.97 0.016 168 / 0.22));
}

html[data-dr-theme='chiaro'] body {
	background:
		radial-gradient(105% 72% at 6% -14%, oklch(0.84 0.10 158 / 0.72), transparent 56%),
		radial-gradient(80% 62% at 102% 0%, oklch(0.86 0.07 196 / 0.6), transparent 50%),
		radial-gradient(75% 62% at 46% 106%, oklch(0.87 0.08 162 / 0.55), transparent 58%),
		radial-gradient(50% 40% at 78% 52%, oklch(0.90 0.06 145 / 0.4), transparent 60%),
		var(--dr-bg);
}

/* la trama a griglia di giorno va vista appena, ma va vista */
html[data-dr-theme='chiaro'] .dr-grid-overlay {
	opacity: 0.5;
}

html[data-dr-theme='chiaro'] .dr-mesh i {
	opacity: 0.5;
	filter: blur(70px) saturate(150%);
}

html[data-dr-theme='chiaro'] .dr-title {
	background: linear-gradient(104deg, oklch(0.30 0.02 175) 6%, oklch(0.45 0.07 175) 40%, var(--dr-accent) 74%, var(--dr-accent-2) 100%);
	background-size: 220% 100%;
	-webkit-background-clip: text;
	background-clip: text;
}

html[data-dr-theme='chiaro'] .dr-term-wrap,
html[data-dr-theme='chiaro'] .dr-term-screen {
	color: oklch(0.90 0.02 168);
}

/* il terminale resta scuro anche di giorno: e un terminale */
html[data-dr-theme='chiaro'] .dr-term-wrap {
	--dr-ink: 1 0 0;
	--dr-on-accent: oklch(0.16 0.02 172);
	--dr-x: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 3l10 10M13 3L3 13' stroke='%23000' stroke-width='2' stroke-linecap='round' fill='none'/%3E%3C/svg%3E");
	--dr-surface: oklch(0.185 0.012 172);
	--dr-deep: 0.12 0.02 172;
	--dr-text: oklch(0.96 0.005 170);
	--dr-muted: oklch(0.73 0.008 170);
	--dr-dim: oklch(0.62 0.008 170);
	--dr-line: oklch(1 0 0 / 0.14);
	--dr-line-strong: oklch(1 0 0 / 0.2);
	--dr-glass: linear-gradient(150deg, oklch(1 0 0 / 0.11), oklch(1 0 0 / 0.025));
	--dr-glass-hi: inset 0 1px 0 oklch(1 0 0 / 0.18);
	background: linear-gradient(160deg, oklch(0.22 0.015 178), oklch(0.15 0.01 172));
	border-color: oklch(0.30 0.02 175);
}

/* le pillole scure della colonna diventano chiare */
html[data-dr-theme='chiaro'] .dr-tag,
html[data-dr-theme='chiaro'] .dr-chip {
	background: oklch(1 0 0 / 0.55);
	color: var(--dr-text);
}

/*
 * I verdi tenui vanno scuriti, non schiariti, quando il fondo e chiaro.
 *
 * Queste regole erano due e una pulizia le aveva fuse: il fondo verde della
 * sigla dei servizi finiva addosso a handle, percentuali e parola rotante, che
 * sembravano testo selezionato.
 */
html[data-dr-theme='chiaro'] .dr-handle,
html[data-dr-theme='chiaro'] .dr-skill-pct,
html[data-dr-theme='chiaro'] .dr-avatar-mono,
html[data-dr-theme='chiaro'] .dr-code-word,
html[data-dr-theme='chiaro'] .dr-work-cat,
html[data-dr-theme='chiaro'] .dr-404-suggest-mark {
	color: oklch(0.45 0.13 155);
}

/* la sigla del servizio: verde chiaro su verde scuro non regge di giorno */
html[data-dr-theme='chiaro'] .dr-card-icon {
	background: linear-gradient(135deg, oklch(0.88 0.06 160), oklch(0.80 0.09 158));
	color: oklch(0.24 0.05 165);
}

/* i numeri sfumavano nel bianco: di giorno la sfumatura parte dal verde scuro */
html[data-dr-theme='chiaro'] .dr-stat-v {
	background: linear-gradient(135deg, oklch(0.34 0.07 168), oklch(0.52 0.15 152));
	-webkit-background-clip: text;
	background-clip: text;
}

/* l'etichetta di disponibilita: verde tenue su vetro chiaro non si leggeva */
html[data-dr-theme='chiaro'] .dr-badge {
	background: oklch(1 0 0 / 0.62);
	border-color: oklch(var(--dr-ink) / 0.14);
	color: oklch(0.34 0.06 165);
}

html[data-dr-theme='chiaro'] .dr-cta {
	background: linear-gradient(160deg, oklch(1 0 0 / 0.88), oklch(0.95 0.012 168 / 0.85));
}

html[data-dr-theme='chiaro'] .dr-404-log {
	background: oklch(0.20 0.015 175);
	color: oklch(0.88 0.03 165);
}

/* il riquadro dei numeri e quello dei contatti seguono il fondo */
html[data-dr-theme='chiaro'] .dr-stats,
html[data-dr-theme='chiaro'] .dr-cta {
	background: linear-gradient(160deg, oklch(1 0 0 / 0.48), oklch(0.95 0.022 165 / 0.3));
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
}

html[data-dr-theme='chiaro'] .dr-cta,
html[data-dr-theme='chiaro'] .dr-cta h2,
html[data-dr-theme='chiaro'] .dr-cta p {
	color: var(--dr-text);
}

html[data-dr-theme='chiaro'] .dr-cta-eyebrow {
	color: var(--dr-muted);
}

html[data-dr-theme='chiaro'] .dr-cta-btn:not(.is-primary) {
	color: var(--dr-text);
}

html[data-dr-theme='chiaro'] .dr-code-tag {
	color: oklch(0.42 0.02 172);
}

html[data-dr-theme='chiaro'] .dr-drawer-head {
	background: oklch(1 0 0 / 0.9);
	color: var(--dr-muted);
}

html[data-dr-theme='chiaro'] .dr-dock-btn.is-active,
html[data-dr-theme='chiaro'] .dr-cta-btn,
html[data-dr-theme='chiaro'] .dr-navbar a.is-active {
	color: oklch(0.99 0 0);
}

/* ----------------------------------------------------------- responsive */

@media (max-width: 900px) {
	.dr-rail {
		position: static;
		max-height: none;
		max-width: none;
		overflow-y: visible;
		border-radius: var(--dr-r-card);
	}

	/*
	 * Su telefono la scheda profilo e alta quasi mille pixel: lasciandola per
	 * prima, la barra di navigazione e la hero finivano a tre schermate di
	 * distanza. Il contenuto va davanti, il profilo subito dopo.
	 */
	.dr-main {
		order: -1;
	}

	/* la dock in basso prende il posto della barra in alto */
	.dr-navbar-wrap {
		display: none;
	}

	.dr-dock {
		display: block;
	}

	.dr-app {
		padding-bottom: calc(96px + env(safe-area-inset-bottom, 0px));
	}

	.dr-hero-art {
		max-width: 260px;
		margin: 0 auto;
	}

	.dr-facts {
		grid-template-columns: repeat(auto-fit, minmax(96px, 1fr));
	}
}

@media (max-width: 620px) {
	/*
	 * La barra di navigazione scorreva in orizzontale e l'ultima voce restava
	 * fuori dallo schermo senza nessun segno che ci fosse. Quattro voci corte:
	 * meglio mandarle a capo e vederle tutte.
	 */
	/* quattro tasti fissi: due per riga, griglia pulita invece di uno spaiato */
	.dr-term-key {
		flex: 1 1 calc(50% - 4px);
		padding: 0 12px;
	}

	.dr-term-screen {
		font-size: 12px;
		padding: 16px 14px 8px;
	}

	.dr-term-keys {
		padding: 12px 14px 14px;
	}
}

@media (hover: none) {
	.dr-card:hover,
}

/* ====================================================== pagine interne */

.dr-page-head {
	display: flex;
	flex-direction: column;
	gap: var(--dr-sp-3);
}

.dr-page-kicker {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: color-mix(in oklab, var(--dr-accent-2) 72%, white);
}

.dr-page-title {
	margin: 0;
	font-size: clamp(30px, 4.6vw, 58px);
	font-weight: 600;
	line-height: 1.04;
	letter-spacing: -0.03em;
	color: var(--dr-text);
	text-wrap: pretty;
}

.dr-page-meta {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.12em;
	color: var(--dr-dim);
}

.dr-page-cover {
	border-radius: var(--dr-r-card);
	overflow: hidden;
	border: 1px solid var(--dr-line);
	box-shadow: 0 30px 80px oklch(var(--dr-deep) / 0.45);
}

.dr-page-cover img {
	display: block;
	width: 100%;
	height: auto;
}

/* ------------------------------------------------- contenuto WordPress */

.dr-content {
	max-width: 74ch;
	font-size: 15.5px;
	line-height: 1.78;
	color: var(--dr-muted);
}

.dr-content > * + * {
	margin-top: 1.1em;
}

.dr-content h2,
.dr-content h3,
.dr-content h4 {
	margin-top: 1.8em;
	color: var(--dr-text);
	letter-spacing: -0.02em;
	line-height: 1.2;
 font-size: 17px;
}

.dr-content h2 { font-size: clamp(22px, 2.6vw, 32px); }
.dr-content h3 { font-size: clamp(18px, 2vw, 24px); }
.dr-content a {
	color: color-mix(in oklab, var(--dr-accent-2) 82%, white);
	text-decoration: underline;
	text-decoration-color: color-mix(in oklab, var(--dr-accent) 45%, transparent);
	text-underline-offset: 3px;
}

.dr-content a:hover {
	color: oklch(0.94 0.06 158);
}

.dr-content ul,
.dr-content ol {
	padding-left: 1.3em;
}

.dr-content li + li {
	margin-top: 0.45em;
}

.dr-content ul li::marker {
	color: var(--dr-accent);
}

.dr-content img,
.dr-content video,
.dr-content iframe {
	max-width: 100%;
	height: auto;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
}

.dr-content figure {
	margin: 1.6em 0;
}

.dr-content figcaption {
	margin-top: 0.7em;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.1em;
	color: var(--dr-dim);
}

.dr-content blockquote {
	margin: 1.6em 0;
	padding: 18px 24px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	font-size: 17px;
	color: var(--dr-text);
}

.dr-content code,
.dr-content kbd {
	padding: 2px 7px;
	border-radius: 7px;
	background: oklch(var(--dr-ink) / 0.06);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: 0.88em;
	color: color-mix(in oklab, var(--dr-accent-2) 80%, white);
}

.dr-content pre {
	padding: 20px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: linear-gradient(160deg, oklch(0.205 0.012 180 / 0.94), oklch(0.17 0.008 172 / 0.96));
	overflow-x: auto;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: 12.5px;
	line-height: 1.8;
}

.dr-content pre code {
	padding: 0;
	background: none;
}

.dr-content hr {
	border: 0;
	border-top: 1px solid var(--dr-line);
	margin: 2.4em 0;
}

.dr-content table {
	width: 100%;
	border-collapse: collapse;
	font-size: 14px;
}

.dr-content th,
.dr-content td {
	padding: 12px 14px;
	border-bottom: 1px solid var(--dr-line);
	text-align: left;
}

.dr-content th {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--dr-dim);
}

/* --------------------------------------------------------------- elenchi */

.dr-list {
	display: flex;
	flex-direction: column;
	gap: var(--dr-sp-3);
}

.dr-list-item {
	display: flex;
	flex-direction: column;
	gap: var(--dr-sp-1);
	padding: 20px 22px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	text-decoration: none;
	transition: transform var(--dr-t-slow) var(--dr-ease), border-color var(--dr-t-slow) var(--dr-ease);
}

.dr-list-item:hover {
	transform: translateX(6px);
	border-color: color-mix(in oklab, var(--dr-accent) 50%, transparent);
}

.dr-list-title {
	font-size: 17px;
	font-weight: 600;
	color: var(--dr-text);
}

.dr-list-desc {
	font-size: 13.5px;
	line-height: 1.6;
	color: var(--dr-muted);
}

/* ----------------------------------------------------------- paginazione */

.dr-pagination {
	display: flex;
	flex-wrap: wrap;
	gap: var(--dr-sp-1);
	margin-top: 8px;
}

.dr-pagination a,
.dr-pagination span {
	min-width: 44px;
	min-height: var(--dr-ctrl);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 0 12px;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.03);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	color: var(--dr-muted);
	text-decoration: none;
	transition: background var(--dr-t) var(--dr-ease), color var(--dr-t) var(--dr-ease), transform var(--dr-t) var(--dr-ease);
}

.dr-pagination a:hover {
	transform: translateY(-2px);
	color: var(--dr-text);
}

.dr-pagination .current {
	background: var(--dr-grad);
	border-color: transparent;
	color: var(--dr-on-accent);
}

/* -------------------------------------------------------------- ricerca */

.dr-content .search-form,
.dr-content form[role='search'] {
	display: flex;
	flex-wrap: wrap;
	gap: var(--dr-sp-2);
	margin-top: 1.4em;
}

.dr-content input[type='search'],
.dr-content input[type='text'],
.dr-content input[type='email'],
.dr-content input[type='url'],
.dr-content textarea {
	flex: 1 1 220px;
	min-height: 140px;
	padding: 14px 16px;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.03);
	color: var(--dr-text);
	font-family: inherit;
	font-size: 14px;
	line-height: 1.7;
}

.dr-content input:focus,
.dr-content textarea:focus {
	outline: none;
	border-color: var(--dr-accent);
	background: oklch(var(--dr-ink) / 0.05);
}

.dr-content input[type='submit'],
.dr-content button[type='submit'] {
	min-height: var(--dr-ctrl-lg);
	padding: 0 26px;
	border: 0;
	border-radius: var(--dr-r-pill);
	background: var(--dr-grad);
	color: var(--dr-on-accent);
	font-family: inherit;
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 0.08em;
	cursor: pointer;
	transition: transform var(--dr-t) cubic-bezier(0.34, 1.56, 0.64, 1);
}

.dr-content input[type='submit']:hover,
.dr-content button[type='submit']:hover {
	transform: translateY(-3px);
}

/* ------------------------------------------------------------ commenti */

.dr-comments {
	padding-top: 30px;
	border-top: 1px solid var(--dr-line);
}

.dr-comments h2,
.dr-comments h3 {
	font-size: clamp(18px, 2vw, 24px);
	color: var(--dr-text);
	letter-spacing: -0.02em;
}

.dr-comments ol,
.dr-comments ul {
	list-style: none;
	margin: 20px 0;
	padding: 0;
}

.dr-comments .comment-body,
.dr-comments li article {
	padding: 20px 22px;
	margin-bottom: 10px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	font-size: 14px;
	line-height: 1.7;
	color: var(--dr-muted);
}

.dr-comments .children {
	margin-left: clamp(12px, 3vw, 34px);
}

.dr-comments .comment-author,
.dr-comments .fn {
	color: var(--dr-text);
	font-weight: 600;
	font-style: normal;
}

.dr-comments .comment-metadata,
.dr-comments .comment-meta {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.1em;
	color: var(--dr-dim);
}

.dr-comments .avatar {
	border-radius: 50%;
	margin-right: 10px;
	vertical-align: middle;
}

.dr-comments .comment-respond {
	margin-top: 26px;
}

.dr-comments label {
	display: block;
	margin-bottom: 6px;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--dr-dim);
}

.dr-comments input[type='text'],
.dr-comments input[type='email'],
.dr-comments input[type='url'],
.dr-comments textarea {
	width: 100%;
	min-height: var(--dr-ctrl-lg);
	padding: 12px 16px;
	margin-bottom: 14px;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.03);
	color: var(--dr-text);
	font-family: inherit;
	font-size: 14px;
}

.dr-comments input[type='submit'] {
	min-height: var(--dr-ctrl-lg);
	padding: 0 26px;
	border: 0;
	border-radius: var(--dr-r-pill);
	background: var(--dr-grad);
	color: var(--dr-on-accent);
	font-weight: 600;
	letter-spacing: 0.08em;
	cursor: pointer;
}

/* ============================================ hero: colonna di destra */

.dr-hero-aside {
	flex: 1 1 220px;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: var(--dr-sp-5);
	padding-bottom: 6px;
}

/* ------------------------------------------- articolo precedente/successivo */

.dr-adjacent {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: var(--dr-sp-3);
	margin-top: 34px;
	padding-top: 26px;
	border-top: 1px solid var(--dr-line);
}

/* ------------------------------------------------------- menu generato */

.dr-navbar .dr-menu {
	display: flex;
	align-items: center;
	gap: var(--dr-sp-1);
	margin: 0;
	padding: 0;
	list-style: none;
}

.dr-navbar .dr-menu li {
	flex: 0 0 auto;
}

.dr-navbar a,
.dr-navbar .dr-menu a {
	flex: 0 0 auto;
	min-height: var(--dr-ctrl);
	display: inline-flex;
	align-items: center;
	padding: 0 17px;
	border-radius: var(--dr-r-pill);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
}

/* ------------------------------------------------------------- rifiniture */

.dr-tag,
.dr-fact {
	transition: transform var(--dr-t) var(--dr-bounce), border-color var(--dr-t) var(--dr-ease), box-shadow var(--dr-t) var(--dr-ease);
}

.dr-tag:hover,
.dr-fact:hover {
	transform: translateY(-2px);
	border-color: oklch(var(--dr-ink) / 0.24);
	box-shadow: inset 0 1px 0 oklch(var(--dr-ink) / 0.22);
}

/* ============================== tasti: una sola ricetta per tutto il tema */

.dr-term-key,
.dr-filter button,
.dr-navbar a,
.dr-social a,
.dr-chip,
.dr-pagination a,
.dr-pagination span,
.dr-cta-btn {
	border: 1px solid oklch(var(--dr-ink) / 0.16);
	background: var(--dr-glass);
	box-shadow: var(--dr-glass-hi);
	color: var(--dr-muted);
	cursor: pointer;
	transition: transform var(--dr-t) var(--dr-bounce), background var(--dr-t) var(--dr-ease), border-color var(--dr-t) var(--dr-ease), box-shadow var(--dr-t) var(--dr-ease), color var(--dr-t) var(--dr-ease);
}

.dr-term-key:hover,
.dr-filter button:hover,
.dr-navbar a:hover,
.dr-social a:hover,
.dr-chip:hover,
.dr-pagination a:hover,
.dr-cta-btn:hover {
	transform: translateY(-3px) scale(1.02);
	background: linear-gradient(150deg, oklch(var(--dr-ink) / 0.2), oklch(var(--dr-ink) / 0.06));
	border-color: oklch(var(--dr-ink) / 0.28);
	box-shadow: inset 0 1px 0 oklch(var(--dr-ink) / 0.32), 0 14px 34px oklch(var(--dr-deep) / 0.45);
	color: var(--dr-text);
}

.dr-term-key:active,
.dr-filter button:active,
.dr-navbar a:active,
.dr-social a:active,
.dr-pagination a:active,
.dr-cta-btn:active {
	transform: translateY(-1px) scale(0.99);
}

.dr-term-key.is-active,
.dr-filter button.is-active,
.dr-navbar a.is-active,
.dr-navbar .current-menu-item > a,
.dr-pagination .current,
.dr-cta-btn.is-primary,
.dr-cv {
	background: var(--dr-grad);
	border-color: oklch(var(--dr-ink) / 0.22);
	box-shadow: inset 0 1px 0 oklch(var(--dr-ink) / 0.35), 0 10px 28px oklch(0.55 0.1 170 / 0.28);
	color: var(--dr-on-accent);
}

.dr-cta-btn.is-primary:hover,
.dr-cv:hover {
	transform: translateY(-3px) scale(1.02);
	box-shadow: inset 0 1px 0 oklch(var(--dr-ink) / 0.42), 0 20px 46px oklch(0.6 0.12 168 / 0.42);
	color: var(--dr-on-accent);
}

.dr-term-arrow { color: oklch(0.58 0.02 200); }
.dr-term-label { color: var(--dr-accent-2); font-weight: 600; }

/* ------------------------------------------------- entrata della hero */

/*
 * Il momento in cui il preloader si alza e l'unico in cui hai davvero
 * l'attenzione di chi arriva. I pezzi della hero entrano in sequenza invece
 * di essere gia tutti li, e il titolo riceve una passata di luce.
 */

/* i pezzi da animare, non i contenitori che li reggono */
[data-dr-entrata] .dr-hero-riga,
[data-dr-entrata] .dr-title,
[data-dr-entrata] .dr-hero-aside,
[data-dr-entrata] .dr-hero-art {
	opacity: 0;
	transform: translateY(30px) scale(0.985);
}

[data-dr-entrata].dr-entrata-in .dr-hero-riga,
[data-dr-entrata].dr-entrata-in .dr-title,
[data-dr-entrata].dr-entrata-in .dr-hero-aside,
[data-dr-entrata].dr-entrata-in .dr-hero-art {
	opacity: 1;
	transform: none;
	transition:
		opacity 0.9s var(--dr-ease) var(--dr-d, 0ms),
		transform 1s var(--dr-ease) var(--dr-d, 0ms);
}

[data-dr-entrata].dr-entrata-in .dr-title {
	animation: drSweep 1.5s var(--dr-ease) 0.35s both, drGrad 9s linear 1.9s infinite alternate;
}

@keyframes drSweep {
	0%   { background-position: 160% 0; }
	100% { background-position: 0% 0; }
}

[data-dr-entrata].dr-entrata-in .dr-hero-art {
	animation: drFloat 7s ease-in-out 1.2s infinite;
}

@keyframes drFloat {
	0%, 100% { translate: 0 var(--dr-par, 0px); }
	50%      { translate: 0 calc(var(--dr-par, 0px) - 12px); }
}

body.dr-anim-ridotte [data-dr-entrata] .dr-hero-riga,
body.dr-anim-ridotte [data-dr-entrata] .dr-title,
body.dr-anim-ridotte [data-dr-entrata] .dr-hero-aside,
body.dr-anim-ridotte [data-dr-entrata] .dr-hero-art {
	opacity: 1;
	transform: none;
	transition: none;
	animation: none;
}

body.dr-anim-ridotte [data-dr-entrata].dr-entrata-in .dr-hero-art {
	animation: none;
}

.dr-section-head {
	position: relative;
}

.dr-section-head::after {
	content: '';
	position: absolute;
	left: 0;
	bottom: -10px;
	height: 2px;
	width: 0;
	border-radius: 2px;
	background: var(--dr-grad);
	transition: width 1.1s var(--dr-ease) 0.15s;
}

.dr-section-head.dr-in::after,
.dr-reveal.dr-in .dr-section-head::after {
	width: clamp(48px, 12%, 120px);
}

body.dr-anim-ridotte .dr-section-head::after {
	width: clamp(48px, 12%, 120px);
	transition: none;
}

/* GTranslate porta il proprio menu: gli diamo la forma del tema */

.dr-gt select,
.dr-gt .gt_selector,
.dr-gt .goog-te-combo {
	min-height: var(--dr-ctrl-sm);
	padding: 0 12px;
	border-radius: var(--dr-r-pill);
	border: 1px solid var(--dr-line);
	background: var(--dr-glass);
	color: var(--dr-text);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	cursor: pointer;
}

.dr-drawer .dr-gt select,
.dr-drawer .dr-gt .gt_selector {
	width: 100%;
	min-height: var(--dr-ctrl-lg);
}

.dr-gt .gt_switcher,
.dr-gt .gt_float_switcher {
	box-shadow: none;
}

/* preloader "terminale": spoglio per scelta, solo cursore e cancelletti */

.dr-pre-tty {
	display: flex;
	align-items: center;
	gap: 2px;
	max-width: 92vw;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: clamp(13px, 2.4vw, 18px);
	letter-spacing: 0.06em;
	color: var(--dr-accent-2);
	white-space: pre;
}

/* varianti verbose: comando in cima, risposta in mezzo, barra in fondo */

/*
 * Griglia esplicita con margini azzerati: lasciando i margini dei paragrafi al
 * caso comparivano cento pixel di vuoto fra comando e risposta, e il blocco
 * sforava l'altezza dello schermo.
 */
.dr-pre-tty.is-verbose {
	display: grid;
	gap: var(--dr-sp-3);
	align-content: center;
	width: min(92vw, 560px);
	max-height: 82vh;
	text-align: left;
	line-height: 1.85;
}

.dr-pre-tty.is-verbose > * {
	margin: 0;
	padding: 0;
}

.dr-pre-cmd {
	color: var(--dr-text);
}

.dr-pre-prompt {
	color: var(--dr-accent);
}

.dr-pre-log {
	min-height: 7.4em;
	color: var(--dr-muted);
}

.dr-pre-log div {
	animation: drPreLinea 0.24s var(--dr-ease) both;
}

@keyframes drPreLinea {
	from { opacity: 0; transform: translateY(4px); }
}

.dr-pre-tty.is-verbose .dr-pre-riga {
	margin: 0;
	display: flex;
	align-items: center;
	gap: 2px;
}

body.dr-anim-ridotte .dr-pre-log div {
	animation: none;
}

@media (max-width: 620px) {
	.dr-pre-tty.is-verbose {
		font-size: var(--dr-label);
	}

	.dr-pre-log {
		min-height: 9em;
	}
}

.dr-pre-tty-caret {
	display: inline-block;
	width: 0.55em;
	height: 1.15em;
	background: var(--dr-accent-2);
	animation: drBlink 1s steps(2) infinite;
}

body.dr-anim-ridotte .dr-pre-tty-caret {
	animation: none;
}

/*
 * I blocchi del core prendono il colore da theme.json, che non sa nulla dei due
 * temi: in chiaro i titoli dei widget restavano bianchi su bianco. Qui li
 * riportiamo alle variabili, che il tema invece le cambia.
 */
html[data-dr-theme='chiaro'] .wp-block-heading,
html[data-dr-theme='chiaro'] .wp-block-post-title,
html[data-dr-theme='chiaro'] .wp-block-site-title,
html[data-dr-theme='chiaro'] .wp-block-list,
html[data-dr-theme='chiaro'] .wp-block-paragraph,
html[data-dr-theme='chiaro'] .wp-block-quote,
html[data-dr-theme='chiaro'] .wp-block-table,
html[data-dr-theme='chiaro'] .dr-widget li,
html[data-dr-theme='chiaro'] .dr-widget a {
	color: var(--dr-text);
}

html[data-dr-theme='chiaro'] .wp-block-latest-posts__post-date,
html[data-dr-theme='chiaro'] .wp-block-post-date {
	color: var(--dr-muted);
}

/* -------------------------------------------------- riflesso sul vetro */

/*
 * Il vetro vero riflette la luce dove la guardi. Una sola regola per tutte le
 * superfici: l'elenco dei bersagli sta nel JS, qui c'e l'aspetto.
 */
.dr-shine {
	position: relative;
	/* tiene il riflesso dentro l'elemento, sotto al contenuto */
	isolation: isolate;
}

.dr-shine::after {
	content: '';
	position: absolute;
	/* un pixel dentro: cosi non partecipa mai all'antialiasing del bordo */
	inset: 1px;
	/*
	 * Sotto al testo, non sopra: con z-index 3 il velo chiaro copriva le
	 * scritte e sul tema bianco i dati rapidi diventavano illeggibili.
	 */
	z-index: -1;
	border-radius: inherit;
	pointer-events: none;
	opacity: 0;
	background: radial-gradient(
		260px circle at var(--dr-mx, 50%) var(--dr-my, 50%),
		oklch(var(--dr-ink) / 0.055),
		transparent 62%
	);
	transition: opacity var(--dr-t-slow) var(--dr-ease);
}

.dr-shine:hover::after {
	opacity: 1;
}

html[data-dr-theme='chiaro'] .dr-shine::after {
	background: radial-gradient(
		260px circle at var(--dr-mx, 50%) var(--dr-my, 50%),
		oklch(1 0 0 / 0.42),
		transparent 64%
	);
}

body.dr-anim-ridotte .dr-shine::after {
	display: none;
}

/* ------------------------------------- transizioni fra le pagine */

/*
 * Le pagine si sostituiscono con una dissolvenza, e colonna profilo, barra e
 * dock restano al loro posto invece di sparire e ricomparire: il sito si muove
 * come un'applicazione, non come una sequenza di caricamenti.
 */
@view-transition {
	navigation: auto;
}

@media (min-width: 901px) and (prefers-reduced-motion: no-preference) {
	.dr-rail {
		view-transition-name: dr-rail;
	}

	.dr-navbar-wrap {
		view-transition-name: dr-navbar;
	}
}

::view-transition-old(root) {
	animation: drVtOut 0.28s var(--dr-ease) both;
}

::view-transition-new(root) {
	animation: drVtIn 0.42s var(--dr-ease) both;
}

@keyframes drVtOut {
	to { opacity: 0; transform: translateY(-8px); }
}

@keyframes drVtIn {
	from { opacity: 0; transform: translateY(14px); }
}

/* ------------------------------------- area utenti, carrello, negozio */

.dr-account {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: var(--dr-sp-4);
}

.dr-account-box {
	padding: 20px 22px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	box-shadow: var(--dr-glass-hi);
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
}

/* il modulo di accesso lo stampa WordPress: lo vestiamo dall'esterno */
#dr-login p,
.dr-account-box .login-remember,
.dr-account-box .login-submit {
	margin: 0 0 10px;
}

#dr-login label {
	display: grid;
	gap: var(--dr-sp-1);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label-sm);
	letter-spacing: 0.18em;
	color: var(--dr-dim);
}

#dr-login input[type='text'],
#dr-login input[type='password'] {
	width: 100%;
	min-height: var(--dr-ctrl-lg);
	padding: 13px 16px;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.05);
	color: var(--dr-text);
	font-family: 'Sora', system-ui, sans-serif;
	font-size: 14px;
	letter-spacing: normal;
}

#dr-login .login-remember label {
	display: flex;
	align-items: center;
	gap: var(--dr-sp-2);
	font-size: var(--dr-label);
	letter-spacing: 0.1em;
}

#dr-login input[type='submit'] {
	min-height: var(--dr-ctrl-lg);
	padding: 0 24px;
	border: 0;
	border-radius: var(--dr-r-pill);
	background: var(--dr-grad);
	color: var(--dr-on-accent);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	cursor: pointer;
}

/* carrello nella barra */

.dr-navbar .dr-cart {
	position: relative;
}

.dr-cart-n {
	position: absolute;
	top: -4px;
	right: -4px;
	min-width: 18px;
	height: 18px;
	padding: 0 5px;
	display: grid;
	place-items: center;
	border-radius: var(--dr-r-pill);
	background: var(--dr-grad);
	color: var(--dr-on-accent);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label-sm);
	font-weight: 600;
}

/* negozio */

.dr-shop ul.products {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: 14px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.dr-shop ul.products li.product {
	margin: 0;
	padding: 16px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	box-shadow: var(--dr-glass-hi);
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
	text-align: left;
}

.dr-shop ul.products li.product img {
	border-radius: var(--dr-r-sm);
	margin-bottom: 12px;
}

.dr-shop .woocommerce-loop-product__title {
	font-size: 16px !important;
	font-weight: 600;
	padding: 0 !important;
}

.dr-shop .price {
	color: var(--dr-accent-2);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: 14px;
}

.dr-shop .button,
.dr-shop a.button,
.dr-shop button.button,
.dr-shop input.button {
	min-height: var(--dr-ctrl);
	display: inline-flex;
	align-items: center;
	padding: 0 20px;
	border: 0;
	border-radius: var(--dr-r-pill);
	background: var(--dr-grad);
	color: var(--dr-on-accent);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.14em;
	text-transform: uppercase;
}

.dr-shop .woocommerce-message,
.dr-shop .woocommerce-info,
.dr-shop .woocommerce-error {
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: var(--dr-glass);
	color: var(--dr-text);
	border-top-color: var(--dr-accent);
}

/* ------------------------------------------------- modulo di contatto */

.dr-form {
	width: 100%;
	max-width: 640px;
	display: grid;
	gap: var(--dr-sp-3);
	margin: 4px 0 10px;
	padding: clamp(18px, 2vw, 26px);
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line-strong);
	/*
	 * Il vetro del tema, non un gradiente scritto a mano.
	 *
	 * Quello di prima era verde-azzurro al 75%: sopra il riquadro contatti,
	 * che e gia una sfumatura verde, veniva fuori una scatola verde su verde.
	 * Con i token il pannello e quasi trasparente e lascia passare quello che
	 * ha sotto, che e il punto del vetro.
	 */
	background: var(--dr-glass);
	box-shadow: var(--dr-glass-hi);
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
}

.dr-form-row {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
	gap: var(--dr-sp-3);
}

.dr-field {
	display: grid;
	gap: var(--dr-sp-1);
	min-width: 0;
}

.dr-field > span {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label-sm);
	letter-spacing: 0.18em;
	color: var(--dr-dim);
}

.dr-field input,
.dr-field textarea {
	width: 100%;
	min-height: var(--dr-ctrl-lg);
	padding: 13px 16px;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-deep) / 0.35);
	color: var(--dr-text);
	font-family: inherit;
	font-size: 14px;
	line-height: 1.6;
	transition: border-color var(--dr-t) var(--dr-ease), background var(--dr-t) var(--dr-ease);

	resize: vertical;
}

.dr-field input:focus,
.dr-field textarea:focus {
	outline: none;
	border-color: var(--dr-accent);
	background: oklch(var(--dr-deep) / 0.5);
}

.dr-field input::placeholder,
.dr-field textarea::placeholder {
	color: var(--dr-dim);
}

/* il campo esca deve sparire agli occhi ma restare nel modulo */
.dr-esca {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

.dr-form-foot {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--dr-sp-4);
	margin-top: 2px;
}

.dr-form-nota {
	font-size: 12px;
	color: var(--dr-dim);
}

.dr-form-esito {
	margin: 0;
	padding: 12px 16px;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	font-size: 14px;
}

.dr-form-esito.is-ok {
	border-color: color-mix(in oklab, var(--dr-accent) 55%, transparent);
	background: color-mix(in oklab, var(--dr-accent) 14%, transparent);
	color: var(--dr-text);
}

.dr-form-esito.is-ko {
	border-color: oklch(0.62 0.16 25 / 0.5);
	background: oklch(0.62 0.16 25 / 0.12);
	color: var(--dr-text);
}

/* ------------------------------------------- progetto singolo e widget */

.dr-project-hero {
	margin: 0 0 22px;
	border-radius: var(--dr-radius);
	overflow: hidden;
	border: 1px solid var(--dr-line);
	box-shadow: var(--dr-glass-hi);
}

.dr-project-hero img {
	display: block;
	width: 100%;
	height: auto;
}

.dr-project-actions {
	margin: 0 0 22px;
}

.dr-project-terms {
	display: flex;
	flex-wrap: wrap;
	gap: var(--dr-sp-1);
	margin-top: 24px;
}

.dr-adjacent-link {
	display: grid;
	gap: var(--dr-sp-1);
	padding: 16px 18px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: var(--dr-glass);
	box-shadow: var(--dr-glass-hi);
	color: var(--dr-text);
	text-decoration: none;
	transition: transform var(--dr-t) var(--dr-bounce), border-color var(--dr-t) var(--dr-ease);
}

.dr-adjacent-link:hover {
	transform: translateY(-2px);
	border-color: var(--dr-line-strong);
}

.dr-adjacent-link.is-next {
	text-align: right;
}

.dr-adjacent-dir {
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label-sm);
	letter-spacing: 0.18em;
	color: var(--dr-dim);
}

.dr-adjacent-title {
	font-size: 15px;
	font-weight: 600;
}

.dr-widget-projects {
	display: grid;
	gap: var(--dr-sp-2);
}

.dr-widget-projects a {
	display: flex;
	align-items: center;
	gap: var(--dr-sp-3);
}

.dr-widget-mark {
	flex: 0 0 auto;
	width: 34px;
	height: 34px;
	display: grid;
	place-items: center;
	border-radius: var(--dr-r-sm);
	border: 1px solid var(--dr-line);
	background: oklch(var(--dr-ink) / 0.05);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	color: var(--dr-accent-2);
}

.dr-widget .dr-social {
	justify-content: flex-start;
}

.dr-widget-cv {
	margin: 14px 0 0;
}

/* ======================================== widget, archivi e blocchi del core */

/* impaginazione a due colonne per gli archivi con barra laterale */

.dr-with-sidebar {
	display: flex;
	flex-wrap: wrap;
	gap: clamp(18px, 2vw, 28px);
	align-items: flex-start;
}

.dr-with-sidebar-main {
	flex: 3 1 420px;
	min-width: 0;
}

.dr-with-sidebar-aside {
	flex: 1 1 250px;
	min-width: 0;
	display: grid;
	gap: var(--dr-sp-4);
}

.dr-widget {
	padding: 18px 20px;
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	box-shadow: var(--dr-glass-hi);
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
	font-size: 14px;
	color: var(--dr-muted);
}

.dr-widget-title {
	margin: 0 0 12px;
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: var(--dr-label);
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--dr-dim);
}

.dr-widget ul {
	margin: 0;
	padding: 0;
	list-style: none;
	display: grid;
	gap: var(--dr-sp-2);
}

.dr-widget li a {
	color: var(--dr-text);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: border-color var(--dr-t) var(--dr-ease);
}

.dr-widget li a:hover {
	border-bottom-color: var(--dr-accent);
}

.dr-footer-widgets {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: var(--dr-sp-4);
	margin-top: clamp(24px, 3vw, 40px);
}

/* stili di blocco registrati dal tema */

.wp-block-group.is-style-dr-glass,
.wp-block-columns.is-style-dr-glass {
	padding: clamp(20px, 3vw, 36px);
	border-radius: var(--dr-radius);
	border: 1px solid var(--dr-line);
	background: var(--dr-panel);
	box-shadow: var(--dr-glass-hi);
	-webkit-backdrop-filter: var(--dr-blur);
	backdrop-filter: var(--dr-blur);
}

.wp-block-button.is-style-dr-outline .wp-block-button__link {
	background: transparent;
	border: 1px solid var(--dr-line-strong);
	color: var(--dr-text);
}

.wp-block-quote.is-style-dr-terminal {
	margin: 26px 0;
	padding: 20px 22px;
	border: 1px solid var(--dr-line);
	border-left: 3px solid var(--dr-accent);
	border-radius: var(--dr-r-sm);
	background: oklch(var(--dr-deep) / 0.5);
	font-family: 'JetBrains Mono', ui-monospace, monospace;
	font-size: 13px;
	line-height: 1.8;
}

.wp-block-image.is-style-dr-frame img {
	border-radius: var(--dr-r-card);
	border: 1px solid var(--dr-line);
	box-shadow: var(--dr-glass-hi);
}

.wp-block-list.is-style-dr-check {
	list-style: none;
	padding-left: 0;
}

.wp-block-list.is-style-dr-check li {
	position: relative;
	padding-left: 26px;
}

.wp-block-list.is-style-dr-check li::before {
	content: '';
	position: absolute;
	left: 2px;
	top: 0.6em;
	width: 9px;
	height: 9px;
	border-radius: 3px;
	background: var(--dr-grad);
}

@media (max-width: 900px) {
	.dr-with-sidebar-aside {
		flex-basis: 100%;
	}
}

/* ============================================== cassetti laterali (telefono) */

.dr-scrim,
.dr-drawer,
.dr-drawer-head,
.dr-drawer-close {
	display: none;
}

@media (max-width: 900px) {
	.dr-scrim {
		display: block;
		position: fixed;
		inset: 0;
		z-index: 70;
		background: oklch(var(--dr-deep) / 0.66);
		-webkit-backdrop-filter: blur(4px);
		backdrop-filter: blur(4px);
		opacity: 0;
		transition: opacity var(--dr-t) var(--dr-ease);
	}

	.dr-scrim[hidden] {
		display: none;
	}

	.dr-scrim.is-open {
		opacity: 1;
	}

	/*
	 * Profilo e Altro escono da sinistra invece di stare in fondo alla pagina.
	 * La superficie deve essere PIENA: con il vetro semitrasparente del resto
	 * del tema si leggeva la pagina attraverso il pannello.
	 */
	[data-dr-drawer-panel] {
		display: flex;
		flex-direction: column;
		position: fixed;
		z-index: 80;
		top: 0;
		left: 0;
		width: min(88vw, 392px);
		max-width: none;
		height: 100dvh;
		max-height: none;
		margin: 0;
		padding: 0;
		border: 0;
		border-right: 1px solid var(--dr-line);
		border-radius: 0 24px 24px 0;
		background: var(--dr-surface);
		overflow: hidden;
		transform: translateX(-102%);
		visibility: hidden;
		transition: transform var(--dr-t-slow) var(--dr-ease), visibility var(--dr-t-slow);
	}

	[data-dr-drawer-panel][hidden] {
		display: flex;
	}

	[data-dr-drawer-panel].is-open {
		transform: none;
		visibility: visible;
		box-shadow: 34px 0 80px oklch(var(--dr-deep) / 0.6);
	}

	/* intestazione fissa in cima, il resto scorre sotto */
	.dr-drawer-head {
		flex: 0 0 auto;
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: var(--dr-sp-4);
		padding: 16px 18px;
		border-bottom: 1px solid var(--dr-line);
		background: oklch(var(--dr-ink) / 0.04);
		font-family: 'JetBrains Mono', ui-monospace, monospace;
		font-size: var(--dr-label);
		letter-spacing: 0.2em;
		color: var(--dr-dim);
	}

	.dr-drawer-close {
		display: grid;
		place-items: center;
		flex: 0 0 auto;
		width: 40px;
		height: 40px;
		border-radius: var(--dr-r-pill);
		border: 1px solid var(--dr-line);
		background: var(--dr-glass);
		color: var(--dr-text);
		cursor: pointer;
	}

	.dr-drawer-close .dr-icon {
		width: 13px;
		height: 13px;
	}

	/* il corpo e l'unica parte che scorre */
	.dr-drawer-body,
	[data-dr-drawer-panel] > *:not(.dr-drawer-head) {
		min-height: 0;
	}

	.dr-drawer-body {
		flex: 1 1 auto;
		overflow-y: auto;
		overscroll-behavior: contain;
		-webkit-overflow-scrolling: touch;
		padding: 18px 18px calc(20px + env(safe-area-inset-bottom, 0px));
		display: flex;
		flex-direction: column;
		gap: var(--dr-sp-2);
	}

	/* la colonna profilo diventa il corpo del suo cassetto */
	.dr-rail[data-dr-drawer-panel] {
		padding: 0;
	}

	.dr-rail[data-dr-drawer-panel] > .dr-rail-body {
		flex: 1 1 auto;
		min-height: 0;
		overflow-y: auto;
		overscroll-behavior: contain;
		-webkit-overflow-scrolling: touch;
		padding: 18px 18px calc(20px + env(safe-area-inset-bottom, 0px));
	}

	.dr-drawer-label {
		margin: 10px 0 2px;
		padding-bottom: 8px;
		border-bottom: 1px solid var(--dr-line);
		font-family: 'JetBrains Mono', ui-monospace, monospace;
		font-size: var(--dr-label-sm);
		letter-spacing: 0.2em;
		color: var(--dr-dim);
	}

	.dr-drawer-label:first-child {
		margin-top: 0;
	}

	.dr-drawer-row {
		display: grid;
		gap: var(--dr-sp-1);
	}

	/*
	 * .dr-dock-chip nasce con flex: 1 1 auto per la dock, che e una riga.
	 * Dentro il cassetto il contenitore e una colonna: la stessa regola lo
	 * faceva crescere in ALTEZZA fino a diventare un ovale enorme.
	 */
	.dr-drawer .dr-dock-chip {
		flex: 0 0 auto;
		width: 100%;
		min-height: var(--dr-ctrl-lg);
	}

	/* ricerca: campo e tasto sulla stessa riga */
	.dr-drawer .search-form {
		display: grid;
		grid-template-columns: 1fr auto;
		gap: var(--dr-sp-1);
		margin-top: 4px;
	}

	.dr-drawer .search-form label {
		display: none;
	}

	.dr-drawer .search-form .search-field {
		min-height: var(--dr-ctrl-lg);
	}

	.dr-drawer .search-form .search-submit {
		min-height: var(--dr-ctrl-lg);
		padding: 0 18px;
	}

	body.dr-drawer-aperto {
		overflow: hidden;
	}

	/*
	 * .dr-app ha z-index 2 e crea un contesto di impilamento: dentro di lui il
	 * cassetto non poteva superare il velo, che sta fuori.
	 */
	body.dr-drawer-aperto .dr-app {
		z-index: auto;
	}

	body.dr-anim-ridotte [data-dr-drawer-panel],
	body.dr-anim-ridotte .dr-scrim {
		transition: none;
	}
}
