/* GÉNÉRÉ par scripts/gen_card_holo_css.php depuis labfx/carte.css — ne pas modifier à la main.
   Lumière holo des cartes du site (collection, catalogue, fiche, marché…), mêmes règles que
   l'ouverture de pack : point chaud C/U/R, v0 sur Épique, Organique sur Légendaire et Mythique. */
.tcg.lfxh{--px:50%;--py:50%;--op:0;--opa:0;--rx:0deg;--ry:0deg;--glow:var(--tier-c);--oint:.16;--ospec:linear-gradient(115deg,#fff,#dfe8ff,#fff);}
.tcg.lfxh.t-u{--glow:var(--tier-u);--oint:.34;--ospec:linear-gradient(115deg,#1c8a4a,#33d17a 35%,#8cffb8 60%,#33d17a);}
.tcg.lfxh.t-r{--glow:var(--tier-r);--oint:.52;--ospec:linear-gradient(115deg,#1c5aae,#4da8ff 35%,#7fd3ff 60%,#4da8ff);}
.tcg.lfxh.t-e{--glow:var(--tier-e);--oint:.68;--ospec:linear-gradient(115deg,#621fae,#b356ff 35%,#e29bff 60%,#ff77c4);}
.tcg.lfxh.t-l{--glow:var(--tier-l);--oint:.84;--ospec:linear-gradient(115deg,#a5680d,#ffb340 30%,#ffd77a 55%,#fff1c2 70%,#ffb340);}
.tcg.lfxh.t-m{--glow:var(--tier-m);--oint:1;--ospec:conic-gradient(from 0deg at var(--px) var(--py),#ff3d6e,#ffb340,#ffe45e,#5ee6a8,#4da8ff,#b356ff,#ff3d6e);}
/* ── calques de lumière : éteints par défaut ── */
.tcg .lfx-fx,.tcg .lfx-v0{position:absolute;inset:0;pointer-events:none;border-radius:inherit;display:none;background-repeat:no-repeat}
.tcg .lfx-foil,.tcg .lfx-sheen{z-index:3}.tcg .lfx-spark{z-index:4}.tcg .lfx-glare{z-index:8}

/* ═════════ ORGANIQUE ═════════ */
.tcg.lfxh-orga:not(.fullart) .tcg-body>img{z-index:9}         /* commune → épique : l'effet vit sur le corps sombre */
.tcg.lfxh-orga:not(.fullart) .tier-chip{z-index:10}
.tcg.lfxh-orga .lfx-fx{display:block}
.tcg.lfxh-orga :is(.lfx-foil,.lfx-sheen){background-image:var(--ospec);background-size:100% 100%;background-position:center}
.tcg.lfxh-orga .lfx-foil{mix-blend-mode:color-dodge;opacity:calc(var(--op) * var(--oint) * .62);
  -webkit-mask-image:radial-gradient(farthest-corner circle at var(--px) var(--py),#000 0%,rgba(0,0,0,.45) 30%,transparent 60%),radial-gradient(ellipse 44% 30% at 50% 36%,rgba(0,0,0,.2) 35%,#000 90%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360'%3E%3Cfilter id='f' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.0083' numOctaves='2' seed='9' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='discrete' tableValues='0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='360' height='360' filter='url(%23f)'/%3E%3C/svg%3E");mask-image:radial-gradient(farthest-corner circle at var(--px) var(--py),#000 0%,rgba(0,0,0,.45) 30%,transparent 60%),radial-gradient(ellipse 44% 30% at 50% 36%,rgba(0,0,0,.2) 35%,#000 90%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360'%3E%3Cfilter id='f' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.0083' numOctaves='2' seed='9' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='discrete' tableValues='0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='360' height='360' filter='url(%23f)'/%3E%3C/svg%3E");
  -webkit-mask-size:100% 100%,100% 100%,360px 360px;mask-size:100% 100%,100% 100%,360px 360px;
  -webkit-mask-repeat:no-repeat,no-repeat,repeat;mask-repeat:no-repeat,no-repeat,repeat;
  -webkit-mask-position:0 0,0 0,var(--wx,0px) var(--wx,0px);mask-position:0 0,0 0,var(--wx,0px) var(--wx,0px);
  -webkit-mask-composite:source-in,source-in;mask-composite:intersect,intersect}
.tcg.lfxh-orga .lfx-sheen{mix-blend-mode:soft-light;opacity:calc(var(--op) * var(--oint) * .5);
  -webkit-mask-image:radial-gradient(farthest-corner circle at var(--px) var(--py),#000 0%,rgba(0,0,0,.4) 30%,transparent 65%);
  mask-image:radial-gradient(farthest-corner circle at var(--px) var(--py),#000 0%,rgba(0,0,0,.4) 30%,transparent 65%)}
.tcg.lfxh-orga .lfx-spark{mix-blend-mode:overlay;background-image:linear-gradient(#fff,#fff);opacity:calc(var(--op) * (.08 + var(--oint) * .3));
  -webkit-mask-image:radial-gradient(farthest-corner circle at var(--px) var(--py),#000 0%,transparent 45%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360'%3E%3Cfilter id='f' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.0083' numOctaves='2' seed='9' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='discrete' tableValues='0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='360' height='360' filter='url(%23f)'/%3E%3C/svg%3E");
  mask-image:radial-gradient(farthest-corner circle at var(--px) var(--py),#000 0%,transparent 45%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360'%3E%3Cfilter id='f' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.0083' numOctaves='2' seed='9' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='discrete' tableValues='0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='360' height='360' filter='url(%23f)'/%3E%3C/svg%3E");
  -webkit-mask-size:100% 100%,360px 360px;mask-size:100% 100%,360px 360px;-webkit-mask-repeat:no-repeat,repeat;mask-repeat:no-repeat,repeat;
  -webkit-mask-position:0 0,calc(var(--wx,0px) + 3px) calc(var(--wx,0px) + 2px);mask-position:0 0,calc(var(--wx,0px) + 3px) calc(var(--wx,0px) + 2px);
  -webkit-mask-composite:source-in;mask-composite:intersect}
.tcg.lfxh-orga .lfx-glare{mix-blend-mode:overlay;filter:brightness(.85) contrast(1.6);opacity:calc(var(--op) * (.2 + var(--oint) * .45));
  background:radial-gradient(farthest-corner circle at var(--px) var(--py),hsl(190,100%,96%) 4%,hsla(255,20%,60%,.28) 40%,hsla(0,0%,0%,.4) 110%)}
.tcg.lfxh-orga.t-m .lfx-foil{opacity:var(--op);filter:saturate(1.4)}
.tcg.lfxh-orga.t-m .lfx-sheen{opacity:calc(var(--op) * .75)}
.tcg.lfxh-orga.t-m .lfx-spark{opacity:calc(var(--op) * .6)}
/* la mythique garde la trame prismatique de la v0, sous la lumière, visage épargné */
.tcg.lfxh-orga.t-m .lfx-v0-brillance{display:block;opacity:calc(var(--op) * .55);
  -webkit-mask-image:radial-gradient(farthest-corner circle at var(--px) var(--py),#000 0%,rgba(0,0,0,.45) 30%,transparent 60%),radial-gradient(ellipse 46% 32% at 50% 38%,rgba(0,0,0,.15) 40%,#000 90%);
  mask-image:radial-gradient(farthest-corner circle at var(--px) var(--py),#000 0%,rgba(0,0,0,.45) 30%,transparent 60%),radial-gradient(ellipse 46% 32% at 50% 38%,rgba(0,0,0,.15) 40%,#000 90%);
  -webkit-mask-composite:source-in;mask-composite:intersect}

/* ═════════ V0 PARTOUT ═════════ */
.tcg .lfx-v0-texture{z-index:3;mix-blend-mode:soft-light;opacity:.4;background-repeat:repeat;background-size:180px 180px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='r'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23r)'/%3E%3C/svg%3E")}
.tcg .lfx-v0-paillettes{z-index:4;mix-blend-mode:color-dodge;opacity:calc(var(--op) * .25 + var(--opa) * .6);background-repeat:repeat;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.4' numOctaves='1' seed='3'/%3E%3CfeColorMatrix values='0 0 0 0 1  0 0 0 0 .8  0 0 0 0 .45  0 0 0 9 -7.4'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23g)'/%3E%3C/svg%3E");
  -webkit-mask-image:radial-gradient(farthest-corner circle at var(--pointer-x) var(--pointer-y),#000 0%,#0006 35%,transparent 70%);
  mask-image:radial-gradient(farthest-corner circle at var(--pointer-x) var(--pointer-y),#000 0%,#0006 35%,transparent 70%)}
.tcg .lfx-v0-brillance{z-index:5;opacity:calc(var(--op) * .3 + var(--opa) * .45);
  background-image:repeating-linear-gradient(110deg,#EC4899 0%,#8B5CF6 4%,#3B82F6 8%,#22C55E 12%,#EAB308 16%,#EC4899 20%),
    repeating-linear-gradient(90deg,#5A5A5A 0 1.5px,#0A0A0A 1.5px 3px);
  background-repeat:repeat;background-size:400% 400%,auto;
  background-position:calc(((50% - var(--bg-x)) * 2.6) + 50%) calc(((50% - var(--bg-y)) * 3.5) + 50%),center;
  background-blend-mode:overlay;mix-blend-mode:color-dodge;filter:brightness(.95) contrast(1.1) saturate(1.25);
  -webkit-mask-image:radial-gradient(ellipse 62% 44% at 50% 42%,transparent 45%,rgba(0,0,0,.4) 78%,#000 100%);
  mask-image:radial-gradient(ellipse 62% 44% at 50% 42%,transparent 45%,rgba(0,0,0,.4) 78%,#000 100%)}
.tcg .lfx-v0-brillance::before{content:'';position:absolute;inset:0;
  background:repeating-linear-gradient(90deg,hsla(0,0%,70%,1) 0 3%,hsla(0,0%,0%,1) 3% 6%);background-size:200% 200%;
  background-position:calc(((50% - var(--bg-x)) * 1.6) + 50%) 50%;mix-blend-mode:hard-light;opacity:.22}
.tcg .lfx-v0-brillance::after{content:'';position:absolute;inset:0;
  background:radial-gradient(farthest-corner circle at var(--pointer-x) var(--pointer-y),hsla(0,0%,88%,.55) 0%,hsla(0,0%,76%,.08) 30%,hsl(0,0%,0%) 92%);
  mix-blend-mode:luminosity;filter:brightness(.7) contrast(2);opacity:.7}
/* le prisme balaie en continu : l'animation vit sur le pseudo-élément, jamais sur le calque qui lit --op */
.tcg .lfx-v0-prisme{z-index:5;mix-blend-mode:color-dodge;opacity:calc(var(--op) * .35)}
.tcg .lfx-v0-prisme::before{content:'';position:absolute;inset:0;
  background:linear-gradient(115deg,transparent 30%,#ff3d6e88 42%,#ffb34088 48%,#4FE3D088 54%,#A97BFF88 60%,transparent 72%);
  background-size:300% 100%;animation:lfx-prisme 3.2s linear infinite}
@keyframes lfx-prisme{from{background-position:150% 0}to{background-position:-150% 0}}
.tcg .lfx-v0-reflet{z-index:8;mix-blend-mode:overlay;filter:brightness(.85) contrast(1.6);opacity:calc(var(--opa) * .75);
  background:radial-gradient(farthest-corner circle at var(--pointer-x) var(--pointer-y),hsl(190,100%,96%) 4%,hsla(255,20%,60%,.28) 40%,hsla(0,0%,0%,.4) 110%)}
.tcg.lfxh-v0 .lfx-v0{display:block}
.tcg.lfxh-v0:is(.t-c,.t-u) :is(.lfx-v0-brillance,.lfx-v0-paillettes,.lfx-v0-prisme){display:none}
.tcg.lfxh-v0:is(.t-r,.t-e) :is(.lfx-v0-paillettes,.lfx-v0-prisme){display:none}
.tcg.lfxh-v0.t-l .lfx-v0-prisme{display:none}
.tcg.lfxh-v0.t-r .lfx-v0-brillance{opacity:calc(var(--op) * .12 + var(--opa) * .22)}
.tcg.lfxh-v0.t-e .lfx-v0-brillance{opacity:calc(var(--op) * .18 + var(--opa) * .3)}
.tcg.lfxh-v0.t-l .lfx-v0-brillance{opacity:calc(var(--op) * .24 + var(--opa) * .38)}
.tcg.lfxh-v0:is(.t-c,.t-u) .lfx-v0-reflet{opacity:calc(var(--opa) * .42)}
.tcg.lfxh-v0:not(.fullart) .lfx-v0-brillance{
  -webkit-mask-image:radial-gradient(ellipse 54% 26% at 50% 28%,transparent 34%,rgba(0,0,0,.45) 66%,#000 100%);
  mask-image:radial-gradient(ellipse 54% 26% at 50% 28%,transparent 34%,rgba(0,0,0,.45) 66%,#000 100%)}
/* ═════════ MIX PAR RARETÉ ═════════
   Commune → Rare : point chaud large et doux, blanc / vert / bleu. Épique : v0. Légendaire et Mythique :
   Organique. Le mode est posé par js/labfx/pile.js sur l'emplacement de chaque carte (.tcg.lfxh-point ici). */
.tcg.lfxh-point{--pc:rgba(235,240,250,.42)}
.tcg.lfxh-point.t-u{--pc:rgba(90,235,150,.4)}
.tcg.lfxh-point.t-r{--pc:rgba(95,175,255,.44)}
.tcg.lfxh-point .lfx-glare{display:block;mix-blend-mode:screen;opacity:calc(var(--op) * .95);
  background:radial-gradient(circle at var(--px) var(--py),var(--pc) 0%,color-mix(in srgb,var(--pc) 22%,transparent) 34%,transparent 55%)}

@media (prefers-reduced-motion:reduce){.lfx-v0-prisme::before{animation:none}}
