/* Styles des formulaires modaux génériques (CrudController.jsx, DogFormModal.jsx).
   Anciennement injectés au runtime via document.createElement('style') dans
   chacun de ces deux fichiers (IIFE injectCrudCss / injectDFMCss) — regroupés
   ici tels quels (aucune classe ni valeur modifiée) pour n'avoir qu'un seul
   mécanisme d'injection CSS de moins à maintenir. Lié après app/styles.css
   (et les feuilles spécifiques mobile/client) pour préserver l'ordre de
   cascade d'origine, où le <style> était ajouté en fin de <head> au montage. */

/* ---- CrudController.jsx (namespace cr-*) ---- */
.modal-ov{position:fixed;inset:0;background:rgba(20,12,6,.46);display:grid;place-items:center;z-index:2000;padding:20px;}
.modal{background:var(--surface);color:var(--ink);border:1px solid var(--border);border-radius:var(--r,14px);width:min(560px,100%);max-height: 88vh; max-height: 88dvh;display:flex;flex-direction:column;box-shadow:0 24px 70px rgba(0,0,0,.34);}
.modal-h{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--border);font-weight:700;font-family:var(--font-display);font-size:17px;}
.modal-b{padding:18px;overflow:auto;}
.cr-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px;}
.cr-field{display:flex;flex-direction:column;gap:5px;min-width:0;}
.cr-field.full{grid-column:1/-1;}
.cr-label{font-size:12.5px;font-weight:600;color:var(--ink-3);}
.cr-hint{font-size:11.5px;color:var(--ink-3);line-height:1.4;}
.cr-in{width:100%;padding:9px 11px;border:1px solid var(--border);border-radius:var(--r-sm,9px);background:var(--surface-2);color:var(--ink);font:inherit;font-size:16px;box-sizing:border-box;}
.cr-in:focus{outline:none;border-color:var(--primary);}
textarea.cr-in{min-height:74px;resize:vertical;}
/* Date/heure : l'icone native (calendrier/horloge) colle au bord droit sans
   air ; un peu de marge la recentre visuellement dans le champ. */
input[type="date"].cr-in,input[type="time"].cr-in{padding-right:30px;}
input[type="date"].cr-in::-webkit-calendar-picker-indicator,input[type="time"].cr-in::-webkit-calendar-picker-indicator{margin-left:8px;padding:2px;opacity:.6;}
/* Select : la fleche native varie trop d'un navigateur a l'autre (position,
   taille) ; on la masque et on pose notre propre chevron, cale comme le
   bouton GPS du champ Lieu (meme marge droite, centre verticalement). */
