/*!
 * NS Portfolio, refonte du thème (v1.2) : chargement réseau, en-tête console, menu de gauche
 * façon fiche d'équipement, fond et cartes bleu nuit. Sombre par défaut, clair avec .light-mode.
 */

/* ---------- Palette sombre unifiée ---------- */
body:not(.light-mode) {
	--nst-bg: #0c1322;
	--nst-surface: #131c2e;
	--nst-surface-2: #172238;
	--nst-line: rgba(56, 214, 255, .14);
	--nst-ink: #eaf3ff;
	--nst-soft: rgba(220, 235, 255, .62);
}
body.light-mode {
	--nst-bg: #f6f4ee;
	--nst-surface: #ffffff;
	--nst-surface-2: #fbfaf6;
	--nst-line: rgba(15, 35, 70, .10);
	--nst-ink: #1a1a1a;
	--nst-soft: rgba(26, 26, 26, .62);
}
html.ns-design body:not(.light-mode),
body:not(.light-mode) .art-app,
body:not(.light-mode) .art-app-container,
body:not(.light-mode) .art-content { background-color: var(--nst-bg) !important; }
body:not(.light-mode) .art-a.art-card,
body:not(.light-mode) .art-a.art-service-icon-box,
body:not(.light-mode) .art-a.art-blog-card,
body:not(.light-mode) .art-a.art-price,
body:not(.light-mode) .art-a.art-testimonial {
	background-color: var(--nst-surface) !important;
	border: 1px solid var(--nst-line);
	box-shadow: 0 24px 60px -36px rgba(0, 0, 0, .8);
}
.art-a.art-card, .art-a.art-service-icon-box, .art-a.art-blog-card { border-radius: 14px; }
body.light-mode .art-a.art-card,
body.light-mode .art-a.art-service-icon-box,
body.light-mode .art-a.art-blog-card { border: 1px solid var(--nst-line); box-shadow: 0 18px 40px -30px rgba(15, 35, 70, .35); }

