/* ===========================================================================
   app.css — Feuille de style globale de Parformance (PWA stats de golf)
   ---------------------------------------------------------------------------
   Rôle    : socle visuel partagé par toutes les pages — reset, variables de
             thème (:root), navbar + dock mobile, cartes, formulaires, boutons,
             tableaux, modales globales (.pf-modal-* pilotées par les helpers
             pfConfirm/pfAlert/pfToast de public/assets/js/app.js), selects à
             icônes, et une longue cascade de media queries de responsive.
   Cible    : mobile Galaxy S7 = 360px de large. Les media queries descendent
             jusqu'à 360 et 360- via plusieurs paliers (768 / 600 / 480 / 440 /
             400 / 360) ; chaque palier resserre paddings, polices et grilles.
   Empilement (z-index) — défini en variables :root, du plus bas au plus haut :
             --z-dropdown:100 < --z-navbar:200 < --z-sidebar:300 <
             --z-modal:400 < --z-toast:500.  NOTE: la popup commentaire
             (pf-comment-popup.css) utilise 9999, au-dessus de tout cela.
   WARNING: fichier en grande partie MINIFIÉ — plusieurs règles par ligne
            physique. Les commentaires sont insérés ENTRE les lignes ; ne pas
            tenter de fractionner une ligne minifiée (risque de casser une règle).
   =========================================================================== */

/* --- Polices : Roboto 400 + 700 en woff2, font-display:swap pour ne pas
   bloquer le rendu (texte de secours affiché tant que la police charge).
   local() d'abord => réutilise la fonte si déjà installée sur l'appareil. --- */
@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:local('Roboto'),local('Roboto-Regular'),url('/assets/fonts/roboto/Roboto-Regular.woff2') format('woff2')}
@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:local('Roboto Bold'),local('Roboto-Bold'),url('/assets/fonts/roboto/Roboto-Bold.woff2') format('woff2')}
/* ===========================================================================
   BLOC PRINCIPAL (ligne minifiée unique ci-dessous) — sections enchaînées :
   ---------------------------------------------------------------------------
   1. RESET  : *,::after,::before {box-sizing:border-box; margin/padding:0}.
   2. :root  : palette (--blue marque, --green, --error, --light, --border…),
               échelle de z-index (voir en-tête), polices, --radius, --shadow.
   3. html/body : overflow-x:clip + max-width:100vw = anti-scroll horizontal ;
               background fixe plein écran ; body en flex-column (footer collé
               en bas via .container{flex:1}).
   4. NAVBAR : barre collante (position:sticky; top:0; z-index:var(--z-navbar))
               en dégradé bleu ; menus desktop vs toggle mobile.
   5. DOCK mobile : barre d'icônes (.dock-*) avec label en pastille apparaissant
               au hover (transform:scale + opacity) ; z-index local au hover.
   6. CARTES / ALERTES / FORMULAIRES : .card, .alert-success/-error, .form-group ;
               inputs min-height:44px = cible tactile mini ; focus ring bleu.
   7. EMOJIS  : contour noir via text-shadow 4 directions / -webkit-text-stroke
               (lisibilité sur fonds variés).
   8. BOUTONS : .btn et variantes (primary/success/danger/secondary/caddie) ;
               hover = scale 1.08 + liseré doré #C9A84C (uniquement hover:hover
               pour ne pas coller au tactile) ; bordure noire + ombre portée.
   9. TABLEAUX : zébrage 1 ligne sur 2 (--light), survol bleuté.
   10. PAGE-HEADER / FOOTER : titre h1 à contour noir ; footer blanc en bas.
   11. MEDIA QUERIES : voir paliers détaillés plus bas dans la même ligne —
        >=769 (desktop : menus déroulés, grilles 7 col, icônes agrandies) ;
        <=768 (navbar empilée, grilles réduites, footer simplifié) ;
        <=480 / <=440 / <=400 / <=360 (resserrage progressif pour le S7).
   12. .pf-modal-* : modales JS globales (overlay fixed z-index:var(--z-modal),
        boîte centrée animée fade-in/slide-up, boutons primary/danger/cancel).
        WARNING: respecte prefers-reduced-motion (animations coupées plus bas).
   13. .icon-select : select custom avec icônes (dropdown absolu z-index:50).
   =========================================================================== */