select.cr-select{appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-right:34px;cursor:pointer;}
.cr-select-wrap{position:relative;}
.cr-check{flex-direction:row;align-items:center;gap:9px;}
.cr-check input{width:17px;height:17px;}
.cr-ms{display:flex;flex-wrap:wrap;gap:7px;}
.cr-ms label{display:flex;align-items:center;gap:6px;font-size:13px;border:1px solid var(--border);padding:6px 9px;border-radius:8px;cursor:pointer;background:var(--surface-2);transition:background .12s;}
.cr-ms label.on{border-color:var(--primary);background:var(--primary-soft);color:var(--primary);}
.cr-ms2{display:flex;flex-direction:column;gap:12px;}
.cr-ms-count{font-size:12px;font-weight:700;color:var(--primary);}
.cr-ms-group{display:flex;flex-direction:column;gap:6px;}
.cr-ms-gh{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);}
.cr-ms-list{display:flex;flex-direction:column;gap:7px;}
.cr-ms-item{display:flex;align-items:center;gap:11px;width:100%;text-align:left;padding:11px 13px;border:1.5px solid var(--border-2);border-radius:11px;background:var(--surface-2);color:var(--ink);font:inherit;font-size:14px;cursor:pointer;transition:background .12s,border-color .12s;}
.cr-ms-item:hover{border-color:var(--c-gold);}
.cr-ms-item.on{border-color:var(--primary);background:var(--primary-soft);}
.cr-ms-box{width:22px;height:22px;flex:none;border-radius:6px;border:1.5px solid var(--border-2);background:var(--surface);display:grid;place-items:center;color:#fff;transition:background .12s,border-color .12s;}
.cr-ms-item.on .cr-ms-box{background:var(--primary);border-color:var(--primary);}
.cr-ms-lbl{flex:1;min-width:0;font-weight:600;}
.cr-tags{display:flex;flex-direction:column;gap:9px;}
.cr-tags-chips{display:flex;flex-wrap:wrap;gap:7px;}
.cr-tags-chips:empty{display:none;}
.cr-tag-chip{cursor:pointer;display:inline-flex;align-items:center;gap:7px;padding:7px 7px 7px 12px;border-radius:99px;background:var(--primary-soft);color:var(--primary);font-size:13px;font-weight:600;border:1px solid color-mix(in srgb, var(--primary) 28%, transparent);}
.cr-tag-chip button{border:none;background:color-mix(in srgb, var(--primary) 18%, transparent);color:inherit;width:19px;height:19px;border-radius:50%;display:grid;place-items:center;cursor:pointer;padding:0;flex:none;}
.cr-tag-chip button:active{transform:scale(.9);}
.cr-tags-inwrap{position:relative;}
.cr-presets{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px;}
.cr-preset{border:1px solid var(--border);background:var(--surface);color:var(--ink-2);border-radius:99px;padding:6px 11px;min-height:32px;font:inherit;font-size:13px;font-weight:600;cursor:pointer;}
@media (pointer:coarse){.cr-preset{min-height:42px;padding:9px 16px;font-size:14.5px;}}
.cr-preset:hover{background:var(--surface-3);}
.cr-preset.on{background:var(--primary-soft);color:var(--primary);border-color:color-mix(in srgb, var(--primary) 35%, transparent);}
.cr-tags-pop{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:20;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm,9px);box-shadow:0 12px 32px rgba(0,0,0,.18);max-height:210px;overflow-y:auto;padding:5px;}
.cr-tags-opt{display:flex;align-items:center;gap:9px;width:100%;text-align:left;padding:9px 11px;border:none;background:none;border-radius:7px;font:inherit;font-size:13.5px;font-weight:600;color:var(--ink);cursor:pointer;}
.cr-tags-opt:hover{background:var(--surface-3);}
.cr-media-prev{max-width:100%;max-height:170px;border-radius:9px;border:1px solid var(--border);display:block;}
.cr-media-empty{font-size:13px;color:var(--ink-3);padding:16px;border:1px dashed var(--border-2);border-radius:9px;text-align:center;}
.cr-medias{display:flex;flex-wrap:wrap;gap:8px;}
.cr-thumb{position:relative;width:86px;height:64px;border-radius:8px;overflow:hidden;border:1px solid var(--border);background:var(--surface-2);}
.cr-thumb img,.cr-thumb video{width:100%;height:100%;object-fit:cover;display:block;}
.cr-thumb-x{position:absolute;top:2px;right:2px;width:20px;height:20px;border:none;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;display:grid;place-items:center;cursor:pointer;padding:0;}
.cr-foot{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px;align-items:center;}
.cr-foot-break{flex-basis:100%;height:0;margin:0;padding:0;}
.cr-err{color:var(--st-redo,#c0392b);font-size:13px;margin-top:12px;}
.cr-range{display:flex;align-items:center;gap:10px;}
.cr-range input{flex:1;height:6px;-webkit-appearance:none;appearance:none;background:var(--surface-3);border-radius:99px;outline:none;}
.cr-range input::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--primary);border:2px solid var(--surface);cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.2);}
.cr-range input::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:var(--primary);border:2px solid var(--surface);cursor:pointer;}
.cr-range-val{font-weight:700;font-size:15px;min-width:22px;text-align:center;color:var(--primary);}
@media(max-width:480px){.modal-ov{padding:0;}.modal{width:100%;height:100dvh;max-height:100dvh;border-radius:0;}.modal-h{padding:calc(12px + env(safe-area-inset-top)) 14px 12px;font-size:15px;}.modal-b{padding:12px 12px calc(20px + env(safe-area-inset-bottom));overflow:auto;}.cr-grid{grid-template-columns:1fr;gap:8px;}.cr-in{padding:7px 10px;font-size:16px;}textarea.cr-in{min-height:60px;}.cr-label{font-size:11.5px;}.cr-foot{margin-top:14px;flex-wrap:wrap;row-gap:8px;}}

