/*! Copyright (c) 2018–2026 La Colline des lutins - Tous droits réservés */
@page{size:A4 landscape;margin:0}body,html{-webkit-print-color-adjust:exact;print-color-adjust:exact}.pdf{display:none;background-color:var(--bg-body)}#certificat{position:relative;width:29.7cm;height:21cm;box-sizing:border-box;overflow:hidden;padding:1.3cm 1.5cm;text-align:center;border:.22cm solid #fff;border-radius:.6cm;box-shadow:inset 0 0 0 .08cm rgba(255,255,255,.55),0 .25cm .8cm rgba(0,0,0,.12)}#certificat::after{content:"";position:absolute;inset:0.45cm;border:.12cm dashed var(--text-muted);border-radius:.45cm;pointer-events:none}#certificat h1{position:relative;margin:.15cm 0 .2cm;font-size:1.25rem;line-height:1.1;text-transform:uppercase;letter-spacing:.1em;color:var(--primary-color);text-shadow:.04cm .04cm 0 rgba(255,255,255,.9)}#certificat h1::after{content:"✦ ✿ ✦";display:block;margin-top:.18cm;font-size:1rem;letter-spacing:.25em;color:var(--tertiary-color)}#certificat h2{margin:.45cm 0 .15cm;font-size:2.2rem;line-height:1.05;color:var(--secondary-color);font-weight:900;text-shadow:.05cm .05cm 0 rgba(255,255,255,.7)}#certificat p{margin:.15cm auto 0;max-width:18cm;font-size:1rem;line-height:1.45;color:var(--tertiary-color)}#certificat .badge{display:inline-block;margin-top:.25cm;padding:.22cm .55cm;border-radius:999px;background:linear-gradient(135deg,#ff6b6b,#ffb84d);color:#fff;font-size:.8rem;font-weight:800;letter-spacing:.03em;box-shadow:0 .12cm .3cm rgba(255,107,107,.25)}#certificat img:not(.qr-arrow){display:block;width:4.8cm;margin:.35cm auto .2cm;filter:drop-shadow(0 .18cm .22cm rgba(0, 0, 0, .2));transform:rotate(-2deg)}#certificat canvas{display:block;margin:.45cm auto 0;width:3cm!important;height:3cm!important;object-fit:contain;padding:.18cm;background:rgba(255,255,255,.95);border-radius:.4cm;border:.1cm solid #fff;box-shadow:0 .16cm .45cm rgba(0,0,0,.12)}#certificat .footer{position:absolute;left:2cm;right:2cm;bottom:2cm;display:flex;justify-content:space-between;align-items:center;font-size:.78rem;color:var(--tertiary-color)}#certificat .footer .left,#certificat .footer .right{background:rgba(255,255,255,.45);padding:.16cm .35cm;border-radius:999px}.qr-wrapper{position:relative;display:inline-block;margin-top:.45cm}.qr-annotation{position:absolute;top:.5cm;left:-4cm;width:3.5cm;text-align:right;transform:rotate(-8deg)}.qr-message{display:block;font-size:.85rem;font-weight:900;color:#4b6bff;line-height:1.2;margin-bottom:.1cm;text-shadow:1px 1px 0 #fff}.qr-arrow{display:inline-block;transform:scaleX(-1);margin-right:-10px}.modal-overlay{position:fixed;inset:0;background:var(--bg-overlay);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:9999;opacity:0;pointer-events:none;transition:opacity .3s ease}.modal-overlay.active{opacity:1;pointer-events:auto}.modal-card{background:var(--card-bg);padding:2.5rem;border-radius:1.5rem;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);text-align:center;width:90%;max-width:320px;transform:scale(.9);transition:transform .3s cubic-bezier(.34, 1.56, .64, 1)}.modal-overlay.active .modal-card{transform:scale(1)}.spinner{width:50px;height:50px;border:4px solid #f3f3f3;border-top:4px solid var(--primary-color);border-radius:50%;margin:0 auto 1.5rem;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.loading-text{font-family:'Walter Turncoat',var(--font-main);font-size:1.2rem;font-weight:700;color:var(--text-color);margin:0}.loading-subtext{font-size:.9rem;color:var(--text-muted);display:block;margin-top:.5rem}