*,::after,::before{box-sizing:border-box;margin:0;padding:0}:root{--blue:#1E5C9B;--blue-dark:#154272;--green:#1B6B2F;--grey:#555;--light:#F5F8FF;--border:#DDE3EE;--success:#1B6B2F;--error:#CC0000;--z-dropdown:100;--z-navbar:200;--z-sidebar:300;--z-modal:400;--z-toast:500;--white:#FFFFFF;--font:'Roboto',Arial,sans-serif;--font-narrow:'Roboto Condensed','Arial Narrow',sans-serif;--radius:8px;--shadow:0 2px 8px rgba(0,0,0,0.08)}html{overflow-x:clip;scrollbar-gutter:stable}body{font-family:var(--font);font-size:16px;color:var(--pf-body-text,#222);background-size:cover;background-position:center center;background-repeat:no-repeat;background-attachment:fixed;min-height:100vh;display:flex;flex-direction:column;overflow-x:clip;max-width:100vw}.navbar{background:linear-gradient(to bottom,rgba(21,66,114,.5),#154272);padding:4px 16px;display:flex;align-items:center;justify-content:flex-start;min-height:56px;box-shadow:none;text-shadow:0 0 3px #000,0 0 3px #000;position:sticky;top:0;z-index:var(--z-navbar);flex-wrap:wrap;gap:4px;row-gap:0}.navbar-brand a{color:var(--white);text-decoration:none;font-size:1.2rem;font-weight:700;letter-spacing:.5px}.navbar-menu{list-style:none;display:flex;gap:4px}.navbar-menu a{color:rgba(255,255,255,.85);text-decoration:none;padding:8px 12px;border-radius:var(--radius);font-size:1.05rem;font-family:Roboto,Helvetica,Arial,sans-serif;transition:background .2s;display:block}.navbar-menu a .emoji{font-size:1.3rem}.navbar-menu a:hover{background:rgba(255,255,255,.15);color:var(--white)}.desktop-menu{display:none}@media (min-width:769px){.desktop-menu{display:flex}#menu-toggle{display:none}.dashboard-action-btn{font-size:.95rem!important;padding:8px 14px!important}.stats-nav-btn{font-size:1.18rem!important;padding:10px 8px!important;min-height:0!important}.stats-nav-icon{font-size:2.3rem!important}.stats-nav{grid-template-columns:repeat(7,1fr)!important}.coach-nav{grid-template-columns:repeat(7,1fr)!important}.coach-nav a{width:100%!important;box-sizing:border-box!important}.dock-icon{font-size:2.86rem!important}.dock-item{padding-top:2px!important;padding-bottom:2px!important}}.dashboard-action-btn{font-size:.85rem;padding:6px 12px}.stats-nav-btn{font-size:.94rem!important;padding:4px 4px!important;min-height:0!important}.stats-nav-icon{font-size:1.45rem!important}.dock-menu{justify-content:center;align-items:flex-end;gap:6px;padding:0 8px 1px 8px;width:100%;min-height:42px}.dock-item{display:flex;flex-direction:column;align-items:center;text-decoration:none;color:var(--pf-dock-item,rgba(255,255,255,.85));padding:4px 14px;border-radius:8px;cursor:pointer;position:relative;transition:transform .25s ease,margin .25s ease;transform-origin:bottom center;background:0 0;border:none;font-family:Roboto,Arial,sans-serif;font-weight:700}.dock-icon{font-size:2.2rem;transition:transform .25s ease;line-height:1}.dock-label{position:absolute;top:100%;left:50%;transform:translateX(-50%);font-size:1.2rem;font-weight:700;opacity:0;pointer-events:none;transition:opacity .2s ease;white-space:nowrap;color:#fff!important;background:rgba(0,0,0,.78);padding:5px 14px;border-radius:100px;border:none;margin-top:calc(.55rem + 5px);text-shadow:none;box-shadow:0 4px 16px rgba(0,0,0,.4)}.dock-item:hover{z-index:10}.dock-item:hover .dock-icon{transform:scale(1.5)}.dock-item:hover .dock-label{opacity:1;color:#fff!important}.dock-item:hover{color:var(--pf-hover-outline,gold)}.dock-alert{color:var(--danger,#f99)}.dock-alert:hover{color:var(--pf-hover-outline,gold)}button.dock-item{font-size:inherit;line-height:inherit;padding:4px 10px;margin:0}.container{max-width:1024px;margin:0 auto;padding:24px 16px;flex:1}.alert{padding:12px 16px;border-radius:var(--radius);margin-bottom:20px;font-size:.95rem}.alert-success{background:#e8f5e9;color:var(--success);border:1px solid #a5d6a7}.alert-error{background:#ffebee;color:var(--error);border:1px solid #ffcdd2}.card{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);padding:24px;margin-bottom:20px}.card-title{font-size:1.1rem;font-weight:700;color:var(--pf-card-title);margin-bottom:16px;padding-bottom:10px;border-bottom:2px solid var(--border);text-shadow:1px 1px 2px #fff,-1px -1px 2px #fff}.form-group{margin-bottom:16px}.form-group label{display:block;font-size:.9rem;font-weight:700;color:var(--grey);margin-bottom:6px}.form-group input,.form-group select,.form-group textarea{width:100%;padding:10px 14px;border:1px solid var(--border);border-radius:var(--radius);font-size:1rem;font-family:var(--font);background:var(--pf-input-bg,#fff);color:var(--pf-input-text,#222);transition:border-color .2s;min-height:44px}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:2px solid var(--blue);outline-offset:2px;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,92,155,.4)}.form-error{color:var(--error);font-size:.85rem;margin-top:4px}.was-validated input:invalid,.was-validated select:invalid,.was-validated textarea:invalid{border:2px solid var(--error);box-shadow:0 0 0 3px rgba(204,0,0,.12)}.emoji{text-shadow:-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000;margin:0 .15em}.emoji-shadow .emoji{text-shadow:2px 2px 4px rgba(0,0,0,.5);-webkit-text-stroke:2px #fff;paint-order:stroke fill}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.3em;padding:10px 20px;border-radius:var(--radius);font-size:1rem;font-family:var(--font);font-weight:700;cursor:pointer;border:1px solid #000!important;text-decoration:none;line-height:1.2;transition:background .2s,transform .15s ease;box-shadow:2px 2px 4px rgba(0,0,0,.3)!important}@media (hover:hover){.btn:hover{transform:scale(1.08);outline:5px solid var(--pf-hover-outline,#C9A84C);outline-offset:2px}.btn-action:hover,.csel-grid-opt:hover,.csel-popup-opt:hover,.csel:hover,.dist-input:hover,.fir-btn:hover,.gir-dir-btn:hover,.hole-picker-btn:hover,.live-btn:hover,.live-nav-btn:hover,.loop-btn:hover,.numpad-btn:hover,.simpsel-btn:hover,.simpsel-opt:hover{transform:scale(1.08);outline:5px solid var(--pf-hover-outline,#C9A84C);outline-offset:2px}}.btn:active{transform:scale(.98)}.btn-caddie{transition:background .2s,transform .15s ease,opacity .2s}.btn-caddie:hover{background:var(--pf-btn-caddie-hover,#b8553d)!important;opacity:1!important;transform:scale(1.04)}.btn-caddie:active{transform:scale(.98)}.btn-primary{background:var(--blue);color:var(--white);transition:box-shadow .15s,transform .15s,background .15s}.btn-primary:hover{background:var(--blue-dark)}.btn-caddie{background:var(--pf-btn-caddie,#d97757);color:var(--white);border:none;transition:box-shadow .15s,transform .15s,background .15s}.btn-caddie:hover{background:var(--pf-btn-caddie-hover,#c0623f)}.btn-success{background:var(--green);color:var(--white)}.btn-danger{background:var(--error);color:var(--white)}.btn-secondary{background:var(--pf-btn-secondary-bg,#eee);color:var(--pf-btn-secondary-text,#333);border:1px solid var(--blue)!important}.btn-secondary .emoji{text-shadow:none;-webkit-text-stroke:0}.btn-secondary .emoji:only-child{font-size:1.3em}.btn-sm{padding:6px 14px;font-size:.85rem;line-height:1.2}.btn-arrow{font-size:1.6rem;font-weight:900;-webkit-text-stroke:2px currentColor;display:inline-block;line-height:1;vertical-align:middle}.btn-block{width:100%}.table-responsive{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:.95rem}table th{background:var(--blue);color:var(--white);padding:10px 12px;text-align:left;font-weight:700}table td{padding:10px 12px;border-bottom:1px solid var(--border);background:var(--pf-table-cell-bg,#fff)}table tr:not(.no-hover):nth-child(2n) td{background:var(--light)}table tr:not(.no-hover):hover td{background:var(--mint-100,#eef3fa)}.page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-bottom:12px;gap:16px;flex-wrap:wrap;border-bottom:2px solid var(--border)}.page-header>div{flex-wrap:wrap}.page-header h1 .page-icon{display:inline-flex;align-items:center}.page-header h1 .page-icon img{height:2em!important}.page-header h1{display:flex;align-items:center;gap:.3em;font-size:1.6rem;color:#fff;-webkit-text-stroke:1.5px #000;paint-order:stroke fill;text-shadow:-1.5px -1.5px 0 #000,1.5px -1.5px 0 #000,-1.5px 1.5px 0 #000,1.5px 1.5px 0 #000}.course-subtitle{color:#fff;-webkit-text-stroke:1px #000;paint-order:stroke fill;text-shadow:-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000}.footer{text-align:center;padding:16px;color:var(--pf-footer-text,#000);font-size:.85rem;border-top:none;background:var(--white);opacity:1;margin-top:64px}.footer a{color:var(--pf-footer-link,#000)}.show-mobile{display:none!important}.show-mobile-inline{display:none!important}@media (max-width:768px){.navbar{height:auto;flex-direction:column;padding:0!important;gap:0;min-height:0!important}.navbar-menu{flex-wrap:wrap;justify-content:center}.navbar-menu a{font-size:.85rem;padding:6px 10px}.navbar-top{padding:0!important;height:44px!important;min-height:44px!important;width:100%;position:relative;display:flex!important;align-items:center!important;justify-content:center!important;background:0 0!important}#menu-toggle{padding:0!important;margin:0!important;font-size:3.1rem!important;position:absolute;left:10px;top:50%;transform:translateY(-50%);width:44px;text-align:center}.navbar-brand{margin:0 auto!important}.container{padding:8px 12px;max-width:100%}.page-header{flex-direction:row!important;align-items:center!important;justify-content:space-between!important;gap:8px;padding-top:4px}.page-header h1 .page-icon,.page-header h1 img{transform-origin:center center}.page-header>div{justify-content:flex-end;flex-wrap:wrap!important;flex-shrink:0}.page-header h1{font-size:1.7rem;display:grid!important;grid-template-columns:auto 1fr;align-items:center;gap:.3em;flex:1;min-width:0;white-space:normal!important;overflow:visible!important;text-overflow:clip!important}.page-header h1 .page-icon img{height:1em!important}.page-header h1.h1-saisie{font-size:1.8rem!important;-webkit-text-stroke:1.5px #000!important;text-shadow:-1.5px -1.5px 0 #000,1.5px -1.5px 0 #000,-1.5px 1.5px 0 #000,1.5px 1.5px 0 #000!important}.course-subtitle{font-size:.95rem!important}.card{padding:14px;margin-bottom:12px}.card-title{font-size:.95rem;margin-bottom:10px;padding-bottom:8px}table{font-size:.85rem}table td,table th{padding:6px 4px}.footer-grid{display:flex!important;flex-direction:column!important;align-items:center!important;text-align:center!important;gap:4px!important}.footer-grid>div:last-child{text-align:center!important;display:flex!important;flex-direction:column!important;align-items:center!important}.footer{padding:12px 0!important;margin-top:48px!important}.footer .container{padding:0 12px!important}.footer div,.footer p{font-size:.75rem!important}.footer .card-title{font-size:.8rem!important;margin-bottom:6px!important}.footer-link-contact,.footer-link-nouveautes{font-size:.8rem!important}.footer-col-contact{display:none!important}.footer-links-mobile{display:none!important}.footer-col-nouveautes{display:flex!important;flex-direction:column!important;align-items:center!important;gap:6px!important}.grid-2-responsive{grid-template-columns:1fr!important}.grid-3-responsive{grid-template-columns:1fr!important}.contact-grid{grid-template-columns:1fr!important}.contact-grid .card{order:0!important}.contact-name-email{grid-template-columns:1fr!important}.stats-nav{grid-template-columns:repeat(4,1fr)!important}.page-header .btn-secondary{font-size:1.1rem!important;padding:6px 12px!important}.page-header .btn:not(.btn-secondary){font-size:.95rem!important;padding:6px 12px!important}.btn-secondary .btn-label{display:none!important}.live-nav-label{display:none!important}.live-nav-btn{padding:10px 14px!important}.live-nav-btn .btn-arrow{font-size:1.6rem!important}.dashboard-identity{flex-direction:column!important}.dashboard-identity .card{min-width:0!important}.coach-header{flex-wrap:wrap!important}.coach-header>div:first-child{flex:1 0 100%!important}.coach-header-actions{flex:1 0 100%!important;align-self:flex-start!important}.coach-back-btn{flex-shrink:0!important;align-self:center!important}.btn.btn-secondary.coach-back-btn .btn-label{display:none!important}.coach-nav{grid-template-columns:repeat(4,1fr)!important;gap:4px!important}.coach-nav a{font-size:.88rem!important;padding:6px 4px!important}canvas{max-height:220px}}@media (max-width:480px){.recap-summary-row{gap:16px!important}.dashboard-banner{font-size:.82rem!important}.container{padding:4px 10px}.page-header{padding-top:4px}.page-header h1{font-size:1.6rem}.page-header h1 .page-icon img{height:.9em!important}.page-header h1.h1-saisie{font-size:1.6rem!important}.card{padding:10px;margin-bottom:10px}.card-title{font-size:.88rem}.btn{padding:8px 14px;font-size:.88rem}.btn-sm{padding:6px 10px;font-size:.78rem}table{font-size:.75rem}table td,table th{padding:5px 3px}.kpi-value{font-size:1.8rem!important}.kpi-grid-3{grid-template-columns:1fr 1fr 1fr!important;gap:6px!important}.kpi-grid-3 .card{padding:10px 6px!important}.kpi-grid-4{grid-template-columns:1fr 1fr!important;gap:6px!important}.kpi-grid-4 .card{padding:10px 6px!important}.admin-nav{grid-template-columns:repeat(4,1fr)!important;gap:5px!important}.admin-nav>*{min-width:0!important;overflow:hidden!important}.admin-nav a,.admin-nav button{padding:3px 4px!important;font-size:.72rem!important;min-width:0!important;word-break:break-word!important;hyphens:auto!important}.admin-nav a span:first-child,.admin-nav button span:first-child{font-size:1rem!important}.admin-nav a span:not(:first-child),.admin-nav button span:not(:first-child){overflow:hidden!important;text-overflow:ellipsis!important;display:-webkit-box!important;-webkit-line-clamp:2!important;-webkit-box-orient:vertical!important;line-height:1.15!important}.admin-stats{grid-template-columns:repeat(5,1fr)!important;gap:3px!important;grid-auto-rows:1fr!important}.admin-stats .card{padding:4px 2px!important;min-width:0!important;overflow:hidden!important}.admin-stats .card div:nth-child(2){font-size:.85rem!important;line-height:1.1!important}.admin-stats .card div:nth-child(3){font-size:.55rem!important;line-height:1.15!important;word-break:break-word!important}.admin-stats .card div:nth-child(4){font-size:.5rem!important;line-height:1.1!important}.coach-nav{grid-template-columns:repeat(4,1fr)!important;gap:4px!important}.coach-nav a{padding:6px 4px!important;font-size:.82rem!important}.coach-nav a span:first-child{font-size:1.3rem!important}.stats-nav{grid-template-columns:repeat(4,1fr)!important;gap:4px!important}.stats-nav a{padding:6px 3px!important;font-size:.88rem!important}.stats-nav a span:first-child{font-size:1.3rem!important}.hole-dist{font-size:.4rem!important}.course-info-grid{grid-template-columns:1fr 1fr!important;gap:6px!important;font-size:.75rem!important}.course-info-grid div[style*="grid-column:span 2"]{grid-column:1/-1!important}.hide-mobile{display:none!important}.hide-mobile-inline{display:none!important}.show-mobile{display:block!important}.show-mobile-inline{display:inline-block!important}table.show-mobile{display:table!important}div.show-mobile{display:block!important}table{table-layout:auto!important;width:100%!important}colgroup{display:none!important}.col-fir{width:44px!important}.col-status{width:14px!important;padding:0!important}.col-trou{width:22px!important}.col-par{width:22px!important}.col-score{width:46px!important}.col-putts{width:42px!important}.col-pen{width:42px!important}.col-gir{width:32px!important}.select-input{width:42px!important;padding-right:14px!important;font-size:.82rem!important}.mobile-input{width:36px!important;min-width:36px!important;min-height:32px!important;font-size:.85rem!important;text-align:center!important;padding:3px 1px!important;-moz-appearance:textfield}.mobile-input::-webkit-inner-spin-button,.mobile-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}}.select-input{width:60px;min-height:36px;font-size:.95rem;text-align:center;padding:4px 2px;border:1px solid var(--pf-input-border,#ccc);border-radius:4px;background:var(--pf-input-bg,#fff);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23ccc'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;padding-right:20px}.navbar-top-menu{list-style:none!important;margin:0 0 0 auto!important;padding:0!important;display:flex!important;flex-direction:row!important;gap:2px!important;align-items:center!important}.navbar-top-menu li{list-style:none!important;display:inline-block!important}.navbar-top-menu a{color:rgba(255,255,255,.85)!important;text-decoration:none!important;padding:4px 7px!important;border-radius:4px!important;font-size:.75rem!important;display:block!important;white-space:nowrap!important;transition:background .2s!important}.navbar-top-menu a:hover{background:rgba(255,255,255,.15)!important;color:#fff!important}.navbar>ul{flex:1;min-width:0}.pf-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;padding:16px;animation:pf-modal-fade-in .2s ease}@keyframes pf-modal-fade-in{from{opacity:0}to{opacity:1}}.pf-modal-box{background:var(--pf-modal-bg,#fff);border-radius:12px;max-width:460px;width:100%;padding:28px 24px;box-shadow:0 8px 32px rgba(0,0,0,.3);text-align:center;position:relative;animation:pf-modal-slide-up .25s ease}@keyframes pf-modal-slide-up{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.pf-modal-close{position:absolute;top:8px;right:12px;background:0 0;border:none;font-size:2rem;cursor:pointer;color:var(--pf-modal-close,#595959)}.pf-modal-close:hover{color:#333}.pf-modal-icon{font-size:3.2rem;margin-bottom:8px}.pf-modal-title{color:var(--blue);margin:0 0 12px;font-size:1.8rem;font-weight:700}.pf-modal-body{color:var(--pf-modal-text,#555);font-size:1.4rem;line-height:1.5;margin:0 0 20px;text-align:left}.pf-modal-list{list-style:none;padding:0;margin:10px 0;max-height:180px;overflow-y:auto;text-align:left}.pf-modal-list li{padding:3px 0;font-size:1.3rem;color:var(--pf-modal-list-text,#444)}.pf-modal-list li::before{content:'• ';color:var(--blue);font-weight:700}.pf-modal-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:16px}.pf-modal-btn{padding:14px 28px;border-radius:6px;border:none;font-size:1.4rem;font-weight:700;cursor:pointer;transition:opacity .15s}.pf-modal-btn:hover{opacity:.85}.pf-modal-btn-primary{background:var(--blue);color:#fff}.pf-modal-btn-danger{background:var(--error);color:#fff}.pf-modal-btn-cancel{background:var(--pf-modal-cancel-bg,#6c757d);color:#fff}.text-score-total{color:var(--pf-score-total,#154272)}.icon-select{position:relative;display:inline-block;width:100%}.icon-select-btn{display:flex;align-items:center;gap:8px;width:100%;padding:10px 30px 10px 14px;border:1px solid var(--border);border-radius:var(--radius);font-size:1rem;font-weight:700;font-family:var(--font);background:var(--pf-input-bg,#fff) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;color:var(--pf-input-text,#222);cursor:pointer;min-height:44px;text-align:left;transition:border-color .2s;white-space:nowrap}.icon-select-btn img,.icon-select-option img{flex-shrink:0;margin-right:4px}.icon-select-btn:focus{outline:2px solid var(--blue);outline-offset:2px;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,92,155,.4)}.icon-select-dropdown{display:none;position:absolute;top:100%;left:0;right:0;z-index:50;background:var(--pf-input-bg,#fff);color:var(--pf-input-text,#222);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 4px 12px rgba(0,0,0,.15);margin-top:2px;max-height:260px;overflow-y:auto}.icon-select.open .icon-select-dropdown{display:block}.icon-select-option{display:flex;align-items:center;gap:8px;padding:10px 14px;cursor:pointer;font-size:1rem;font-family:var(--font);white-space:nowrap;transition:background .15s}.icon-select-option:hover{background:var(--pf-select-hover-bg,#f0f4ff)}.icon-select-option.selected{background:var(--pf-select-selected-bg,#e8f0fe);font-weight:700}.stats-filters input[type=date]{color:var(--pf-input-text,#222);background:var(--pf-input-bg,#fff);font-weight:700;min-height:44px}.todo-description{font-family:'Roboto Condensed','Arial Narrow',sans-serif!important;font-stretch:condensed}@media (max-width:440px){*,::after,::before{box-sizing:border-box}body{overflow-x:hidden}canvas,iframe,img,video{max-width:100%!important}img:not([style*=height]){height:auto}.page-header{flex-wrap:wrap!important;gap:6px!important}.page-header>div{flex-wrap:wrap!important;justify-content:flex-end!important}.page-header .btn:not(.btn-secondary) .btn-label{display:inline!important}[style*="display: flex"],[style*="display:flex"]{flex-wrap:wrap!important}table{width:100%!important;table-layout:auto!important}.card{overflow-x:auto}[style*="grid-template-columns: repeat(5"],[style*="grid-template-columns: repeat(6"],[style*="grid-template-columns: repeat(7"],[style*="grid-template-columns: repeat(8"],[style*="grid-template-columns:repeat(5"],[style*="grid-template-columns:repeat(6"],[style*="grid-template-columns:repeat(7"],[style*="grid-template-columns:repeat(8"]{grid-template-columns:repeat(3,1fr)!important}[style*="grid-template-columns: 1fr 1fr"],[style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr!important}[style*="grid-template-columns: repeat(4"],[style*="grid-template-columns:repeat(4"]{grid-template-columns:1fr 1fr!important}[style*="grid-template-columns: repeat(3"],[style*="grid-template-columns:repeat(3"]{grid-template-columns:1fr 1fr!important}input,select,textarea{min-width:0!important;max-width:100%!important}input[type=search],input[type=text]{width:100%!important}.card{overflow-x:auto}#chart-putt-dist-wrapper{height:260px!important}}body{isolation:isolate}body::before{content:'';position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:-1;pointer-events:none}@media (max-width:400px){.kpi-grid-3{grid-template-columns:1fr 1fr!important;gap:4px!important}.kpi-grid-3 .card{padding:8px 4px!important}.kpi-value{font-size:1.5rem!important}}@media (max-width:360px){.btn{padding:5px 8px!important;font-size:0.8rem!important}.btn:not(.btn-sm){min-height:44px!important}.card{padding:10px 8px!important}.modal-content{padding:16px!important}}@media (max-width:480px){h2{font-size:1.2rem!important}h3{font-size:1.05rem!important}}.disp-grid-3{grid-template-columns:1fr 1fr 1fr!important}.btn:has(>img:only-child){padding-left:8px;padding-right:8px}@media (max-width:600px){form[action$="/delete"] .btn-danger{width:40px!important;min-width:40px!important;height:40px!important;padding:0!important;flex:0 0 40px!important;aspect-ratio:1/1}form[action$="/delete"] .btn-danger.btn-sm{width:32px!important;min-width:32px!important;height:32px!important;flex:0 0 32px!important}form[action$="/delete"] .btn-danger .btn-label{display:none!important}form[action$="/delete"] .btn-danger img{height:1.4em!important}.page-header .btn-secondary:has(>.btn-arrow:only-child){width:40px!important;min-width:40px!important;height:40px!important;padding:0!important;flex:0 0 40px!important;aspect-ratio:1/1}.page-header .btn-secondary>.btn-arrow{font-size:1.8rem!important}.training-actions .btn-secondary:has(>.btn-arrow:only-child),.training-back{width:40px!important;min-width:40px!important;height:40px!important;padding:0!important;flex:0 0 40px!important;aspect-ratio:1/1}}
/* Boutons « Ajouter une partie » et boutons logés dans un titre de carte :
   on neutralise le contour/ombre de texte hérité (sinon le libellé du bouton
   reprendrait le contour noir des emojis/titres et deviendrait illisible). */
.btn-add-round,.btn-add-round *,.card-title>.btn,.card-title .btn *{text-shadow:none!important;-webkit-text-stroke:0!important;paint-order:normal!important}
/* Audit S7 (360x640) — anti-overflow horizontal sur /stats/* */
.filters-card{max-width:100%!important;overflow-x:hidden!important}
form#stats-filters-form{max-width:100%!important;min-width:0!important}
form#stats-filters-form>div{max-width:100%!important;min-width:0!important}
@media (max-width:600px){form#stats-filters-form>div{flex-direction:column!important;align-items:stretch!important}form#stats-filters-form .form-group{flex:1 1 100%!important;min-width:0!important;max-width:100%!important;width:100%!important}form#stats-filters-form input[type="date"]{width:calc(100vw - 80px)!important;max-width:calc(100vw - 80px)!important;min-width:0!important;box-sizing:border-box!important;display:block!important}form#stats-filters-form input,form#stats-filters-form select,form#stats-filters-form .icon-select{max-width:100%!important;min-width:0!important;box-sizing:border-box!important}}
@media (max-width:480px){.card>table,.card-body>table,.filters-card table{display:block!important;overflow-x:auto!important;-webkit-overflow-scrolling:touch!important;max-width:100%!important;width:100%!important}.card{max-width:100%!important}}
/* Accessibilité : si l'utilisateur a demandé « moins d'animations » (réglage
   OS), on neutralise quasiment toutes les transitions/animations (.01ms) et on
   coupe explicitement celles des toasts et modales JS. */
@media (prefers-reduced-motion:reduce){*,::before,::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.pf-toast{animation:none!important}.pf-modal-overlay,.pf-modal-box{animation:none!important}}
/* Barre d'onglets stats/coach : empêche tout débordement horizontal (S7). */
.pf-tabnav{max-width:100%!important}
/* Boutons de nav stats/coach : position:relative pose le contexte d'empilement
   pour le z-index ci-dessous ; au hover/focus on remonte le bouton (z-index:20)
   afin que son agrandissement (scale) passe au-dessus des boutons voisins. */
.stats-nav a.stats-nav-btn,.coach-nav a.stats-nav-btn{position:relative}
.stats-nav a.stats-nav-btn:hover,.stats-nav a.stats-nav-btn:focus,.coach-nav a.stats-nav-btn:hover,.coach-nav a.stats-nav-btn:focus{z-index:20}
/* Compact stats/coach nav buttons (hauteur réduite pour gagner de la place verticale) */
.stats-nav a.stats-nav-btn,.coach-nav a.stats-nav-btn{padding:2px 3px!important;gap:3px!important;line-height:1!important;justify-content:center!important;min-height:44px!important}
.stats-nav a.stats-nav-btn .stats-nav-icon,.coach-nav a.stats-nav-btn .stats-nav-icon{font-size:1rem!important;line-height:1!important;margin:0!important;padding:0!important;display:block!important}
.stats-nav a.stats-nav-btn .stats-nav-icon img,.coach-nav a.stats-nav-btn .stats-nav-icon img{height:1.15rem!important;width:auto!important;display:block!important;margin:0!important}
.stats-nav a.stats-nav-btn>span:last-child,.coach-nav a.stats-nav-btn>span:last-child{line-height:1!important;font-size:0.82rem!important;margin:0!important;padding:0!important}
@media (min-width:769px){.stats-nav a.stats-nav-btn,.coach-nav a.stats-nav-btn{padding:3px 4px!important;gap:3px!important}.stats-nav a.stats-nav-btn .stats-nav-icon img,.coach-nav a.stats-nav-btn .stats-nav-icon img{height:1.5rem!important}.stats-nav a.stats-nav-btn>span:last-child,.coach-nav a.stats-nav-btn>span:last-child{font-size:1rem!important}}
/* Bouton Supprimer aligné en hauteur sur ses voisins (parent flex) — mobile & PC */
form[action$="/delete"]{display:flex!important;margin:0!important}

/* Boutons Modifier à 2 états (terminé+cohérent vs incomplet/incohérent) */
.edit-state-ok{background:#c8e6c9!important;border:1px solid #7cc77c!important;color:#1B6B2F!important}
.edit-state-ok:hover{background:#b2dab2!important}
.edit-state-nok{background:#fce4e4!important;border:1px solid #e57373!important;color:#7f1d1d!important}
.edit-state-nok:hover{background:#f8cccc!important}
/* Lignes de tableau cliquables : ouvrent la page de détail au clic n'importe où sur la ligne.
 * Le shadow click (data-click="" data-stop) sur la cellule actions évite que les boutons soient hijackés. */
tr.row-clickable{cursor:pointer;transition:background-color .15s}
@media (hover:hover) and (pointer:fine){tr.row-clickable:hover{background-color:var(--mint-100,#EEF3FA)}}
tr.row-clickable:active td{background:var(--mint-100,#eef3fa)}
/* Boutons retour : juste l'icône — cadre noir + ombre portée directement sur l'image.
   Aucun fond/bordure/box-shadow de bouton autour. Hover scale hérité de .btn. */
.btn.btn-secondary:has(>.btn-arrow:only-child){background:transparent!important;border:none!important;box-shadow:none!important;padding:0!important;color:#000}
.btn.btn-secondary:has(>.btn-arrow:only-child) .btn-arrow img{border:1px solid #000;filter:drop-shadow(2px 2px 3px rgba(0,0,0,.5))}
/* Boutons retour : 2x plus gros en vue PC (>=769px) */
@media (min-width:769px){.btn.btn-secondary:has(>.btn-arrow:only-child) .btn-arrow{font-size:2.59rem}}

/* Popups de recherche (parcours, etc.) : afficher jusqu'à ~20 items
   selon la place disponible. Cap à 65vh sur petit écran, 800px sur grand. */
.sg-golf-list, .pp-golf-list, .pl-golf-list, .pfp-course-list { flex: 1 1 auto !important; max-height: min(800px, 65vh) !important; overflow-y: auto !important; }

/* Variante "success" pour les boutons modale (manquait du ruban primary/danger/cancel) */
.pf-modal-btn-success { background: var(--green); color: #fff; }
.pf-modal-btn-success:disabled { opacity: 0.5; cursor: not-allowed; }


/* Bloc fusionné stats de partie (_round_stats_card.php) — carte récap d'un tour :
   en-tête (parcours + méta), deux gros chiffres clés (.merged-headline en grille
   2 colonnes), puis grille de stats secondaires (.merged-grid, 5 colonnes en
   desktop → 3 colonnes sous 600px via la media query plus bas). */
.merged-card{padding:14px 16px;}
.merged-top{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:baseline;padding-bottom:8px;margin-bottom:10px;border-bottom:1px solid var(--navy-200,#eee);}
.merged-top .course{font-size:1.05rem;font-weight:bold;color:var(--fg-1,#222);line-height:1.2;}
.merged-top .meta{font-size:0.82rem;color:var(--fg-4,#666);line-height:1.4;}
.merged-top .meta strong{color:var(--fg-1,#222);font-weight:600;}
.merged-headline{display:grid;grid-template-columns:1fr 1fr;gap:8px;text-align:center;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--navy-200,#eee);}
.merged-headline .hl-label{display:block;font-size:0.72rem;color:var(--fg-4,#595959);line-height:1;margin-bottom:4px;text-transform:uppercase;letter-spacing:0.5px;}
.merged-headline .hl-value{font-size:2rem;font-weight:bold;color:var(--blue,#1E5C9B);line-height:1;}
.merged-headline .landscape-in-headline{display:none;}
.merged-grid .landscape-in-headline{display:none;}
.meta-hdj-label{display:inline;}.meta-index-end{display:none;}
.stats-row{display:contents;}
.merged-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px 4px;text-align:center;}
.merged-grid .stat-item{padding:2px;}
.merged-grid .stat-item .stat-label{display:block;color:var(--fg-4,#595959);font-size:0.78rem;line-height:1.1;margin-bottom:2px;}
.merged-grid .stat-item strong{font-size:1.05rem;color:var(--fg-1,#222);}
/* <=600px : version compacte de la carte récap (paddings et polices réduits,
   grille de stats passée de 5 à 3 colonnes pour tenir sur mobile S7). */
@media (max-width:600px){
.merged-card{padding:10px 12px;}
.merged-top{gap:4px 12px;padding-bottom:6px;margin-bottom:8px;}
.merged-top .course{font-size:1rem;}
.merged-top .meta{font-size:0.78rem;}
.merged-headline{margin-bottom:8px;padding-bottom:8px;}
.merged-headline .hl-value{font-size:1.75rem;}
.merged-grid{grid-template-columns:repeat(3,1fr);gap:8px 3px;}
.merged-grid .stat-item .stat-label{font-size:0.72rem;}
.merged-grid .stat-item strong{font-size:0.98rem;}
}
/* Libellé « Total » du tableau récap à double version : -d (desktop, libellé
   long) visible par défaut, -m (mobile, libellé court) masqué ; on inverse
   les deux sous 480px pour économiser la largeur. */
.pf-tot-lbl-d{display:table-cell;}.pf-tot-lbl-m{display:none;}
@media (max-width:480px){.pf-tot-lbl-d{display:none!important;}.pf-tot-lbl-m{display:table-cell!important;}}
/* >=481px : colonnes du tableau récap à largeur fixe (alignement régulier). */
@media (min-width:481px){.pf-recap-table{table-layout:fixed!important;}}
/* Bouton « Saisie » : marron foncé spécifique (hors palette --blue/--green),
   assombri au hover. !important pour primer sur les variantes .btn génériques. */
.btn-saisie-entry{background:var(--pf-bnav-dot,#5C4820)!important;color:#fff!important;border-color:var(--pf-bnav-dot,#5C4820)!important;}
.btn-saisie-entry:hover{background:color-mix(in srgb,var(--pf-bnav-dot,#5C4820) 80%,black)!important;border-color:color-mix(in srgb,var(--pf-bnav-dot,#5C4820) 80%,black)!important;}
/* ── Typographie alignée sur le thème Vanilla ── */
:root{
  --font:'Plus Jakarta Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --font-narrow:'Barlow Condensed','Oswald','Arial Narrow',sans-serif;
}
body{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}
h1,h2,h3,h4,h5,h6{font-family:var(--font-narrow);}
h1{font-size:40px;font-weight:700;line-height:1.08;}
h2{font-size:30px;font-weight:700;line-height:1.25;}
h3{font-size:22px;font-weight:600;line-height:1.25;}
@media(max-width:600px){
  :root{--font:'Barlow Semi Condensed','Plus Jakarta Sans',-apple-system,sans-serif;}
  h2{font-size:22px;}
  h3{font-size:18px;}
}
/* ── Révélation de mot de passe (bouton œil, .pf-pw-wrap/.pf-pw-toggle) ──
   Wrapper positionné pour ancrer le bouton DANS le champ (à droite).
   L'input garde width:100% du .form-group ; le padding-right réserve la
   place de l'œil pour que le texte saisi ne passe pas dessous.
   Bascule d'icône pilotée par aria-pressed (état accessibilité = état
   visuel, une seule source de vérité, pas de classe JS supplémentaire). */
.pf-pw-wrap{position:relative}
.pf-pw-wrap input{padding-right:46px}
.pf-pw-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:8px;line-height:0;color:var(--pf-input-text,#555);opacity:.65}
.pf-pw-toggle:hover,.pf-pw-toggle:focus-visible{opacity:1}
.pf-pw-toggle svg{width:20px;height:20px;display:block}
.pf-pw-toggle .pf-pw-icon-hide{display:none}
.pf-pw-toggle[aria-pressed="true"] .pf-pw-icon-show{display:none}
.pf-pw-toggle[aria-pressed="true"] .pf-pw-icon-hide{display:block}

/* ── Ajout d'une boucle sur parcours court ────────────────────────────────
   Bouton « +9 trous » proposé à la fin d'une boucle, à côté de « Terminer ».
   Il vit hors du formulaire de saisie (attribut form=) : sans cette barre, il
   se collerait au contenu précédent sans marge ni centrage. */
.pf-ajout-boucle-barre {
    display: flex;
    justify-content: center;
    margin: 8px 0 12px;
}
.pf-ajout-boucle-form {
    display: none;
}
.pf-ajout-boucle-btn {
    min-height: 44px;      /* cible tactile confortable, y compris à 360px */
    padding: 0 18px;
    font-weight: 700;
    white-space: nowrap;
}
