/* Custom cursor exploration — html[data-cursor] holds space-separated tokens: invert cross frame focus dot label party */
html[data-cursor],html[data-cursor] *{cursor:none!important}
html[data-cursor] input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=button]):not([type=submit]),html[data-cursor] textarea,html[data-cursor] [contenteditable]{cursor:text!important}
.ccur{position:fixed;inset:0;pointer-events:none;z-index:2147483000;visibility:hidden;--ink:var(--text-primary);--paper:var(--surface-page)}
.ccur[data-vis]{visibility:visible}
.ccur[data-state="field"],.ccur[data-state="help"]{visibility:hidden}
html[data-cursor] .clarte-case__badges .clarte-tip:not(:has(.clarte-case__statuslink)),html[data-cursor] .clarte-case__badges .clarte-tip:not(:has(.clarte-case__statuslink)) *{cursor:help!important}
html[data-cursor~="invert"] .ccur{mix-blend-mode:difference;--ink:#fff;--paper:#000}
.ccur__p{position:absolute;left:0;top:0;will-change:transform}
.ccur__s{position:absolute;left:0;top:0;width:0;height:0;transform:translate(-50%,-50%);transition:width 120ms linear,height 120ms linear,background-color 120ms linear,border-color 120ms linear}
/* 1 · carré inversé */
html[data-cursor~="invert"] .ccur__s{width:12px;height:12px;background:#fff}
html[data-cursor~="invert"] .ccur[data-state="hover"] .ccur__s{width:15px;height:15px}
/* Survol : the square changes shape instead of growing — rond, or losange (stays angular) */
html[data-cursor~="invert"] .ccur__s{transition:width 120ms linear,height 120ms linear,border-radius 120ms linear,transform 120ms linear}
html[data-cursor-hover="round"][data-cursor~="invert"] .ccur[data-state="hover"] .ccur__s{width:13px;height:13px;border-radius:50%}
html[data-cursor-hover="diamond"][data-cursor~="invert"] .ccur[data-state="hover"] .ccur__s{width:11px;height:11px;transform:translate(-50%,-50%) rotate(45deg)}
html:is([data-cursor-hover="round"],[data-cursor-hover="diamond"]) .ccur[data-state="hover"] .ccur__s::after{height:0!important}
html[data-cursor~="invert"][data-cursor~="frame"] .ccur[data-state="hover"] .ccur__s{width:6px;height:6px}
/* 2 · viseur */
html[data-cursor~="cross"] .ccur__s{width:19px;height:19px}
html[data-cursor~="cross"] .ccur__s::before,html[data-cursor~="cross"] .ccur__s::after{content:"";position:absolute;background:var(--ink);transition:opacity 120ms linear}
html[data-cursor~="cross"] .ccur__s::before{left:9px;top:0;width:1px;height:100%}
html[data-cursor~="cross"] .ccur__s::after{top:9px;left:0;height:1px;width:100%}
html[data-cursor~="cross"] .ccur[data-state="hover"] .ccur__s{width:3px;height:3px;background:var(--ink)}
html[data-cursor~="cross"] .ccur[data-state="hover"] .ccur__s::before,html[data-cursor~="cross"] .ccur[data-state="hover"] .ccur__s::after{opacity:0}
.ccur__f{position:absolute;left:0;top:0;width:0;height:0;opacity:0;transition:opacity 120ms linear}
.ccur__f[data-on]{opacity:1}
.ccur__f[data-track]{transition:opacity 120ms linear,left 120ms linear,top 120ms linear,width 120ms linear,height 120ms linear}
.ccur__f i{position:absolute;width:10px;height:10px;border:0 solid var(--ink)}
.ccur__f i:nth-child(1){left:0;top:0;border-width:1px 0 0 1px}
.ccur__f i:nth-child(2){right:0;top:0;border-width:1px 1px 0 0}
.ccur__f i:nth-child(3){left:0;bottom:0;border-width:0 0 1px 1px}
.ccur__f i:nth-child(4){right:0;bottom:0;border-width:0 1px 1px 0}
/* 3 · mise au point */
html[data-cursor~="focus"] .ccur__s{width:26px;height:26px;border:1px solid var(--ink)}
html[data-cursor~="focus"] .ccur__s::after{content:"";position:absolute;left:50%;top:50%;width:2px;height:2px;margin:-1px 0 0 -1px;background:var(--ink)}
html[data-cursor~="focus"] .ccur[data-state="hover"] .ccur__s{width:40px;height:40px}
/* 4 · étiquette mono */
html[data-cursor~="dot"] .ccur__s{width:8px;height:8px;background:var(--ink)}
.ccur__l{position:absolute;left:0;top:0;display:none;padding:5px 7px 4px;font:500 11px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;background:var(--ink);color:var(--paper)}
html[data-cursor~="label"] .ccur[data-label] .ccur__l{display:block}
/* 5 · couleur du parti */
html[data-cursor~="party"] .ccur__s{width:10px;height:10px;background:var(--ink)}
html[data-cursor~="party"] .ccur[data-state="hover"] .ccur__s{width:16px;height:16px}
html[data-cursor~="party"] .ccur[data-party] .ccur__s{width:18px;height:18px;background:var(--cur-party)}
html[data-cursor~="invert"][data-cursor~="party"] .ccur[data-party]{mix-blend-mode:normal}
html[data-cursor~="invert"][data-cursor~="party"] .ccur[data-state="hover"] .ccur__s{width:18px;height:18px}
/* Scroll cue under the cursor — home, top of page */
.ccur__c{position:absolute;left:0;top:16px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:6px;opacity:0;transition:opacity 240ms linear}
.ccur[data-cue] .ccur__c{opacity:1}
.ccur[data-cue][data-state="hover"] .ccur__c{opacity:0}
/* étirement — the square itself reaches down, then returns */
.ccur__s::after{content:"";position:absolute;left:0;top:100%;width:100%;height:0;background:var(--ink)}
html:is([data-cursor~="invert"],[data-cursor~="dot"],[data-cursor~="party"]) .ccur[data-cue][data-cuestyle="stretch"] .ccur__s::after{height:var(--cue-h,0px)}
/* pas — three 2px squares stepping down */
.ccur__cd{display:block;width:2px;height:2px;background:var(--ink);opacity:.15;animation:ccur-step 1.8s steps(1) infinite}
.ccur__c:has(.ccur__cd){top:13px;gap:5px}
.ccur__cd:nth-child(2){animation-delay:.3s}.ccur__cd:nth-child(3){animation-delay:.6s}
@keyframes ccur-step{0%{opacity:1}33%,100%{opacity:.15}}
/* flèche — a single hairline arrow, drifting 3px */
.ccur__c:has(.ccur__ca){top:13px}
.ccur__ca{display:block;color:var(--ink);animation:ccur-drift 2.4s cubic-bezier(.45,0,.25,1) infinite}
@keyframes ccur-drift{0%,100%{transform:translateY(0)}50%{transform:translateY(3px)}}
/* mot + clic — the word says it, the arrow shows where; clicking the empty hero scrolls */
.ccur__c:has(.ccur__cw){top:15px;gap:6px;filter:blur(4px);transition:opacity 900ms linear,filter 1100ms cubic-bezier(.22,.61,.24,1)}
.ccur[data-cue] .ccur__c:has(.ccur__cw){filter:blur(0)}
.ccur[data-cue][data-state="hover"] .ccur__c:has(.ccur__cw){transition:opacity 160ms linear}
.ccur__cw{display:block;padding-left:.22em;font:var(--weight-light,300) 10px/1 var(--font-sans);letter-spacing:.22em;text-transform:uppercase;white-space:nowrap;color:var(--ink);opacity:.72}
.ccur__c:has(.ccur__cw) .ccur__ca{width:7px;height:13px;opacity:.72}
/* Filled cursors: the square itself makes the scroll gesture; the word sits still, centred beneath */
.ccur__sw{display:none}
html:is([data-cursor~="invert"],[data-cursor~="dot"],[data-cursor~="party"]) .ccur[data-cuestyle="word"] .ccur__c{display:none}
html:is([data-cursor~="invert"],[data-cursor~="dot"],[data-cursor~="party"]) .ccur[data-cuestyle="word"] .ccur__s{overflow:visible}
html:is([data-cursor~="invert"],[data-cursor~="dot"],[data-cursor~="party"]) .ccur[data-cuestyle="word"] .ccur__sw{display:block;position:absolute;left:50%;top:calc(100% + 16px);transform:translateX(-50%);padding-left:.06em;font:var(--weight-light,300) 12px/1 var(--font-sans);letter-spacing:.06em;white-space:nowrap;color:#fff;opacity:0;transition:opacity 200ms linear;pointer-events:none}
html:is([data-cursor~="invert"],[data-cursor~="dot"],[data-cursor~="party"]) .ccur[data-cuestyle="word"][data-cue]:not([data-state="hover"]) .ccur__sw{opacity:.85;transition:opacity 1200ms linear 300ms;animation:ccurWordHold 2400ms cubic-bezier(.45,0,.25,1) infinite}
html:is([data-cursor~="invert"],[data-cursor~="dot"],[data-cursor~="party"]) .ccur[data-cuestyle="word"][data-cue]:not([data-state="hover"]) .ccur__s{animation:ccurGlide 2400ms cubic-bezier(.45,0,.25,1) infinite}
@keyframes ccurGlide{0%,20%{translate:0 0}55%{translate:0 9px}70%{translate:0 9px}100%{translate:0 0}}
@keyframes ccurWordHold{0%,20%{translate:0 0}55%{translate:0 -9px}70%{translate:0 -9px}100%{translate:0 0}}
@media (prefers-reduced-motion:reduce){html:is([data-cursor~="invert"],[data-cursor~="dot"],[data-cursor~="party"]) .ccur[data-cuestyle="word"][data-cue] .ccur__s,html:is([data-cursor~="invert"],[data-cursor~="dot"],[data-cursor~="party"]) .ccur[data-cuestyle="word"][data-cue] .ccur__sw{animation:none}}
@media (prefers-reduced-motion:reduce){.ccur__cd,.ccur__ca{animation:none!important}}
@media (pointer:coarse){.ccur{display:none}}