/* ---- DogFormModal.jsx (namespace dfm-*) ---- */
.dfm-scrim{position:fixed;inset:0;z-index:2000;background:rgba(38,24,12,.52);backdrop-filter:blur(5px);display:grid;place-items:center;padding:20px;}
.dfm-modal{background:var(--surface,#fff);border-radius:26px;box-shadow:0 32px 96px rgba(40,24,10,.44),0 4px 16px rgba(0,0,0,.16);display:flex;flex-direction:column;width:min(760px,96vw);max-height: 92vh; max-height: 92dvh;overflow:hidden;animation:dfmPop .32s cubic-bezier(.2,1,.3,1) both;}
@keyframes dfmPop{from{opacity:0;transform:translateY(16px) scale(.97);}to{opacity:1;transform:none;}}
.dfm-head{flex:none;padding:20px 22px;display:flex;align-items:center;gap:15px;border-bottom:1px solid var(--border,#EBE1D2);background:radial-gradient(130% 180% at 0% -40%,rgba(210,161,95,.20) 0%,transparent 55%),var(--surface,#fff);}
.dfm-av{width:56px;height:56px;border-radius:17px;flex:none;display:grid;place-items:center;color:#fff;font-family:var(--font-display,'Unbounded',sans-serif);font-weight:600;font-size:22px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.18),0 8px 20px rgba(80,48,20,.24);overflow:hidden;}
.dfm-av img{width:100%;height:100%;object-fit:cover;}
.dfm-eyebrow{font-size:11px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:var(--c-brown,#8A4F2B);opacity:.8;}
.dfm-title{font-size:19px;font-family:var(--font-display,'Unbounded',sans-serif);font-weight:600;letter-spacing:-0.02em;margin-top:3px;}
.dfm-close{width:40px;height:40px;border-radius:12px;border:1px solid var(--border,#EBE1D2);background:var(--surface,#fff);color:var(--ink-2,#6E6358);display:grid;place-items:center;cursor:pointer;flex:none;transition:background .14s,transform .1s;}
.dfm-close:hover{background:var(--surface-3,#F3ECE0);color:var(--ink,#1E1A17);}
.dfm-close:active{transform:scale(.94);}
.dfm-body{flex:1;min-height:0;overflow-y:auto;padding:0 22px 6px;}
/* Étapes du formulaire chien (15/10/2026) */
@media(min-width:601px){.dfm-scrim .dfm-modal:has(.dfm-etapes){height: min(760px,92vh); height: min(760px,92dvh);}}
.dfm-etapes{flex:none;display:flex;gap:6px;padding:12px 22px;border-bottom:1px solid var(--border,#EBE1D2);background:var(--surface-2,#FBF7F0);overflow-x:auto;scrollbar-width:none;}
.dfm-etapes::-webkit-scrollbar{display:none;}
.dfm-etape{flex:1;min-width:0;display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:12px;border:1px solid transparent;background:none;font:inherit;font-size:13px;font-weight:700;color:var(--ink-3,#9A8E7F);cursor:pointer;text-align:left;transition:background .15s,color .15s;}
.dfm-etape:hover{background:var(--surface-3,#F3ECE0);}
.dfm-etape-n{flex:none;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:800;background:var(--surface-3,#F3ECE0);color:var(--ink-2,#6E6358);}
.dfm-etape-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.dfm-etape.on{background:var(--surface,#fff);border-color:var(--border,#EBE1D2);color:var(--ink,#1E1A17);box-shadow:0 2px 8px rgba(60,40,20,.08);}
.dfm-etape.on .dfm-etape-n{background:var(--primary,#8A4F2B);color:#fff;}
.dfm-etape.fait{color:var(--ink-2,#6E6358);}
.dfm-etape.fait .dfm-etape-n{background:var(--primary-soft,#F2E7DB);color:var(--primary,#8A4F2B);}
.dfm-body::-webkit-scrollbar{width:9px;}
.dfm-body::-webkit-scrollbar-thumb{background:var(--border-2,#E0D3BF);border-radius:99px;border:3px solid var(--surface,#fff);}
.dfm-err{background:#fde8e7;border:1px solid #e5a9a6;color:#8b2020;border-radius:10px;padding:10px 14px;font-size:13.5px;margin:12px 0;}
.dfm-sec{padding:18px 0 14px;border-bottom:1px solid var(--border,#EBE1D2);}
.dfm-sec:last-of-type{border-bottom:none;}
.dfm-sec-h{display:flex;align-items:center;gap:10px;margin-bottom:14px;}
.dfm-sec-ic{width:30px;height:30px;border-radius:9px;flex:none;display:grid;place-items:center;background:var(--primary-soft,#F2E7DB);color:var(--primary,#8A4F2B);}
.dfm-sec-h h3{font-size:13.5px;font-weight:800;letter-spacing:.02em;margin:0;font-family:var(--font-ui,inherit);}
.dfm-sec-sub{font-size:11.5px;color:var(--ink-3,#9A8E7F);margin-left:auto;font-weight:600;}
.dfm-g2{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px;}
.dfm-field{display:flex;flex-direction:column;gap:6px;min-width:0;}
.dfm-lbl{font-size:12px;font-weight:700;color:var(--ink-2,#6E6358);display:flex;align-items:center;gap:4px;}
.dfm-in{width:100%;border:1.5px solid var(--border-2,#E0D3BF);background:var(--surface-2,#FBF7F0);border-radius:12px;padding:10px 13px;font-size:16px;color:var(--ink,#1E1A17);outline:none;font-family:inherit;transition:border-color .14s,box-shadow .14s,background .14s;}
.dfm-in::placeholder{color:var(--ink-3,#9A8E7F);}
.dfm-in:focus{border-color:var(--primary,#8A4F2B);background:var(--surface,#fff);box-shadow:0 0 0 4px var(--primary-soft,#F2E7DB);}
textarea.dfm-in{resize:vertical;min-height:60px;line-height:1.5;}
.dfm-in-wrap{position:relative;}
input[type="date"].dfm-in{padding-right:30px;}
input[type="date"].dfm-in::-webkit-calendar-picker-indicator{margin-left:8px;padding:2px;opacity:.6;}
.dfm-sfx{position:absolute;right:13px;top:50%;transform:translateY(-50%);font-size:13px;color:var(--ink-3,#9A8E7F);font-weight:600;pointer-events:none;}
.dfm-seg{display:flex;gap:5px;background:var(--surface-3,#F3ECE0);border-radius:12px;padding:4px;}
.dfm-seg button{flex:1;padding:9px 6px;border-radius:8px;font-weight:700;font-size:13.5px;color:var(--ink-2,#6E6358);display:flex;align-items:center;justify-content:center;gap:6px;border:none;background:none;font-family:inherit;cursor:pointer;transition:background .14s,color .14s,box-shadow .14s;}
.dfm-seg button.on{background:var(--surface,#fff);color:var(--ink,#1E1A17);box-shadow:0 1px 4px rgba(60,40,20,.12);}
.dfm-seg.lvl button.on{color:#fff;}
.dfm-tgl-row{display:flex;align-items:center;gap:11px;height:44px;}
.dfm-tgl{width:48px;height:28px;border-radius:99px;background:var(--border-2,#E0D3BF);position:relative;flex:none;cursor:pointer;border:none;padding:0;transition:background .2s;}
.dfm-tgl.on{background:var(--primary,#8A4F2B);}
.dfm-tgl i{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.2);transition:transform .2s cubic-bezier(.3,1.4,.5,1);}
.dfm-tgl.on i{transform:translateX(20px);}
.dfm-chips{display:flex;flex-wrap:wrap;gap:8px;}
.dfm-chip{display:inline-flex;align-items:center;gap:7px;padding:9px 14px;border-radius:99px;border:1.5px solid var(--border-2,#E0D3BF);background:var(--surface,#fff);color:var(--ink-2,#6E6358);font-size:13.5px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .14s;}
.dfm-chip:hover{border-color:var(--c-gold,#D2A15F);}
.dfm-chip.on{background:var(--accent-soft,#FAF0DE);border-color:var(--c-gold,#D2A15F);color:var(--c-brown,#8A4F2B);}
.dfm-chk{width:15px;height:15px;border-radius:5px;display:grid;place-items:center;background:var(--c-gold,#D2A15F);color:#fff;flex:none;}
.dfm-slrow{display:flex;flex-direction:column;gap:6px;}
.dfm-sl-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px;}
.dfm-sl-lbl{font-size:13px;font-weight:600;}
.dfm-sl-r{display:flex;align-items:center;gap:6px;}
.dfm-sl-tag{font-size:11px;font-weight:700;padding:1px 8px;border-radius:99px;}
.dfm-sl-n{font-family:var(--font-display,'Unbounded',sans-serif);font-weight:600;font-size:14px;min-width:16px;text-align:right;}
.dfm-steps{display:flex;gap:6px;}
.dfm-step{flex:1;min-width:0;height:38px;border-radius:11px;border:1px solid var(--border,#EBE1D2);background:var(--surface-2,#FBF7F0);color:var(--ink-3,#9A8F84);font:inherit;font-size:13.5px;font-weight:700;cursor:pointer;transition:background .15s,color .15s,border-color .15s,transform .1s;-webkit-tap-highlight-color:transparent;touch-action:manipulation;}
.dfm-step:hover{border-color:var(--c);}
.dfm-step:active{transform:scale(.94);}
.dfm-step.in{background:var(--surface-3,#F3ECE0);background:color-mix(in srgb,var(--c) 18%,var(--surface,#fff));border-color:transparent;color:var(--ink-2,#6E6358);}
.dfm-step.on{background:var(--c);border-color:var(--c);color:#fff;box-shadow:0 4px 12px rgba(60,40,20,.18);}
.dfm-step:focus-visible{outline:2px solid var(--c);outline-offset:2px;}
.dfm-drop{border:2px dashed var(--border-2,#E0D3BF);border-radius:14px;background:var(--surface-2,#FBF7F0);padding:18px 20px;display:flex;align-items:center;gap:14px;cursor:pointer;transition:border-color .15s,background .15s;}
.dfm-drop:hover{border-color:var(--c-gold,#D2A15F);background:var(--accent-soft,#FAF0DE);}
.dfm-drop-ic{width:44px;height:44px;border-radius:12px;flex:none;display:grid;place-items:center;background:var(--primary-soft,#F2E7DB);color:var(--primary,#8A4F2B);}
.dfm-photo{border-radius:14px;overflow:hidden;border:1px solid var(--border,#EBE1D2);position:relative;}
.dfm-photo img{width:100%;height:150px;object-fit:cover;display:block;}
.dfm-photo-rm{position:absolute;top:9px;right:9px;width:30px;height:30px;border-radius:9px;background:rgba(20,12,6,.62);color:#fff;display:grid;place-items:center;backdrop-filter:blur(4px);border:none;cursor:pointer;}
.dfm-ac-pop{position:absolute;top:calc(100% + 5px);left:0;right:0;z-index:8;background:var(--surface,#fff);border:1px solid var(--border,#EBE1D2);border-radius:13px;box-shadow:0 14px 36px rgba(40,24,10,.18);padding:5px;max-height:min(260px,calc(var(--dfm-h,100dvh) * .42));-webkit-overflow-scrolling:touch;overscroll-behavior:contain;overflow-y:auto;}
.dfm-ac-item{width:100%;text-align:left;padding:9px 11px;border-radius:9px;font-size:13.5px;font-weight:600;color:var(--ink,#1E1A17);display:flex;align-items:center;gap:9px;border:none;background:none;font-family:inherit;cursor:pointer;}
.dfm-ac-item:hover{background:var(--surface-3,#F3ECE0);}
.dfm-ac-dot{width:20px;height:20px;border-radius:6px;flex:none;}
.dfm-ac-new{color:var(--primary,#8A4F2B);border-bottom:1px solid var(--border,#EBE1D2);border-radius:9px 9px 0 0;margin-bottom:2px;}
.dfm-ac-new:hover{background:var(--primary-soft,#F2E7DB);}
.dfm-foot{flex:none;border-top:1px solid var(--border,#EBE1D2);padding:14px 22px;display:flex;align-items:center;gap:10px;background:var(--surface,#fff);}
.dfm-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:12px;padding:11px 18px;font-weight:700;font-size:14px;border:1.5px solid transparent;cursor:pointer;font-family:inherit;transition:transform .08s,background .14s,box-shadow .14s;}
.dfm-btn:active{transform:translateY(1px);}
.dfm-btn:disabled{opacity:.5;cursor:not-allowed;}
.dfm-btn-primary{background:var(--primary,#8A4F2B);color:#fff;box-shadow:0 8px 20px rgba(138,79,43,.26);}
.dfm-btn-primary:hover:not(:disabled){background:var(--primary-press,#774225);}
.dfm-btn-ghost{background:var(--surface,#fff);border-color:var(--border-2,#E0D3BF);color:var(--ink,#1E1A17);}
.dfm-btn-ghost:hover:not(:disabled){background:var(--surface-3,#F3ECE0);}
.dfm-btn-trash{width:42px;height:42px;border-radius:12px;border:1.5px solid var(--danger,#C0392B);background:var(--surface,#fff);color:var(--danger,#C0392B);display:grid;place-items:center;cursor:pointer;flex:none;transition:background .14s,transform .08s;}
.dfm-btn-trash:hover:not(:disabled){background:rgba(192,57,43,.08);}
.dfm-btn-trash:active{transform:translateY(1px);}
.dfm-btn-trash:disabled{opacity:.5;cursor:not-allowed;}
.dfm-cf-scrim{position:fixed;inset:0;z-index:2100;background:rgba(38,24,12,.55);backdrop-filter:blur(3px);display:grid;place-items:center;padding:20px;animation:dfmFade .18s ease both;}
@keyframes dfmFade{from{opacity:0}to{opacity:1}}
.dfm-cf{background:var(--surface,#fff);border-radius:22px;box-shadow:0 30px 80px rgba(40,24,10,.45);width:min(380px,94vw);padding:24px 24px 22px;text-align:center;animation:dfmPop .26s cubic-bezier(.2,1,.3,1) both;}
.dfm-cf-ic{width:54px;height:54px;border-radius:16px;margin:0 auto 16px;display:grid;place-items:center;background:rgba(192,57,43,.12);color:var(--danger,#C0392B);}
.dfm-cf h4{font-family:var(--font-display,'Unbounded',sans-serif);font-size:18px;font-weight:600;margin:0 0 8px;color:var(--ink,#1E1A17);}
.dfm-cf p{font-size:13.5px;color:var(--ink-2,#6E6358);line-height:1.55;margin:0 0 20px;}
.dfm-cf-actions{display:flex;gap:10px;}
.dfm-cf-actions>*{flex:1;}
.dfm-btn-danger-solid{background:var(--danger,#C0392B);color:#fff;box-shadow:0 8px 20px rgba(192,57,43,.26);}
.dfm-btn-danger-solid:hover:not(:disabled){background:#a8311f;}
@media(max-width:600px){
  .dfm-scrim{padding:0;align-items:flex-end;}
  .dfm-modal{border-radius:22px 22px 0 0;max-height:96vh;max-height:calc(var(--dfm-h,100dvh) - 12px);max-height:calc(var(--dfm-h,100dvh) - max(12px, env(safe-area-inset-top,0px) + 8px));width:100%;max-width:100%;}
  .dfm-g2{grid-template-columns:1fr;}
  .dfm-head{padding:16px;}
  .dfm-body{padding:0 16px 6px;}
  .dfm-etapes{padding:10px 12px;gap:4px;}
  .dfm-etape{padding:7px 6px;gap:6px;font-size:12px;}
  .dfm-etape:not(.on) .dfm-etape-l{display:none;}
  .dfm-etape:not(.on){flex:0 0 auto;}
  .dfm-foot{padding:12px 16px;padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));gap:8px;}
  .dfm-foot .dfm-btn{padding:10px 13px;font-size:13.5px;gap:6px;min-height:44px;}
  .dfm-foot .dfm-btn svg{width:15px;height:15px;}
}

/* Champ nombre avec boutons − / + (durée d'un rendez-vous, 08/10/2026) : flèches natives masquées, saisie libre. */
.cr-stepper{display:flex;align-items:stretch;gap:6px;}
.cr-stepper .cr-in{text-align:center;-moz-appearance:textfield;appearance:textfield;min-width:0;}
.cr-stepper .cr-in::-webkit-outer-spin-button,.cr-stepper .cr-in::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
.cr-step{flex:none;width:44px;border:1px solid var(--border);background:var(--surface);color:var(--primary);border-radius:var(--r-sm,9px);font:inherit;font-size:22px;font-weight:700;line-height:1;cursor:pointer;}
.cr-step:hover{background:var(--surface-3);}
.cr-step:active{background:var(--primary-soft);}


/* Fiche chien créée (15/10/2026, revue le même jour) : petite carte centrée sur le formulaire flouté
   (avant : toute la fenêtre en blanc, très vide sur ordinateur). Avatar du chien + coche qui se dessine + confettis. */
.dfm-modal{position:relative;}
.dfm-cree{position:absolute;inset:0;z-index:20;display:grid;place-items:center;padding:24px;background:rgba(251,247,240,.72);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:inherit;cursor:pointer;animation:dfmCreeFond .25s ease both;}
.dfm-cree-carte{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;background:var(--surface,#fff);border:1px solid var(--border,#EBE1D2);border-radius:24px;padding:30px 40px 26px;box-shadow:0 24px 60px rgba(40,24,10,.22);animation:dfmCreePop .5s cubic-bezier(.2,1.5,.4,1) .05s both;max-width:360px;}
.dfm-cree-av{position:relative;width:92px;height:92px;margin-bottom:10px;}
.dfm-cree-photo{width:92px;height:92px;border-radius:26px;display:grid;place-items:center;overflow:hidden;color:#fff;font-family:var(--font-display,'Unbounded',sans-serif);font-weight:600;font-size:34px;box-shadow:0 10px 24px rgba(80,48,20,.25);}
.dfm-cree-photo img{width:100%;height:100%;object-fit:cover;}
.dfm-cree-rond{position:absolute;right:-10px;bottom:-10px;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:var(--st-done,#3E9C6B);border:3px solid var(--surface,#fff);box-shadow:0 6px 16px rgba(62,156,107,.35);animation:dfmCreePop .45s cubic-bezier(.2,1.6,.4,1) .3s both;}
.dfm-cree-coche{stroke-dasharray:40;stroke-dashoffset:40;animation:dfmCreeTrait .35s ease-out .6s forwards;}
.dfm-cree-titre{font-family:var(--font-display,'Unbounded',sans-serif);font-weight:600;font-size:21px;line-height:1.25;color:var(--ink,#1E1A17);margin-top:6px;animation:dfmCreeMonte .4s ease .45s both;}
.dfm-cree-sous{font-size:14.5px;color:var(--ink-2,#6E6358);animation:dfmCreeMonte .4s ease .55s both;}
.dfm-cree-fete{position:absolute;left:50%;top:50%;width:0;height:0;margin-top:-30px;}
.dfm-cree-fete i{position:absolute;width:9px;height:9px;border-radius:3px;left:-4px;top:-4px;opacity:0;transform:rotate(var(--a)) translateY(0);animation:dfmCreeConfetti .9s cubic-bezier(.15,.8,.3,1) calc(.35s + var(--d)) forwards;}
.dfm-cree-fete i:nth-child(3n+1){background:var(--c-gold,#D2A15F);}
.dfm-cree-fete i:nth-child(3n+2){background:var(--primary,#8A4F2B);}
.dfm-cree-fete i:nth-child(3n){background:var(--st-done,#3E9C6B);border-radius:50%;}
@keyframes dfmCreeFond{from{opacity:0}to{opacity:1}}
@keyframes dfmCreePop{from{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes dfmCreeTrait{to{stroke-dashoffset:0}}
@keyframes dfmCreeMonte{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes dfmCreeConfetti{0%{opacity:1;transform:rotate(var(--a)) translateY(0) scale(1)}100%{opacity:0;transform:rotate(var(--a)) translateY(-170px) scale(.6)}}
@media (prefers-reduced-motion: reduce){.dfm-cree,.dfm-cree-carte,.dfm-cree-rond,.dfm-cree-titre,.dfm-cree-sous{animation:none}.dfm-cree-coche{animation:none;stroke-dashoffset:0}.dfm-cree-fete{display:none}}
@media (max-width:600px){.dfm-cree-carte{padding:26px 26px 22px;}}

/* Validation d'exercice à 3 états (15/10/2026) : non acquis → en cours → acquis */
.valcase{display:inline-flex;align-items:center;gap:9px;flex:none;min-width:128px;padding:5px 12px 5px 5px;border-radius:12px;border:1.5px solid var(--border-2,#E0D3BF);background:var(--surface,#fff);font:inherit;font-size:13px;font-weight:700;color:var(--ink-2,#6E6358);cursor:pointer;transition:background .15s,border-color .15s,color .15s,transform .1s;-webkit-tap-highlight-color:transparent;touch-action:manipulation;}
.valcase:hover{border-color:var(--ink-3,#9A8E7F);}
.valcase:active{transform:scale(.96);}
.valcase.busy{opacity:.6;cursor:progress;}
.valcase-box{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;flex:none;border:2.5px solid #B5A795;background:#fff;color:#fff;animation:valcasePop .28s cubic-bezier(.2,1.6,.4,1);}
.valcase.en_cours{border-color:#E7B57A;background:#FDF3E6;color:#9A5B17;}
.valcase.en_cours .valcase-box{border-color:#D98E2E;background:#D98E2E;}
.valcase.acquis{border-color:#9FD0B3;background:var(--st-done-bg,#E7F3EC);color:var(--st-done,#2F7D55);}
.valcase.acquis .valcase-box{border-color:var(--st-done,#3E9C6B);background:var(--st-done,#3E9C6B);}
.valcase:focus-visible{outline:2px solid var(--primary,#8A4F2B);outline-offset:2px;}
@keyframes valcasePop{from{transform:scale(.6)}to{transform:scale(1)}}
@media (prefers-reduced-motion: reduce){.valcase-box{animation:none}}
/* Mobile : le contenu d'un formulaire ne doit jamais pouvoir glisser de gauche à droite (iPhone). Un champ date ou heure natif est plus large
   que sa colonne : la colonne doit pouvoir rétrécir, et la fenêtre ne défile que verticalement. */
@media(max-width:480px){.modal-b{overflow-x:hidden;overflow-y:auto;overscroll-behavior-x:none;}.cr-grid{grid-template-columns:minmax(0,1fr);}.cr-in{min-width:0;max-width:100%;}}
/* Mobile : la confirmation de suppression est une petite carte centrée, pas un plein écran (son icône du haut passait sous l'encoche de l'iPhone). */
@media(max-width:480px){.modal-ov.modal-ov-confirm{padding:max(24px,env(safe-area-inset-top)) 24px max(24px,env(safe-area-inset-bottom));place-items:center;}.modal-ov-confirm .modal{height:auto;max-height:calc(100dvh - 48px);border-radius:20px;}}
/* Champ obligatoire manquant : bloc encadré en rouge (19/10/2026). L'outline ne décale rien dans la grille. */
.cr-field-err{outline:2px solid #C0392B;outline-offset:7px;border-radius:12px;animation:cr-field-err-in .35s ease}
.cr-field-err .cr-label{color:#C0392B}
.cr-field-err .cr-in,.cr-field-err .cr-dog-btn,.cr-field-err button.cr-select{border-color:#C0392B}
.cr-field-msg{display:block;color:#C0392B;font-size:13px;font-weight:600;margin-top:6px}
@keyframes cr-field-err-in{0%{transform:translateX(0)}25%{transform:translateX(-5px)}50%{transform:translateX(5px)}75%{transform:translateX(-3px)}100%{transform:translateX(0)}}
@media (prefers-reduced-motion:reduce){.cr-field-err{animation:none}}