/* ---------- 1. Chargement : séquence de démarrage réseau ---------- */
.art-preloader,
.admin-bar .art-preloader {
	margin: 0 !important;
	top: 0 !important;
	left: 0 !important;
	position: fixed !important;
	inset: 0 !important;
	width: 100vw !important;
	height: 100vh !important;
	border-radius: 0 !important;
	z-index: 2147483000 !important;
	background:
		linear-gradient(rgba(56, 214, 255, .06) 1px, transparent 1px),
		linear-gradient(90deg, rgba(56, 214, 255, .06) 1px, transparent 1px),
		radial-gradient(700px 360px at 50% 40%, rgba(56, 214, 255, .14), transparent 70%),
		#0b1220 !important;
	background-size: 32px 32px, 32px 32px, auto, auto !important;
}
.art-preloader .art-preloader-content { display: flex; flex-direction: column; align-items: center; }
.art-preloader .art-preloader-content::before {
	content: "";
	display: block;
	width: 820px;
	max-width: 92vw;
	height: 410px;
	max-height: 48vh;
	margin-bottom: 26px;
	background: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20460%20230%22%3E%3Cpath%20id%3D%22l0%22%20d%3D%22M50%20120%20L170%20120%22%20stroke%3D%22%2338d6ff%22%20stroke-opacity%3D%22.55%22%20stroke-width%3D%222%22%20fill%3D%22none%22%20stroke-dasharray%3D%22120%22%20stroke-dashoffset%3D%22120%22%3E%3Canimate%20attributeName%3D%22stroke-dashoffset%22%20from%3D%22120%22%20to%3D%220%22%20begin%3D%220.35s%22%20dur%3D%22.35s%22%20fill%3D%22freeze%22/%3E%3C/path%3E%3Cpath%20id%3D%22l1%22%20d%3D%22M170%20120%20L290%2060%22%20stroke%3D%22%2338d6ff%22%20stroke-opacity%3D%22.55%22%20stroke-width%3D%222%22%20fill%3D%22none%22%20stroke-dasharray%3D%22134%22%20stroke-dashoffset%3D%22134%22%3E%3Canimate%20attributeName%3D%22stroke-dashoffset%22%20from%3D%22134%22%20to%3D%220%22%20begin%3D%220.65s%22%20dur%3D%22.35s%22%20fill%3D%22freeze%22/%3E%3C/path%3E%3Cpath%20id%3D%22l2%22%20d%3D%22M290%2060%20L410%2060%22%20stroke%3D%22%2338d6ff%22%20stroke-opacity%3D%22.55%22%20stroke-width%3D%222%22%20fill%3D%22none%22%20stroke-dasharray%3D%22120%22%20stroke-dashoffset%3D%22120%22%3E%3Canimate%20attributeName%3D%22stroke-dashoffset%22%20from%3D%22120%22%20to%3D%220%22%20begin%3D%220.95s%22%20dur%3D%22.35s%22%20fill%3D%22freeze%22/%3E%3C/path%3E%3Cpath%20id%3D%22l3%22%20d%3D%22M170%20120%20L290%20180%22%20stroke%3D%22%2338d6ff%22%20stroke-opacity%3D%22.55%22%20stroke-width%3D%222%22%20fill%3D%22none%22%20stroke-dasharray%3D%22134%22%20stroke-dashoffset%3D%22134%22%3E%3Canimate%20attributeName%3D%22stroke-dashoffset%22%20from%3D%22134%22%20to%3D%220%22%20begin%3D%220.8s%22%20dur%3D%22.35s%22%20fill%3D%22freeze%22/%3E%3C/path%3E%3Cpath%20id%3D%22l5%22%20d%3D%22M410%20100%20L410%20161%22%20stroke%3D%22%2338d6ff%22%20stroke-opacity%3D%22.55%22%20stroke-width%3D%222%22%20fill%3D%22none%22%20stroke-dasharray%3D%2261%22%20stroke-dashoffset%3D%2261%22%3E%3Canimate%20attributeName%3D%22stroke-dashoffset%22%20from%3D%2261%22%20to%3D%220%22%20begin%3D%221.25s%22%20dur%3D%22.35s%22%20fill%3D%22freeze%22/%3E%3C/path%3E%3Ccircle%20r%3D%223.6%22%20stroke%3D%22%23ffc107%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%225.8%22%20fill%3D%22%23ffc107%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%221.7s%22/%3E%3CanimateMotion%20dur%3D%221.1s%22%20begin%3D%221.7s%22%20repeatCount%3D%22indefinite%22%3E%3Cmpath%20href%3D%22%23l0%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%222.6%22%20stroke%3D%22%238ff0ff%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%224.2%22%20fill%3D%22%238ff0ff%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%222.2s%22/%3E%3CanimateMotion%20dur%3D%221.1s%22%20begin%3D%222.2s%22%20repeatCount%3D%22indefinite%22%20keyPoints%3D%221%3B0%22%20keyTimes%3D%220%3B1%22%20calcMode%3D%22linear%22%3E%3Cmpath%20href%3D%22%23l0%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%223.6%22%20stroke%3D%22%23ffc107%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%225.8%22%20fill%3D%22%23ffc107%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%221.88s%22/%3E%3CanimateMotion%20dur%3D%221.35s%22%20begin%3D%221.88s%22%20repeatCount%3D%22indefinite%22%3E%3Cmpath%20href%3D%22%23l1%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%222.6%22%20stroke%3D%22%238ff0ff%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%224.2%22%20fill%3D%22%238ff0ff%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%222.38s%22/%3E%3CanimateMotion%20dur%3D%221.35s%22%20begin%3D%222.38s%22%20repeatCount%3D%22indefinite%22%20keyPoints%3D%221%3B0%22%20keyTimes%3D%220%3B1%22%20calcMode%3D%22linear%22%3E%3Cmpath%20href%3D%22%23l1%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%223.6%22%20stroke%3D%22%23ffc107%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%225.8%22%20fill%3D%22%23ffc107%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%222.06s%22/%3E%3CanimateMotion%20dur%3D%221.6s%22%20begin%3D%222.06s%22%20repeatCount%3D%22indefinite%22%3E%3Cmpath%20href%3D%22%23l2%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%222.6%22%20stroke%3D%22%238ff0ff%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%224.2%22%20fill%3D%22%238ff0ff%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%222.56s%22/%3E%3CanimateMotion%20dur%3D%221.6s%22%20begin%3D%222.56s%22%20repeatCount%3D%22indefinite%22%20keyPoints%3D%221%3B0%22%20keyTimes%3D%220%3B1%22%20calcMode%3D%22linear%22%3E%3Cmpath%20href%3D%22%23l2%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%223.6%22%20stroke%3D%22%23ffc107%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%225.8%22%20fill%3D%22%23ffc107%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%222.24s%22/%3E%3CanimateMotion%20dur%3D%221.1s%22%20begin%3D%222.24s%22%20repeatCount%3D%22indefinite%22%3E%3Cmpath%20href%3D%22%23l3%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%222.6%22%20stroke%3D%22%238ff0ff%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%224.2%22%20fill%3D%22%238ff0ff%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%222.74s%22/%3E%3CanimateMotion%20dur%3D%221.1s%22%20begin%3D%222.74s%22%20repeatCount%3D%22indefinite%22%20keyPoints%3D%221%3B0%22%20keyTimes%3D%220%3B1%22%20calcMode%3D%22linear%22%3E%3Cmpath%20href%3D%22%23l3%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%223.6%22%20stroke%3D%22%23ffc107%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%225.8%22%20fill%3D%22%23ffc107%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%222.6s%22/%3E%3CanimateMotion%20dur%3D%221.6s%22%20begin%3D%222.6s%22%20repeatCount%3D%22indefinite%22%3E%3Cmpath%20href%3D%22%23l5%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Ccircle%20r%3D%222.6%22%20stroke%3D%22%238ff0ff%22%20stroke-opacity%3D%22.35%22%20stroke-width%3D%224.2%22%20fill%3D%22%238ff0ff%22%20opacity%3D%220%22%3E%3Cset%20attributeName%3D%22opacity%22%20to%3D%221%22%20begin%3D%223.1s%22/%3E%3CanimateMotion%20dur%3D%221.6s%22%20begin%3D%223.1s%22%20repeatCount%3D%22indefinite%22%20keyPoints%3D%221%3B0%22%20keyTimes%3D%220%3B1%22%20calcMode%3D%22linear%22%3E%3Cmpath%20href%3D%22%23l5%22/%3E%3C/animateMotion%3E%3C/circle%3E%3Cg%20transform%3D%22translate%2850%20120%29%22%3E%3Cg%20opacity%3D%220%22%20transform%3D%22scale%28.2%29%22%3E%3Canimate%20attributeName%3D%22opacity%22%20from%3D%220%22%20to%3D%221%22%20begin%3D%220.0s%22%20dur%3D%22.3s%22%20fill%3D%22freeze%22/%3E%3CanimateTransform%20attributeName%3D%22transform%22%20type%3D%22scale%22%20values%3D%22.2%3B1.15%3B1%22%20keyTimes%3D%220%3B.7%3B1%22%20begin%3D%220.0s%22%20dur%3D%22.4s%22%20fill%3D%22freeze%22/%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22%230b1220%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%222%22/%3E%3Cpath%20d%3D%22M-8%20-6h16v10h-16z%20M-4%207h8%22%20fill%3D%22none%22%20stroke%3D%22%23e8f6ff%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22/%3E%3Ctext%20y%3D%2234%22%20text-anchor%3D%22middle%22%20font-family%3D%22Consolas%2CMenlo%2Cmonospace%22%20font-size%3D%2210.5%22%20fill%3D%22rgba%28232%2C246%2C255%2C.75%29%22%3EPoste%3C/text%3E%3C/g%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22none%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%221.5%22%20opacity%3D%220%22%3E%3Canimate%20attributeName%3D%22r%22%20values%3D%2219%3B30%22%20begin%3D%220.0s%22%20dur%3D%22.6s%22/%3E%3Canimate%20attributeName%3D%22opacity%22%20values%3D%22.9%3B0%22%20begin%3D%220.0s%22%20dur%3D%22.6s%22/%3E%3C/circle%3E%3C/g%3E%3Cg%20transform%3D%22translate%28170%20120%29%22%3E%3Cg%20opacity%3D%220%22%20transform%3D%22scale%28.2%29%22%3E%3Canimate%20attributeName%3D%22opacity%22%20from%3D%220%22%20to%3D%221%22%20begin%3D%220.25s%22%20dur%3D%22.3s%22%20fill%3D%22freeze%22/%3E%3CanimateTransform%20attributeName%3D%22transform%22%20type%3D%22scale%22%20values%3D%22.2%3B1.15%3B1%22%20keyTimes%3D%220%3B.7%3B1%22%20begin%3D%220.25s%22%20dur%3D%22.4s%22%20fill%3D%22freeze%22/%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22%230b1220%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%222%22/%3E%3Cpath%20d%3D%22M-10%20-4h20v8h-20z%20M-6%200h1%20M-2%200h1%20M2%200h1%20M6%200h1%22%20fill%3D%22none%22%20stroke%3D%22%23e8f6ff%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22/%3E%3Ctext%20y%3D%2234%22%20text-anchor%3D%22middle%22%20font-family%3D%22Consolas%2CMenlo%2Cmonospace%22%20font-size%3D%2210.5%22%20fill%3D%22rgba%28232%2C246%2C255%2C.75%29%22%3ESwitch%3C/text%3E%3C/g%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22none%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%221.5%22%20opacity%3D%220%22%3E%3Canimate%20attributeName%3D%22r%22%20values%3D%2219%3B30%22%20begin%3D%220.25s%22%20dur%3D%22.6s%22/%3E%3Canimate%20attributeName%3D%22opacity%22%20values%3D%22.9%3B0%22%20begin%3D%220.25s%22%20dur%3D%22.6s%22/%3E%3C/circle%3E%3C/g%3E%3Cg%20transform%3D%22translate%28290%2060%29%22%3E%3Cg%20opacity%3D%220%22%20transform%3D%22scale%28.2%29%22%3E%3Canimate%20attributeName%3D%22opacity%22%20from%3D%220%22%20to%3D%221%22%20begin%3D%220.55s%22%20dur%3D%22.3s%22%20fill%3D%22freeze%22/%3E%3CanimateTransform%20attributeName%3D%22transform%22%20type%3D%22scale%22%20values%3D%22.2%3B1.15%3B1%22%20keyTimes%3D%220%3B.7%3B1%22%20begin%3D%220.55s%22%20dur%3D%22.4s%22%20fill%3D%22freeze%22/%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22%230b1220%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%222%22/%3E%3Cpath%20d%3D%22M0%20-8a8%208%200%201%200%20.01%200%20M-5%200h10%20M0%20-5v10%22%20fill%3D%22none%22%20stroke%3D%22%23e8f6ff%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22/%3E%3Ctext%20y%3D%2234%22%20text-anchor%3D%22middle%22%20font-family%3D%22Consolas%2CMenlo%2Cmonospace%22%20font-size%3D%2210.5%22%20fill%3D%22rgba%28232%2C246%2C255%2C.75%29%22%3ERouteur%3C/text%3E%3C/g%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22none%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%221.5%22%20opacity%3D%220%22%3E%3Canimate%20attributeName%3D%22r%22%20values%3D%2219%3B30%22%20begin%3D%220.55s%22%20dur%3D%22.6s%22/%3E%3Canimate%20attributeName%3D%22opacity%22%20values%3D%22.9%3B0%22%20begin%3D%220.55s%22%20dur%3D%22.6s%22/%3E%3C/circle%3E%3C/g%3E%3Cg%20transform%3D%22translate%28290%20180%29%22%3E%3Cg%20opacity%3D%220%22%20transform%3D%22scale%28.2%29%22%3E%3Canimate%20attributeName%3D%22opacity%22%20from%3D%220%22%20to%3D%221%22%20begin%3D%220.7s%22%20dur%3D%22.3s%22%20fill%3D%22freeze%22/%3E%3CanimateTransform%20attributeName%3D%22transform%22%20type%3D%22scale%22%20values%3D%22.2%3B1.15%3B1%22%20keyTimes%3D%220%3B.7%3B1%22%20begin%3D%220.7s%22%20dur%3D%22.4s%22%20fill%3D%22freeze%22/%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22%230b1220%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%222%22/%3E%3Cpath%20d%3D%22M-7%20-9h14v6h-14z%20M-7%20-1h14v6h-14z%20M3%20-6h1%20M3%202h1%22%20fill%3D%22none%22%20stroke%3D%22%23e8f6ff%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22/%3E%3Ctext%20y%3D%2234%22%20text-anchor%3D%22middle%22%20font-family%3D%22Consolas%2CMenlo%2Cmonospace%22%20font-size%3D%2210.5%22%20fill%3D%22rgba%28232%2C246%2C255%2C.75%29%22%3EServeur%3C/text%3E%3C/g%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22none%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%221.5%22%20opacity%3D%220%22%3E%3Canimate%20attributeName%3D%22r%22%20values%3D%2219%3B30%22%20begin%3D%220.7s%22%20dur%3D%22.6s%22/%3E%3Canimate%20attributeName%3D%22opacity%22%20values%3D%22.9%3B0%22%20begin%3D%220.7s%22%20dur%3D%22.6s%22/%3E%3C/circle%3E%3C/g%3E%3Cg%20transform%3D%22translate%28410%2060%29%22%3E%3Cg%20opacity%3D%220%22%20transform%3D%22scale%28.2%29%22%3E%3Canimate%20attributeName%3D%22opacity%22%20from%3D%220%22%20to%3D%221%22%20begin%3D%220.85s%22%20dur%3D%22.3s%22%20fill%3D%22freeze%22/%3E%3CanimateTransform%20attributeName%3D%22transform%22%20type%3D%22scale%22%20values%3D%22.2%3B1.15%3B1%22%20keyTimes%3D%220%3B.7%3B1%22%20begin%3D%220.85s%22%20dur%3D%22.4s%22%20fill%3D%22freeze%22/%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22%230b1220%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%222%22/%3E%3Cpath%20d%3D%22M-8%20-7h16v14h-16z%20M-8%20-2h16%20M-8%203h16%20M-2%20-7v5%20M3%20-2v5%22%20fill%3D%22none%22%20stroke%3D%22%23e8f6ff%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22/%3E%3Ctext%20y%3D%2234%22%20text-anchor%3D%22middle%22%20font-family%3D%22Consolas%2CMenlo%2Cmonospace%22%20font-size%3D%2210.5%22%20fill%3D%22rgba%28232%2C246%2C255%2C.75%29%22%3EPare-feu%3C/text%3E%3C/g%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22none%22%20stroke%3D%22%2338d6ff%22%20stroke-width%3D%221.5%22%20opacity%3D%220%22%3E%3Canimate%20attributeName%3D%22r%22%20values%3D%2219%3B30%22%20begin%3D%220.85s%22%20dur%3D%22.6s%22/%3E%3Canimate%20attributeName%3D%22opacity%22%20values%3D%22.9%3B0%22%20begin%3D%220.85s%22%20dur%3D%22.6s%22/%3E%3C/circle%3E%3C/g%3E%3Cg%20transform%3D%22translate%28410%20180%29%22%3E%3Cg%20opacity%3D%220%22%20transform%3D%22scale%28.2%29%22%3E%3Canimate%20attributeName%3D%22opacity%22%20from%3D%220%22%20to%3D%221%22%20begin%3D%221.0s%22%20dur%3D%22.3s%22%20fill%3D%22freeze%22/%3E%3CanimateTransform%20attributeName%3D%22transform%22%20type%3D%22scale%22%20values%3D%22.2%3B1.15%3B1%22%20keyTimes%3D%220%3B.7%3B1%22%20begin%3D%221.0s%22%20dur%3D%22.4s%22%20fill%3D%22freeze%22/%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22%230b1220%22%20stroke%3D%22%23ffc107%22%20stroke-width%3D%222%22/%3E%3Cpath%20d%3D%22M-8%20-8h16v16h-16z%20M-5%204v-8l5%205l5%20-5v8%22%20fill%3D%22none%22%20stroke%3D%22%23ffd24d%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22/%3E%3Ctext%20y%3D%2234%22%20text-anchor%3D%22middle%22%20font-family%3D%22Consolas%2CMenlo%2Cmonospace%22%20font-size%3D%2210.5%22%20fill%3D%22rgba%28232%2C246%2C255%2C.75%29%22%3EMCP%3C/text%3E%3C/g%3E%3Ccircle%20r%3D%2219%22%20fill%3D%22none%22%20stroke%3D%22%23ffc107%22%20stroke-width%3D%221.5%22%20opacity%3D%220%22%3E%3Canimate%20attributeName%3D%22r%22%20values%3D%2219%3B30%22%20begin%3D%221.0s%22%20dur%3D%22.6s%22/%3E%3Canimate%20attributeName%3D%22opacity%22%20values%3D%22.9%3B0%22%20begin%3D%221.0s%22%20dur%3D%22.6s%22/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E") center / contain no-repeat;
}
.art-preloader h4 { margin: 0 0 18px !important; }
.art-preloader h4::before {
	content: "nans@salvianans:~$ ping salvianans.fr";
	font: 600 21px/1.4 "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
	color: rgba(232, 246, 255, .85);
	letter-spacing: .01em;
}
.art-preloader .art-preloader-load svg path:first-child { stroke: rgba(56, 214, 255, .18) !important; }
.art-preloader .art-preloader-load svg path:last-child { stroke: #ffc107 !important; }
.art-preloader .art-preloader-load { position: relative !important; }
.art-preloader .art-preloader-load .progressbar-text {
	position: static !important;
	transform: none !important;
	margin: 14px 0 0 !important;
	text-align: center;
	white-space: nowrap;
}
.art-preloader .progressbar-text {
	font: 600 13px/1.4 "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace !important;
	color: #3ddc84 !important;
	letter-spacing: .04em;
}
.art-preloader .progressbar-text::before { content: "64 bytes · transfert "; color: rgba(220, 235, 255, .55); }

/* ---------- 2. En-tête : barre console en verre dépoli ---------- */
html body:not(.light-mode) .art-horizontal-menu,
.art-horizontal-menu {
	background: rgba(11, 18, 32, .78) !important;
	backdrop-filter: blur(14px) saturate(140%);
	-webkit-backdrop-filter: blur(14px) saturate(140%);
	border-bottom: 1px solid var(--nst-line);
}
html body.light-mode .art-horizontal-menu { background: rgba(255, 255, 255, .82) !important; }
.art-horizontal-menu::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: -1px;
	height: 1px;
	background: linear-gradient(90deg, transparent, rgba(255, 193, 7, .7), rgba(56, 214, 255, .7), transparent);
	pointer-events: none;
}
.art-horizontal-menu::before {
	content: "● nans@salvianans";
	position: absolute;
	left: 26px;
	top: 50%;
	transform: translateY(-50%);
	font: 600 12.5px/1 "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
	color: #3ddc84;
	letter-spacing: .02em;
	pointer-events: none;
}
@media (max-width: 1500px) { .art-horizontal-menu::before { display: none; } }
html.ns-design .horizontal-menu-list > li > a { letter-spacing: .01em; transition: color .2s; }
body:not(.light-mode) .horizontal-menu-list > li > a { color: rgba(232, 243, 255, .82) !important; }
body:not(.light-mode) .horizontal-menu-list > li > a:hover,
body:not(.light-mode) .horizontal-menu-list > li.current-menu-item > a,
body:not(.light-mode) .horizontal-menu-list > li.current-menu-ancestor > a { color: #fff !important; }
.horizontal-menu-list .sub-menu {
	border-radius: 12px !important;
	border: 1px solid var(--nst-line) !important;
	overflow: hidden;
	box-shadow: 0 24px 60px -24px rgba(0, 0, 0, .7) !important;
}
body:not(.light-mode) .horizontal-menu-list .sub-menu { background: rgba(13, 21, 36, .96) !important; backdrop-filter: blur(12px); }
body:not(.light-mode) .horizontal-menu-list .sub-menu a { color: rgba(232, 243, 255, .85) !important; }
body:not(.light-mode) .horizontal-menu-list .sub-menu a:hover { color: #ffc107 !important; background: rgba(56, 214, 255, .06) !important; }

/* ---------- 3. Menu de gauche : fiche d'équipement ---------- */
body:not(.light-mode) .art-info-bar {
	background:
		linear-gradient(rgba(56, 214, 255, .045) 1px, transparent 1px),
		linear-gradient(90deg, rgba(56, 214, 255, .045) 1px, transparent 1px),
		linear-gradient(180deg, #111a2c, #0d1526) !important;
	background-size: 24px 24px, 24px 24px, auto !important;
	border-right: 1px solid var(--nst-line);
}
body:not(.light-mode) .art-info-bar .art-header { background: linear-gradient(180deg, rgba(56, 214, 255, .08), transparent) !important; }
.art-info-bar .art-sm-text.ns-filled {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin-top: 4px;
	padding: 4px 12px;
	border-radius: 999px;
	font: 600 10.5px/1.4 "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
	white-space: nowrap;
	color: #3ddc84 !important;
	border: 1px solid rgba(61, 220, 132, .4);
	background: rgba(61, 220, 132, .08);
}
.art-info-bar .art-sm-text.ns-filled::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #3ddc84; box-shadow: 0 0 8px #3ddc84; animation: nsd-blinkled 2.4s steps(2, jump-none) infinite; }
.art-info-bar .art-table li {
	border-bottom: 1px dashed var(--nst-line) !important;
	padding: 7px 0 !important;
	margin: 0 !important;
}
.art-info-bar .art-table li h6 {
	font: 600 11px/1.5 "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace !important;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--nst-soft) !important;
}
.art-info-bar .art-table li span { font-weight: 600; color: var(--nst-ink) !important; }
.art-info-bar .art-title-h {
	font: 700 11.5px/1.5 "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace !important;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: #ffc107 !important;
}
.art-info-bar .art-title-h::before { content: "// "; color: #38d6ff; }
.art-info-bar .art-ls-divider { background: linear-gradient(90deg, transparent, var(--nst-line), transparent) !important; }
.art-info-bar .art-lang-skills-item h6,
.art-info-bar .art-hard-skills-item h6 { font-weight: 600 !important; color: var(--nst-ink) !important; }
.art-info-bar .art-cirkle-progress svg path:last-child { stroke: #38d6ff !important; filter: drop-shadow(0 0 4px rgba(56, 214, 255, .55)); }
.art-info-bar .art-cirkle-progress svg path:first-child { stroke: rgba(56, 214, 255, .14) !important; }
.art-info-bar .art-line-progress svg path:last-child { stroke: #ffc107 !important; filter: drop-shadow(0 0 4px rgba(255, 193, 7, .5)); }
.art-info-bar .art-line-progress svg path:first-child { stroke: rgba(56, 214, 255, .12) !important; }
.art-info-bar .progressbar-text { font-family: "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace !important; }
body:not(.light-mode) .art-info-bar .art-ls-social a { color: rgba(232, 243, 255, .75) !important; }
body:not(.light-mode) .art-info-bar .art-ls-social a:hover { color: #ffc107 !important; }

/* Fonds gris posés par l'ancien CSS sur des éléments internes : alignés sur la palette */
body:not(.light-mode) .art-horizontal-menu nav,
body:not(.light-mode) .art-horizontal-menu .horizontal-menu-list { background: transparent !important; }
body:not(.light-mode) .art-info-bar .art-info-bar-frame,
body:not(.light-mode) .art-info-bar .art-scroll-frame { background: transparent !important; }
body:not(.light-mode) .art-info-bar .art-header {
	background: linear-gradient(180deg, rgba(56, 214, 255, .10), rgba(19, 28, 46, .9)) !important;
	border-bottom: 1px solid var(--nst-line);
}

/* Compétences IA & gestion de projet (menu de gauche) */
.ns-skills { padding: 0 15px 20px; }
.ns-skills .art-title-h { margin: 22px 0 14px !important; }
.ns-skills-list { display: grid; gap: 12px; }
.ns-skill-h { display: flex; justify-content: space-between; gap: 10px; font-size: 12.5px; line-height: 1.35; color: var(--nst-ink); margin-bottom: 6px; }
.ns-skill-h span { font-weight: 600; }
.ns-skill-h b { font: 600 11.5px "JetBrains Mono", ui-monospace, Consolas, monospace; color: var(--nst-soft); white-space: nowrap; }
.ns-skill-bar { height: 4px; border-radius: 4px; background: rgba(56, 214, 255, .12); overflow: hidden; }
.ns-skill-bar i { display: block; height: 100%; width: 0; border-radius: 4px; background: linear-gradient(90deg, #38d6ff, #ffc107); box-shadow: 0 0 8px rgba(56, 214, 255, .5); transition: width 1.2s cubic-bezier(.2, .8, .2, 1); }
.ns-skill-bar i.on { width: var(--v); }
.ns-skills .ns-skills-note { margin: 12px 0 0 !important; font: 500 10.5px "JetBrains Mono", ui-monospace, Consolas, monospace; color: var(--nst-soft) !important; }

/* Pendant le chargement, le fond de la page reste sombre (aucun bord clair autour) */
html:has(.art-preloader:not([style*="none"])),
html:has(.art-preloader:not([style*="none"])) body { background: #0b1220 !important; }

/* =====================================================================
   v1.3 : polices, fond, survol glitch, fenêtres terminal, vignettes
   ===================================================================== */
@font-face { font-family: "Space Grotesk"; font-weight: 500; font-display: swap; src: url("fonts/space-grotesk-latin-500-normal.woff2") format("woff2"); }
@font-face { font-family: "Space Grotesk"; font-weight: 700; font-display: swap; src: url("fonts/space-grotesk-latin-700-normal.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-weight: 400; font-display: swap; src: url("fonts/jetbrains-mono-latin-400-normal.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-weight: 600; font-display: swap; src: url("fonts/jetbrains-mono-latin-600-normal.woff2") format("woff2"); }

/* Titres en Space Grotesk (le texte courant reste en Poppins, très lisible) */
html.ns-design h1, html.ns-design h2, html.ns-design h3, html.ns-design h4, html.ns-design h5,
html.ns-design .art-name, html.ns-design .nse-title, html.ns-design .ns2-title, html.ns-design .ns3-t {
	font-family: "Space Grotesk", Poppins, sans-serif !important;
	letter-spacing: -.01em;
}
html.ns-design .art-banner-title-h { font-family: "Space Grotesk", Poppins, sans-serif !important; letter-spacing: -.02em; -webkit-text-stroke: 0 !important; }
body { --nsd-mono: "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace; }

/* Fond : on redéfinit les variables de l'ancien CSS, quel que soit l'ordre de chargement */
html body:not(.light-mode) {
	--bg-dark-primary: #0c1322;
	--bg-dark-card: #131c2e;
	background-color: #0c1322 !important;
}
html body:not(.light-mode) .art-app,
html body:not(.light-mode) .art-app-container,
html body:not(.light-mode) .art-content,
html body:not(.light-mode) .art-top-bg + * { background-color: #0c1322 !important; }
html body:not(.light-mode) .art-info-bar { background-color: #0f1828 !important; }
html body:not(.light-mode) .art-a.art-card,
html body:not(.light-mode) .art-a.art-service-icon-box,
html body:not(.light-mode) .art-a.art-blog-card { background-color: #131c2e !important; }

/* Menu : plus de pavé jaune au survol, effet glitch RVB à la place */
html body .horizontal-menu-list > li > a,
html body .horizontal-menu-list > li > a:hover { background: transparent !important; }
html body:not(.light-mode) .horizontal-menu-list > li > a:hover { color: #fff !important; }
.horizontal-menu-list > li > a[data-text]::before { content: attr(data-text); position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; pointer-events: none; opacity: 0; }
.horizontal-menu-list > li > a[data-text]:hover::before {
	opacity: 1;
	color: transparent;
	text-shadow: -2px 0 rgba(56, 214, 255, .9), 2px 0 rgba(255, 193, 7, .9);
	animation: nst-glitch .45s steps(2, end) 1;
}
@keyframes nst-glitch {
	0% { clip-path: inset(10% 0 60% 0); transform: translate(-2px, 0); }
	25% { clip-path: inset(55% 0 10% 0); transform: translate(2px, 0); }
	50% { clip-path: inset(30% 0 35% 0); transform: translate(-1px, 0); }
	75% { clip-path: inset(70% 0 5% 0); transform: translate(1px, 0); }
	100% { clip-path: inset(0 0 0 0); transform: none; text-shadow: none; opacity: 0; }
}

/* Vignettes de projets : carte entière cliquable, bandeau « console » sur l'image */
.art-grid-item { padding-bottom: 28px !important; }
.art-grid-item .art-item-description { display: none !important; }
.art-grid-item .art-portfolio-item-frame.ns-card {
	position: relative; display: block; border-radius: 16px; overflow: hidden;
	border: 1px solid rgba(56, 214, 255, .22);
	box-shadow: 0 26px 60px -34px rgba(0, 0, 0, .85);
	transition: transform .35s cubic-bezier(.2, .8, .2, 1), border-color .35s, box-shadow .35s;
}
.art-grid-item .art-portfolio-item-frame.ns-card:hover { transform: translateY(-4px); border-color: rgba(255, 193, 7, .6); box-shadow: 0 30px 70px -30px rgba(0, 0, 0, .9), 0 0 0 1px rgba(255, 193, 7, .25); }
.art-grid-item .art-portfolio-item-frame.ns-card img { display: block; width: 100%; transition: transform .8s cubic-bezier(.2, .8, .2, 1), filter .4s; }
.art-grid-item .art-portfolio-item-frame.ns-card:hover img { transform: scale(1.04); filter: saturate(1.1); }
.art-grid-item .art-portfolio-item-frame.ns-card .art-item-hover { display: none !important; }
.ns-band {
	position: absolute; left: 12px; right: 12px; bottom: 12px;
	display: flex; align-items: center; gap: 14px;
	padding: 12px 14px 12px 16px; border-radius: 12px;
	background: rgba(9, 15, 27, .82);
	backdrop-filter: blur(10px) saturate(140%); -webkit-backdrop-filter: blur(10px) saturate(140%);
	border: 1px solid rgba(56, 214, 255, .28);
	box-shadow: 0 10px 30px -14px rgba(0, 0, 0, .8);
}
.ns-band::before {
	content: ""; position: absolute; left: 0; top: 10px; bottom: 10px; width: 3px; border-radius: 3px;
	background: linear-gradient(180deg, #ffc107, #38d6ff);
}
.ns-band-txt { flex: 1; min-width: 0; }
.ns-band-k { display: flex; align-items: center; gap: 7px; font: 600 10.5px/1.3 "JetBrains Mono", ui-monospace, Consolas, monospace; letter-spacing: .1em; text-transform: uppercase; color: #8ff0ff; margin-bottom: 4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ns-band-k i { width: 7px; height: 7px; border-radius: 50%; background: #3ddc84; box-shadow: 0 0 8px #3ddc84; flex: none; }
.ns-band-t { font: 700 17px/1.3 "Space Grotesk", Poppins, sans-serif; color: #fff; }
.ns-band-go {
	flex: none; display: grid; place-items: center; width: 38px; height: 38px; border-radius: 10px;
	border: 1px solid rgba(255, 193, 7, .5); color: #ffc107; font: 600 18px/1 "JetBrains Mono", monospace;
	transition: background .3s, color .3s, transform .3s;
}
.art-portfolio-item-frame.ns-card:hover .ns-band-go { background: #ffc107; color: #0b1220; transform: translateX(2px); }
@media (max-width: 600px) { .ns-band-t { font-size: 15px; } .ns-band { left: 8px; right: 8px; bottom: 8px; } }

/* Fenêtre « tableau de synthèse » (ns-sheet) : habillage console réseau */
html body .ns-sheet-window {
	border-radius: 14px !important;
	border: 1px solid rgba(56, 214, 255, .3) !important;
	background: #0b1220 !important;
	box-shadow: 0 30px 70px -36px rgba(0, 0, 0, .85), 0 0 0 1px rgba(255, 255, 255, .03) inset !important;
	overflow: hidden;
}
html body .ns-sheet-titlebar { background: #111a2b !important; border-bottom: 1px solid rgba(56, 214, 255, .18) !important; }
html body .ns-sheet-title-text { font-family: var(--nsd-mono) !important; color: rgba(232, 246, 255, .85) !important; }
html body .ns-sheet-title-text::before { content: "nans@salvianans:~$ open "; color: #3ddc84; }
html body .ns-sheet-toolbar { background: #0d1626 !important; border-bottom: 1px solid rgba(56, 214, 255, .12) !important; }
html body .ns-sheet-tab { font-family: var(--nsd-mono) !important; border-radius: 8px 8px 0 0 !important; }
html body .ns-sheet-statusbar { background: #111a2b !important; font-family: var(--nsd-mono) !important; border-top: 1px solid rgba(56, 214, 255, .18) !important; }
html body .ns-sheet-action-btn { font-family: var(--nsd-mono) !important; border-color: rgba(255, 193, 7, .45) !important; }

/* Terminal réaliste */
.ns-term { background: #0a0e14 !important; border: 1px solid rgba(255, 255, 255, .10) !important; border-radius: 10px !important; position: relative; }
.ns-term::after {
	content: ""; position: absolute; inset: 38px 0 0; pointer-events: none;
	background: repeating-linear-gradient(180deg, rgba(255, 255, 255, .025) 0 1px, transparent 1px 3px);
}
.ns-term-bar { display: flex !important; align-items: stretch !important; gap: 0 !important; padding: 0 !important; height: 38px; background: #1b2130 !important; border-bottom: 1px solid rgba(0, 0, 0, .4) !important; }
.ns-term-tab {
	display: flex; align-items: center; gap: 8px; padding: 0 16px; margin: 6px 0 0 8px;
	background: #0a0e14; border-radius: 8px 8px 0 0; font: 600 12px var(--nsd-mono); color: rgba(232, 246, 255, .85);
}
.ns-term-ico { color: #3ddc84; font-weight: 700; }
.ns-term-plus { display: flex; align-items: center; padding: 0 12px; color: rgba(232, 246, 255, .45); font: 400 16px var(--nsd-mono); }
.ns-term-ctl { margin-left: auto; display: flex; align-items: center; gap: 14px; padding: 0 14px; }
.ns-term-ctl i { position: relative; width: 11px; height: 11px; background: none !important; border-radius: 0 !important; }
.ns-term-ctl i.min::before { content: ""; position: absolute; left: 0; right: 0; top: 5px; height: 1.5px; background: rgba(232, 246, 255, .6); }
.ns-term-ctl i.max::before { content: ""; position: absolute; inset: 0; border: 1.5px solid rgba(232, 246, 255, .6); }
.ns-term-ctl i.cls::before, .ns-term-ctl i.cls::after { content: ""; position: absolute; left: -1px; right: -1px; top: 5px; height: 1.5px; background: rgba(232, 246, 255, .6); transform: rotate(45deg); }
.ns-term-ctl i.cls::after { transform: rotate(-45deg); }
html.ns-design body .ns-term-body { font: 13px/1.7 var(--nsd-mono) !important; color: #c8d3e3 !important; text-shadow: 0 0 6px rgba(140, 220, 255, .12); }
.ns-term-body .pu { color: #3ddc84; font-weight: 600; }
.ns-term-body .pp { color: #5aa9ff; font-weight: 600; }
.ns-term-body .pc { color: #c8d3e3; }
.ns-term-body b { color: #f5f8ff !important; font-weight: 400; }
.ns-caret-t { width: 8px !important; background: #c8d3e3 !important; }

/* =====================================================================
   Thème CLAIR : même identité que le sombre, version « plan réseau sur papier »
   ===================================================================== */
html body.light-mode {
	--bg-light-primary: #eef3f8;
	--bg-light-secondary: #f5f8fb;
	--bg-light-card: #ffffff;
	--nsl-navy: #0b1a33;
	--nsl-cyan: #0a7fae;
	--nsl-gold: #b38600;
	--nsl-line: rgba(10, 127, 174, .16);
	background-color: #eef3f8 !important;
	color: #2a3446;
}
html body.light-mode .art-app,
html body.light-mode .art-app-container,
html body.light-mode .art-content {
	background-color: #eef3f8 !important;
}
html.ns-design body.light-mode .art-content {
	background-image:
		linear-gradient(rgba(10, 127, 174, .07) 1px, transparent 1px),
		linear-gradient(90deg, rgba(10, 127, 174, .07) 1px, transparent 1px) !important;
	background-size: 32px 32px !important;
}
/* En-tête */
html body.light-mode .art-horizontal-menu { background: rgba(255, 255, 255, .88) !important; border-bottom: 1px solid var(--nsl-line); }
html body.light-mode .art-horizontal-menu::before { color: #1a8f4f; }
html body.light-mode .horizontal-menu-list > li > a { color: #33405a !important; }
html body.light-mode .horizontal-menu-list > li > a:hover,
html body.light-mode .horizontal-menu-list > li.current-menu-item > a,
html body.light-mode .horizontal-menu-list > li.current-menu-ancestor > a { color: var(--nsl-navy) !important; }
html body.light-mode .horizontal-menu-list > li > a[data-text]:hover::before { text-shadow: -2px 0 rgba(10, 127, 174, .8), 2px 0 rgba(179, 134, 0, .8); }
html body.light-mode .horizontal-menu-list .sub-menu { background: rgba(255, 255, 255, .97) !important; }
html body.light-mode .horizontal-menu-list .sub-menu a { color: #33405a !important; }
html body.light-mode .horizontal-menu-list .sub-menu a:hover { color: var(--nsl-cyan) !important; background: rgba(10, 127, 174, .06) !important; }
/* Menu de gauche */
html body.light-mode .art-info-bar {
	background:
		linear-gradient(rgba(10, 127, 174, .06) 1px, transparent 1px),
		linear-gradient(90deg, rgba(10, 127, 174, .06) 1px, transparent 1px),
		linear-gradient(180deg, #ffffff, #f4f8fc) !important;
	background-size: 24px 24px, 24px 24px, auto !important;
	border-right: 1px solid var(--nsl-line);
}
html body.light-mode .art-info-bar .art-info-bar-frame,
html body.light-mode .art-info-bar .art-scroll-frame { background: transparent !important; }
html body.light-mode .art-info-bar .art-header { background: linear-gradient(180deg, rgba(10, 127, 174, .08), rgba(255, 255, 255, .9)) !important; border-bottom: 1px solid var(--nsl-line); }
html body.light-mode .art-info-bar .art-name a { color: var(--nsl-navy) !important; }
html body.light-mode .art-info-bar .art-sm-text.ns-filled { color: #1a8f4f !important; border-color: rgba(26, 143, 79, .4); background: rgba(26, 143, 79, .07); }
html body.light-mode .art-info-bar .art-title-h { color: var(--nsl-gold) !important; }
html body.light-mode .art-info-bar .art-title-h::before { color: var(--nsl-cyan); }
html body.light-mode .art-info-bar .art-table li h6 { color: #5a6782 !important; }
html body.light-mode .art-info-bar .art-table li span,
html body.light-mode .art-info-bar .art-lang-skills-item h6,
html body.light-mode .art-info-bar .art-hard-skills-item h6 { color: var(--nsl-navy) !important; }
html body.light-mode .art-info-bar .art-table li { border-bottom-color: var(--nsl-line) !important; }
html body.light-mode .art-info-bar .art-cirkle-progress svg path:last-child { stroke: var(--nsl-cyan) !important; }
html body.light-mode .art-info-bar .art-line-progress svg path:last-child { stroke: #e0a800 !important; }
html body.light-mode .art-info-bar .progressbar-text,
html body.light-mode .art-info-bar .art-hard-skills .art-hard-skills-item .art-line-progress .progressbar-text,
html body.light-mode .art-info-bar .art-lang-skills .art-lang-skills-item .art-cirkle-progress .progressbar-text { color: #33405a !important; }
html body.light-mode .art-info-bar .art-knowledge-list li,
html body.light-mode .art-info-bar li { color: #33405a !important; }
/* Cartes */
html body.light-mode .art-a.art-card,
html body.light-mode .art-a.art-service-icon-box,
html body.light-mode .art-a.art-blog-card {
	background-color: #ffffff !important;
	border: 1px solid var(--nsl-line) !important;
	box-shadow: 0 18px 40px -30px rgba(11, 26, 51, .35) !important;
}
html body.light-mode .art-a h1, html body.light-mode .art-a h2, html body.light-mode .art-a h3,
html body.light-mode .art-a h4, html body.light-mode .art-a h5 { color: var(--nsl-navy) !important; }
html body.light-mode .ns-port { color: #5a6782; }
/* Bandeau d'accueil : reste sombre, titre sans contour */
html body.light-mode .art-banner .art-banner-title-h,
html body.light-mode .art-banner .art-banner-title-h span {
	color: #ffffff !important;
	-webkit-text-stroke: 0 !important;
	text-stroke: 0 !important;
	text-shadow: 0 2px 24px rgba(0, 0, 0, .35) !important;
}
html body.light-mode .art-banner .art-code,
html body.light-mode .art-banner span.txt-rotate,
html body.light-mode .art-banner span.txt-rotate .wrap { color: #ffffff !important; }
/* Pied de page */
html.ns-design body.light-mode .footer { background: #ffffff !important; border-color: var(--nsl-line) !important; }

.ns-topo-logical { fill: none; stroke: rgba(255, 193, 7, .55); stroke-width: 1.3; stroke-dasharray: 1 5; stroke-linecap: round; }
.ns-topo-tag { font: 500 9.5px "JetBrains Mono", ui-monospace, Consolas, monospace; fill: rgba(232, 246, 255, .55); }
/* Menu de gauche, thème clair : l'ancienne règle très précise imposait un fond beige */
html body.light-mode .art-app .art-app-wrapper .art-app-container .art-info-bar,
html body.light-mode .art-info-bar .art-info-bar-frame {
	background:
		linear-gradient(rgba(10, 127, 174, .06) 1px, transparent 1px),
		linear-gradient(90deg, rgba(10, 127, 174, .06) 1px, transparent 1px),
		linear-gradient(180deg, #ffffff, #f4f8fc) !important;
	background-size: 24px 24px, 24px 24px, auto !important;
}
html body.light-mode .art-info-bar .art-info-bar-frame { background: transparent !important; }
html body:not(.light-mode) .art-app .art-app-wrapper .art-app-container .art-info-bar { background-color: #0f1828 !important; }

/* Chargement en grand : contenu centré, barre et texte agrandis */
.art-preloader { align-items: center !important; justify-content: center !important; }
.art-preloader .art-preloader-content { margin: 0 !important; }
.art-preloader .art-preloader-load { width: 460px !important; max-width: 80vw; height: 4px !important; }
.art-preloader .art-preloader-load svg { height: 4px !important; }
.art-preloader .progressbar-text { font-size: 16px !important; margin-top: 20px !important; }
.art-preloader h4 { margin-bottom: 26px !important; }

/* Articles de veille : l'image de couverture n'apparaît que dans la liste des articles */
body.ns-veille-article .art-a.art-project-cover,
body.ns-veille-article .art-project-cover { display: none !important; }

/* Mobile : barre du haut, chargement et terminal */
html body:not(.light-mode) .art-mobile-top-bar { background: rgba(11, 18, 32, .92) !important; border-bottom: 1px solid rgba(56, 214, 255, .14); backdrop-filter: blur(12px); }
html body.light-mode .art-mobile-top-bar { background: rgba(255, 255, 255, .92) !important; border-bottom: 1px solid rgba(10, 127, 174, .16); }
@media (max-width: 767px) {
	.art-preloader h4::before { font-size: 14px !important; }
	.art-preloader .progressbar-text { font-size: 13px !important; }
	.art-preloader .art-preloader-load { width: 260px !important; }
	html.ns-design body .ns-term-body { font-size: 11.5px !important; min-height: 0; padding: 12px !important; }
	.ns-term-tab { font-size: 11px; padding: 0 10px; }
	.ns-scene-wrap { margin-top: 12px; }
}

/* Changement de thème : aucun fondu individuel (spécificité renforcée face à l'ancien CSS) */
html.ns-vt *:not(#ns-x), html.ns-vt *:not(#ns-x)::before, html.ns-vt *:not(#ns-x)::after { transition: none !important; }

/* Bouton « Taille réelle / Vue d'ensemble » du tableau */
.ns-sheet-toolbar { display: flex; align-items: center; }
.ns-fit {
	margin-left: auto; cursor: pointer;
	font: 600 12px "JetBrains Mono", ui-monospace, Consolas, monospace;
	padding: 6px 12px; border-radius: 8px;
	background: transparent; color: #8ff0ff; border: 1px solid rgba(56, 214, 255, .45);
}
.ns-fit:hover, .ns-fit[aria-pressed="true"] { background: rgba(56, 214, 255, .12); }
body.light-mode .ns-fit { color: #0a7fae; border-color: rgba(10, 127, 174, .45); }

/* Haut du menu de gauche : fond OPAQUE (le contenu défilait visible au travers) */
html body:not(.light-mode) .art-info-bar .art-header { background: linear-gradient(180deg, #13223a, #111a2c) !important; }
html body.light-mode .art-info-bar .art-header { background: linear-gradient(180deg, #eaf4fa, #ffffff) !important; }

/* Menu de gauche repliable : ordinateur uniquement (le thème a son propre tiroir sur mobile) */
.ns-sb-notch { display: none; }
@media (min-width: 921px) {
	body.ns-sb-closed .art-info-bar { transform: translateX(-100%) !important; }
	html body.ns-sb-closed .art-app .art-app-wrapper .art-app-container .art-content { margin-left: 0 !important; width: 100% !important; max-width: 100% !important; }
	html body.ns-sb-closed .art-top-bg { width: 100% !important; left: 0 !important; }
	.art-info-bar { will-change: transform; }
	.ns-sb-notch {
		display: grid; place-items: center;
		position: fixed; z-index: 100001; top: 50%; left: 290px; transform: translateY(-50%);
		width: 22px; height: 64px; padding: 0; cursor: pointer;
		border: 1px solid rgba(56, 214, 255, .35); border-left: 0; border-radius: 0 10px 10px 0;
		background: #111a2c; box-shadow: 4px 0 18px -8px rgba(0, 0, 0, .7);
		transition: background .2s;
	}
	body.ns-sb-closed .ns-sb-notch { left: 0; }
	.ns-sb-notch:hover { background: #172742; }
	.ns-sb-notch:focus-visible { outline: 2px solid #ffc107; outline-offset: 2px; }
	.ns-sb-notch span { width: 7px; height: 7px; border-left: 2px solid #8ff0ff; border-bottom: 2px solid #8ff0ff; transform: translateX(2px) rotate(45deg); transition: transform .3s; }
	body.ns-sb-closed .ns-sb-notch span { transform: translateX(-2px) rotate(-135deg); }
	body.light-mode .ns-sb-notch { background: #ffffff; border-color: rgba(10, 127, 174, .35); }
	body.light-mode .ns-sb-notch span { border-color: #0a7fae; }
}

/* Filtres de « Mes Projets » : puces console lisibles dans les deux thèmes */
.art-filter { display: flex; flex-wrap: wrap; gap: 8px; }
html body .art-filter a.art-link[data-filter] {
	font: 600 12.5px/1 "JetBrains Mono", ui-monospace, Consolas, monospace !important;
	padding: 9px 14px !important; margin: 0 !important; border-radius: 999px;
	border: 1px solid rgba(56, 214, 255, .3); background: rgba(56, 214, 255, .05) !important;
	color: #d6e6f5 !important; opacity: 1 !important; text-transform: none !important; letter-spacing: 0 !important;
}
html body .art-filter a.art-link[data-filter]:hover { border-color: rgba(255, 193, 7, .6) !important; color: #fff !important; }
html body .art-filter a.art-link[data-filter].art-current { background: #ffc107 !important; border-color: #ffc107 !important; color: #0b1220 !important; }
html body.light-mode .art-filter a.art-link[data-filter] { color: #1d2a40 !important; border-color: rgba(10, 127, 174, .35) !important; background: #fff !important; }
html body.light-mode .art-filter a.art-link[data-filter].art-current { background: #0b1a33 !important; border-color: #0b1a33 !important; color: #fff !important; }
/* Boutons du tableau (Télécharger, Plein écran) en thème clair */
html body.light-mode .ns-sheet-action-btn { color: #8a6100 !important; background: #fff8e1 !important; border-color: rgba(179, 134, 0, .45) !important; }
html body .art-filter a.art-link[data-filter="*"] { font-size: 12.5px !important; }
html body .art-filter a.art-link[data-filter="*"]::after { content: none !important; }

/* Pendant le repli : aucune transition héritée du thème sur le menu */
body.ns-sb-anim .art-info-bar, body.ns-sb-anim .art-info-bar * { transition: none !important; }
/* Fenêtres de consentement : boutons toujours visibles en bas */
.ns-rgpd-modal .ns-rgpd-footer { position: sticky; bottom: 0; z-index: 2; background: inherit; box-shadow: 0 -12px 24px -12px rgba(0, 0, 0, .25); }

/* Grilles de cartes des pages (2e année) : le bandeau reste sombre dans les deux thèmes,
 * le texte doit donc rester clair (la règle héritée « body.light-mode span » le noircissait). */
html body.light-mode .nsg-card .nsg-t { color: #fff !important; }
html body.light-mode .nsg-card .nsg-k { color: #8ff0ff !important; }
html body.light-mode .nsg-card .nsg-go { color: #ffc107 !important; }
html body.light-mode .nsg-card:hover .nsg-go { color: #0b1220 !important; }

/* ==========================================================================
 * Menu mobile (tiroir) : console réseau, sombre ou « papier » selon le thème.
 * Le tiroir du thème Arter fait 230 px et laisse un grand vide en haut ; ici il
 * prend ~86 % de l'écran, les entrées sont numérotées comme des ports et les
 * sous-pages s'affichent en arborescence.
 * ========================================================================== */
@media (max-width: 920px) {
	html body .art-app .art-app-wrapper .art-app-container .art-menu-bar {
		--nsm-w: min(86vw, 340px);
		--nsm-bg: #0b1220; --nsm-ink: #e8eef6; --nsm-soft: rgba(232, 238, 246, .58);
		--nsm-line: rgba(56, 214, 255, .14); --nsm-port: #38d6ff; --nsm-on: #ffc107; --nsm-on-bg: rgba(255, 193, 7, .09);
		width: var(--nsm-w) !important;
		right: calc(-1 * var(--nsm-w)) !important;
		height: 100vh !important; height: 100dvh !important;
		background: var(--nsm-bg) !important;
		border-left: 1px solid var(--nsm-line);
		transition: transform .34s cubic-bezier(.65, 0, .35, 1), box-shadow .34s ease !important;
	}
	html body.light-mode .art-app .art-app-wrapper .art-app-container .art-menu-bar {
		--nsm-bg: #fbfcfe; --nsm-ink: #14202f; --nsm-soft: rgba(20, 32, 47, .58);
		--nsm-line: rgba(10, 127, 174, .16); --nsm-port: #0a7fae; --nsm-on: #8a6100; --nsm-on-bg: rgba(255, 193, 7, .14);
		background: var(--nsm-bg) !important;
	}
	html body .art-app .art-app-wrapper .art-app-container .art-menu-bar.art-active {
		transform: translateX(calc(-1 * var(--nsm-w))) !important;
		box-shadow: 0 0 0 100vmax rgba(4, 8, 16, .55), -24px 0 60px -20px rgba(0, 0, 0, .6);
	}
	/* En-tête : invite de commande + bouton fermer à droite */
	html body .art-app .art-menu-bar .art-menu-bar-frame .art-menu-bar-header {
		height: 64px !important;
		background: var(--nsm-bg) !important;
		border-bottom: 1px solid var(--nsm-line);
		z-index: 3;
	}
	html body .art-app .art-menu-bar .art-menu-bar-header::after {
		content: "nans@salvianans:~$ menu";
		position: absolute; left: 62px; top: 50%; transform: translateY(-50%);
		font: 500 12.5px/1 "JetBrains Mono", ui-monospace, Consolas, monospace;
		color: var(--nsm-soft); white-space: nowrap; pointer-events: none;
	}
	html body .art-app .art-menu-bar .art-menu-bar-header .art-menu-bar-btn {
		left: auto !important; right: 8px !important; top: 2px !important;
	}
	html body .art-app .art-menu-bar .art-menu-bar-btn span::before,
	html body .art-app .art-menu-bar .art-menu-bar-btn span::after { background: var(--nsm-ink) !important; }
	html body .art-app .art-menu-bar .art-current-page { display: none !important; }
	/* Liste : collée sous l'en-tête, numérotée comme des ports */
	html body .art-app .art-menu-bar .art-scroll-frame nav {
		display: block !important; height: auto !important; min-height: 100%;
		padding: 76px 0 28px !important;
	}
	html body .art-app .art-menu-bar .art-scroll-frame nav ul.main-menu {
		margin: 0 !important; padding: 0 !important; counter-reset: nsport; width: 100% !important;
	}
	html body .art-app .art-menu-bar nav ul.main-menu > li { position: relative; counter-increment: nsport; border-bottom: 1px solid var(--nsm-line); }
	html body .art-app .art-menu-bar nav ul.main-menu > li::before {
		content: counter(nsport, decimal-leading-zero);
		position: absolute; left: 20px; top: 17px;
		font: 600 11px/1 "JetBrains Mono", ui-monospace, Consolas, monospace;
		color: var(--nsm-port); letter-spacing: .04em; pointer-events: none; z-index: 1;
	}
	html body .art-app .art-menu-bar nav ul.main-menu li a {
		display: block !important;
		padding: 14px 44px 14px 54px !important;
		font: 600 16px/1.35 "Space Grotesk", Poppins, sans-serif !important;
		letter-spacing: 0 !important; text-transform: none !important;
		color: var(--nsm-ink) !important; background: transparent !important;
		opacity: 1 !important;
	}
	html body .art-app .art-menu-bar nav ul.main-menu > li.current-menu-item > a,
	html body .art-app .art-menu-bar nav ul.main-menu > li.current-menu-ancestor > a,
	html body .art-app .art-menu-bar nav ul.main-menu > li.current-menu-parent > a {
		color: var(--nsm-on) !important; background: var(--nsm-on-bg) !important;
		box-shadow: inset 3px 0 0 #ffc107;
	}
	html body .art-app .art-menu-bar nav ul.main-menu > li.current-menu-item::before,
	html body .art-app .art-menu-bar nav ul.main-menu > li.current-menu-ancestor::before { color: var(--nsm-on); }
	/* Sous-pages en arborescence */
	html body .art-app .art-menu-bar nav ul.sub-menu {
		background: transparent !important; box-shadow: none !important; border: 0 !important;
		margin: 0 !important; padding: 0 !important;
	}
	html body .art-app .art-menu-bar nav .main-menu .menu-item.menu-item-has-children::after {
		top: 25px !important; right: 20px !important; transform: translateY(-50%) !important; color: var(--nsm-soft) !important;
	}
	html body .art-app .art-menu-bar nav ul.sub-menu li { position: relative; }
	html body .art-app .art-menu-bar nav ul.sub-menu li::before {
		content: "└─"; position: absolute; left: 54px; top: 11px;
		font: 500 12px/1 "JetBrains Mono", ui-monospace, Consolas, monospace; color: var(--nsm-soft); pointer-events: none;
	}
	html body .art-app .art-menu-bar nav ul.sub-menu li a {
		padding: 9px 20px 9px 80px !important;
		font: 500 14px/1.4 "JetBrains Mono", ui-monospace, Consolas, monospace !important;
		color: var(--nsm-soft) !important;
	}
	html body .art-app .art-menu-bar nav ul.sub-menu li.current-menu-item a { color: var(--nsm-on) !important; }
	/* Interrupteur de thème : dans le tiroir, en ligne de statut */
	html body .art-app .art-menu-bar .theme-switch-wrapper-mobile {
		position: static !important; transform: none !important;
		display: flex !important; align-items: center; gap: 12px;
		margin: 22px 20px 0 !important; padding: 12px 14px; width: auto !important; height: auto !important;
		border: 1px dashed var(--nsm-line); border-radius: 12px;
	}
	html body .art-app .art-menu-bar .theme-switch-mobile { position: relative; display: block; width: 44px; height: 24px; margin: 0; flex: none; }
	html body .art-app .art-menu-bar .theme-switch-mobile input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; margin: 0; cursor: pointer; z-index: 2; }
	html body .art-app .art-menu-bar .slider-mobile {
		position: absolute !important; inset: 0 !important; width: auto !important; height: auto !important;
		border-radius: 999px; background: rgba(56, 214, 255, .16) !important; border: 1px solid var(--nsm-line);
	}
	html body .art-app .art-menu-bar .slider-mobile::before {
		content: "" !important; position: absolute !important; left: 3px !important; top: 50% !important; bottom: auto !important;
		width: 17px !important; height: 17px !important; border-radius: 50%; transform: translateY(-50%);
		background: var(--nsm-port) !important; transition: left .25s ease;
	}
	html body .art-app .art-menu-bar .theme-switch-mobile input:checked + .slider-mobile { background: rgba(255, 193, 7, .22) !important; }
	html body .art-app .art-menu-bar .theme-switch-mobile input:checked + .slider-mobile::before { left: 22px !important; background: #ffc107 !important; }
	html body .art-app .art-menu-bar .theme-label {
		position: static !important; transform: none !important; writing-mode: horizontal-tb !important;
		font: 500 13px/1.3 "JetBrains Mono", ui-monospace, Consolas, monospace !important; color: var(--nsm-soft) !important;
	}
	html body .art-app .art-menu-bar .theme-label { font-size: 0 !important; }
	html body .art-app .art-menu-bar .theme-label::before { content: "thème : sombre"; font-size: 13px; }
	html body.light-mode .art-app .art-menu-bar .theme-label::before { content: "thème : clair"; }
}
@media (max-width: 920px) and (prefers-reduced-motion: reduce) {
	html body .art-app .art-app-wrapper .art-app-container .art-menu-bar { transition: none !important; }
}

/* ==========================================================================
 * Page Veille : grille des articles (widget « Basic Posts ») en cartes console.
 * ========================================================================== */
html body .hfe-posts-grid .hfe-post-card {
	display: flex; flex-direction: column; overflow: hidden; border-radius: 14px !important;
	border: 1px solid rgba(56, 214, 255, .2) !important; background: #0f1828 !important;
	box-shadow: 0 22px 50px -34px rgba(0, 0, 0, .85); transition: transform .3s cubic-bezier(.2, .8, .2, 1), border-color .3s;
}
html body .hfe-posts-grid .hfe-post-card:hover { transform: translateY(-3px); border-color: rgba(255, 193, 7, .55) !important; }
html body .hfe-posts-grid .hfe-post-image { margin: 0 !important; aspect-ratio: 1200 / 630; overflow: hidden; background: #0b1220; }
html body .hfe-posts-grid .hfe-post-image img { width: 100% !important; height: 100% !important; object-fit: cover; display: block; transition: transform .6s cubic-bezier(.2, .8, .2, 1); }
html body .hfe-posts-grid .hfe-post-card:hover .hfe-post-image img { transform: scale(1.04); }
html body .hfe-posts-grid .hfe-post-content { display: flex; flex-direction: column; gap: 8px; flex: 1; padding: 16px 18px 18px !important; }
html body .hfe-posts-grid .hfe-post-title { margin: 0 !important; font: 700 17px/1.3 "Space Grotesk", Poppins, sans-serif !important; }
html body .hfe-posts-grid .hfe-post-title a { color: #f2f6fb !important; text-decoration: none !important; }
html body .hfe-posts-grid .hfe-post-card:hover .hfe-post-title a { color: #ffd24d !important; }
html body .hfe-posts-grid .hfe-post-meta, html body .hfe-posts-grid .hfe-post-meta span { font: 500 12px/1.4 "JetBrains Mono", ui-monospace, Consolas, monospace !important; color: #38d6ff !important; }
html body .hfe-posts-grid .hfe-post-author, html body .hfe-posts-grid .hfe-meta-separator { display: none !important; }
html body .hfe-posts-grid .hfe-post-excerpt { font-size: 14px !important; line-height: 1.6 !important; color: rgba(232, 238, 246, .72) !important;
	display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
html body .hfe-posts-grid .hfe-read-more { margin-top: auto !important; align-self: flex-start; font: 600 13px/1 "JetBrains Mono", ui-monospace, Consolas, monospace !important; color: #ffc107 !important; text-decoration: none !important; }
html body .hfe-posts-grid .hfe-read-more::before { content: "> "; }
html body.light-mode .hfe-posts-grid .hfe-post-card { background: #ffffff !important; border-color: rgba(10, 127, 174, .2) !important; box-shadow: 0 18px 40px -30px rgba(15, 30, 60, .35); }
html body.light-mode .hfe-posts-grid .hfe-post-title a { color: #14202f !important; }
html body.light-mode .hfe-posts-grid .hfe-post-card:hover .hfe-post-title a { color: #8a6100 !important; }
html body.light-mode .hfe-posts-grid .hfe-post-meta, html body.light-mode .hfe-posts-grid .hfe-post-meta span { color: #0a7fae !important; }
html body.light-mode .hfe-posts-grid .hfe-post-excerpt { color: rgba(20, 32, 47, .7) !important; }
html body.light-mode .hfe-posts-grid .hfe-read-more { color: #8a6100 !important; }

/* Bandeau des cartes de projet : il reste sombre dans les deux thèmes, son texte doit rester clair
 * (la règle héritée « body.light-mode span » le noircissait, constat sur iPhone le 3 nov.). */
html body .art-portfolio-item-frame.ns-card .ns-band .ns-band-t { color: #fff !important; }
html body .art-portfolio-item-frame.ns-card .ns-band .ns-band-k { color: #8ff0ff !important; }
html body .art-portfolio-item-frame.ns-card .ns-band .ns-band-go { color: #ffc107 !important; }
html body .art-portfolio-item-frame.ns-card:hover .ns-band .ns-band-go { color: #0b1220 !important; }
html body .art-portfolio-item-frame.ns-card .ns-band { opacity: 1 !important; }
/* Mobile : un bandeau plus compact pour laisser voir l'image. */
@media (max-width: 600px) {
	html body .art-portfolio-item-frame.ns-card .ns-band { padding: 9px 10px 9px 13px !important; gap: 10px !important; }
	html body .art-portfolio-item-frame.ns-card .ns-band .ns-band-t { font-size: 14px !important; line-height: 1.25 !important; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
	html body .art-portfolio-item-frame.ns-card .ns-band .ns-band-k { font-size: 9.5px !important; margin-bottom: 2px !important; }
	html body .art-portfolio-item-frame.ns-card .ns-band .ns-band-go { width: 32px !important; height: 32px !important; font-size: 15px !important; }
}

/* Terminal des en-têtes : il reste sombre, ses couleurs sont verrouillées dans les deux thèmes
 * (la règle héritée « body.light-mode span » assombrissait le prompt). */
html body .ns-term .ns-term-body .pu { color: #3ddc84 !important; }
html body .ns-term .ns-term-body .pp { color: #5aa9ff !important; }
html body .ns-term .ns-term-body .pc { color: #c8d3e3 !important; }
html body .ns-term .ns-term-body, html body .ns-term .ns-term-body b, html body .ns-term .ns-term-body span:not(.pu):not(.pp):not(.pc):not(.ns-caret-t) { color: #e6edf3 !important; }

/* En-tête de fiche projet sur mobile : la pastille de catégorie reprend sa place dans le flux,
 * sous le titre, au lieu de se poser par-dessus le terminal. */
@media (max-width: 920px) {
	.ns-page-hero .art-right-frame { position: static !important; margin: 12px 0 18px !important; }
	.ns-page-hero .art-right-frame .art-project-category { display: inline-block; }
}
@media (max-width: 920px) { body.single-post .ns-scene-wrap { width: 100% !important; } }
@media (max-width: 920px) { body.single-post .ns-scene-wrap { background: #0b1220; border: 1px solid rgba(56, 214, 255, .2); border-radius: 14px; padding: 10px; box-shadow: 0 24px 50px -30px rgba(0, 0, 0, .8); } }
.ns-scene-wrap.ns-offscreen *, .ns-scene-wrap.ns-offscreen *::before, .ns-scene-wrap.ns-offscreen *::after { animation-play-state: paused !important; }

/* ==========================================================================
 * Notifications (formulaire, assistant) : ligne de log console, en bas à droite
 * (en bas sur mobile), sombres dans les deux thèmes, couleur selon le niveau.
 * ========================================================================== */
html body .ns-toast-container { top: auto !important; bottom: 20px !important; right: 20px !important; left: auto !important; padding: 0 !important; z-index: 2147483000 !important; gap: 10px !important; align-items: flex-end; pointer-events: none; }
html body .ns-toast-container .ns-toast {
	--tc: #38d6ff;
	pointer-events: auto; position: relative; overflow: hidden;
	width: auto !important; min-width: 0 !important; max-width: min(420px, calc(100vw - 32px)); margin: 0 !important;
	display: flex !important; align-items: center !important; gap: 12px !important;
	padding: 12px 12px 12px 18px !important; border-radius: 12px !important;
	background: #0d1524 !important; border: 1px solid rgba(56, 214, 255, .22) !important;
	box-shadow: 0 18px 40px -14px rgba(0, 0, 0, .75), 0 0 0 1px rgba(0, 0, 0, .2) !important;
	color: #e8eef6 !important; font: 500 14px/1.45 "JetBrains Mono", ui-monospace, Consolas, monospace !important;
	animation: nsToastIn .32s cubic-bezier(.2, .8, .2, 1) both !important;
}
html body .ns-toast-container .ns-toast.success { --tc: #3ddc84; }
html body .ns-toast-container .ns-toast.error { --tc: #ff6b6b; }
html body .ns-toast-container .ns-toast.info { --tc: #38d6ff; }
html body .ns-toast-container .ns-toast::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--tc); }
html body .ns-toast-container .ns-toast::after { content: ""; position: absolute; left: 0; bottom: 0; height: 2px; width: 100%; background: var(--tc); opacity: .55; transform-origin: left; animation: nsToastTime 4s linear forwards; }
html body .ns-toast-container .ns-toast .ns-toast-icon {
	flex: none; padding: 3px 8px; border-radius: 6px; border: 1px solid color-mix(in srgb, var(--tc) 55%, transparent);
	background: color-mix(in srgb, var(--tc) 12%, transparent); color: var(--tc) !important;
	font: 700 11.5px/1.2 "JetBrains Mono", ui-monospace, Consolas, monospace !important; letter-spacing: .04em; text-transform: uppercase;
}
html body .ns-toast-container .ns-toast .ns-toast-content { flex: 1; min-width: 0; }
html body .ns-toast-container .ns-toast .ns-toast-message { color: #e8eef6 !important; font: inherit !important; margin: 0 !important; }
html body .ns-toast-container .ns-toast .ns-toast-close {
	flex: none; display: grid; place-items: center; width: 30px; height: 30px; padding: 0 !important; border-radius: 8px;
	border: 1px solid rgba(232, 238, 246, .14) !important; background: transparent !important; color: rgba(232, 238, 246, .7) !important;
	font-size: 18px !important; line-height: 1 !important; cursor: pointer; opacity: 1 !important;
}
html body .ns-toast-container .ns-toast .ns-toast-close:hover { color: #fff !important; border-color: rgba(232, 238, 246, .35) !important; }
html body .ns-toast-container .ns-toast.removing { animation: nsToastOut .25s ease forwards !important; }
@keyframes nsToastIn { from { opacity: 0; transform: translateY(14px) scale(.98); } to { opacity: 1; transform: none; } }
@keyframes nsToastOut { to { opacity: 0; transform: translateY(10px); } }
@keyframes nsToastTime { from { transform: scaleX(1); } to { transform: scaleX(0); } }
@media (max-width: 768px) {
	html body .ns-toast-container { left: 16px !important; right: 16px !important; bottom: calc(16px + env(safe-area-inset-bottom)) !important; align-items: stretch; }
	html body .ns-toast-container .ns-toast { max-width: none; font-size: 13.5px !important; }
}
@media (prefers-reduced-motion: reduce) {
	html body .ns-toast-container .ns-toast, html body .ns-toast-container .ns-toast.removing { animation: none !important; }
	html body .ns-toast-container .ns-toast::after { animation: none; display: none; }
}
@media (min-width: 769px) { html body .ns-toast-container .ns-toast { width: 380px !important; } }

/* 1.7.2 : la visionneuse d'images d'Elementor passe au-dessus de la barre de menu du thème */
html body .dialog-lightbox-widget.elementor-lightbox { z-index: 2147480000 !important; }

/* 1.7.4 : visionneuse d'images de l'extension (remplace celle d'Elementor) */
.ns-lb { position: fixed; inset: 0; z-index: 2147480001; display: none; align-items: center; justify-content: center;
	background: rgba(4, 9, 18, .92); padding: 56px 72px 40px; box-sizing: border-box; }
.ns-lb.is-open { display: flex; animation: nsLbIn .18s ease-out; }
@keyframes nsLbIn { from { opacity: 0; } to { opacity: 1; } }
html.ns-lb-on, html.ns-lb-on body { overflow: hidden; }
.ns-lb-fig { margin: 0; max-width: 100%; max-height: 100%; display: flex; flex-direction: column; align-items: center; gap: 12px; }
.ns-lb-img { max-width: min(1600px, 100%); max-height: calc(100vh - 150px); width: auto; height: auto; object-fit: contain;
	border-radius: 8px; box-shadow: 0 20px 60px rgba(0, 0, 0, .55); background: #0b1220; }
.ns-lb-cap { font: 500 14px/1.45 "JetBrains Mono", ui-monospace, monospace; color: #dbe4f0; text-align: center; max-width: 900px; }
.ns-lb-bar { position: absolute; top: 0; left: 0; right: 0; height: 52px; display: flex; align-items: center; justify-content: space-between;
	padding: 0 16px 0 22px; font: 600 13px "JetBrains Mono", ui-monospace, monospace; color: #9fb0c6; }
.ns-lb button { cursor: pointer; border: 1px solid rgba(255, 255, 255, .18); background: rgba(255, 255, 255, .06); color: #fff;
	border-radius: 10px; line-height: 1; }
.ns-lb button:hover { border-color: #ffc107; color: #ffc107; }
.ns-lb button:focus-visible { outline: 2px solid #ffc107; outline-offset: 2px; }
.ns-lb-close { width: 40px; height: 40px; font-size: 26px; }
.ns-lb-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 46px; height: 64px; font-size: 34px; }
.ns-lb-prev { left: 14px; }
.ns-lb-next { right: 14px; }
.ns-lb [hidden] { display: none !important; }
@media (max-width: 640px) {
	.ns-lb { padding: 56px 10px 24px; }
	.ns-lb-nav { top: auto; bottom: 14px; transform: none; width: 44px; height: 44px; font-size: 28px; }
	.ns-lb-img { max-height: calc(100vh - 190px); }
}
@media (prefers-reduced-motion: reduce) { .ns-lb.is-open { animation: none; } }

/* 1.7.5 : barres de fenêtre au style Windows (voir ns-portfolio.js) */
ns-wico, ns-wctl, ns-wc { display: block; }
html body .ns-wbar { display: flex !important; align-items: center; gap: 8px; }
html body .ns-wbar ns-wico { flex: none; font: 700 12px/1 "JetBrains Mono", ui-monospace, monospace; color: #3ddc84; letter-spacing: -.5px; }
html body .ns-wbar--web ns-wico { width: 12px; height: 12px; border: 1.5px solid currentColor; border-radius: 3px; opacity: .55; position: relative; }
html body .ns-wbar--web ns-wico::before { content: ""; position: absolute; left: 2px; right: 2px; top: 3px; height: 1.5px; background: currentColor; }
html body .ns-wbar ns-wctl { flex: none; display: flex; align-items: center; gap: 14px; margin-left: auto; padding-left: 12px; }
html body .ns-wbar--pushed ns-wctl { margin-left: 14px; }
html body .ns-wbar ns-wc { position: relative; width: 10px; height: 10px; opacity: .6; }
html body .ns-wbar ns-wc.min::before { content: ""; position: absolute; left: 0; right: 0; top: 5px; height: 1.5px; background: currentColor; }
html body .ns-wbar ns-wc.max::before { content: ""; position: absolute; inset: 0; border: 1.5px solid currentColor; }
html body .ns-wbar ns-wc.cls::before, html body .ns-wbar ns-wc.cls::after { content: ""; position: absolute; left: -1px; right: -1px; top: 4px; height: 1.5px; background: currentColor; transform: rotate(45deg); }
html body .ns-wbar ns-wc.cls::after { transform: rotate(-45deg); }
@media (max-width: 520px) { html body .ns-wbar ns-wctl { gap: 10px; } html body .ns-wbar ns-wc { width: 8px; height: 8px; } }
