@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@500;600&family=Montserrat:wght@400;500;600&display=swap');

:root{--ink:#292522;--muted:#817a73;--line:#e9e3dd;--soft:#faf7f4;--rose2:#f5ece8;--gold:#b18a50;--white:#fff}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:Montserrat,Arial,sans-serif;color:var(--ink);background:#fff}
button,input,select,textarea{font:inherit}
button{cursor:pointer}
.app{max-width:1500px;margin:auto;padding:18px 3vw 70px}
.builder{display:grid;grid-template-columns:minmax(0,56%) minmax(390px,44%);border:1px solid var(--line);align-items:start}
.options-column{border-right:1px solid var(--line)}
.config-section{border-bottom:1px solid var(--line)}
.section-title{width:100%;display:grid;grid-template-columns:48px 1fr 24px;gap:14px;align-items:center;border:0;background:#fff;padding:19px 26px;text-align:left}
.section-title:hover{background:#fdfbf9}
.section-number{width:42px;height:42px;border:1px solid #d9c8c0;border-radius:50%;display:grid;place-items:center;font-family:"Cormorant Garamond",serif;font-size:20px}
.section-title>span:nth-child(2){font-family:"Cormorant Garamond",serif;font-size:25px}
.section-title small{display:block;font-family:Montserrat,sans-serif;font-size:8px;letter-spacing:.18em;color:#a28c80;margin-bottom:2px}
.section-title b{font-weight:400;color:#999;font-size:18px}
.section-body{padding:2px 32px 30px 90px}
.config-section:not(.open) .section-body{display:none}
.tile-grid{display:grid;gap:10px}.type-grid{grid-template-columns:repeat(3,1fr)}.shape-grid{grid-template-columns:repeat(3,1fr)}
.tile{position:relative;border:1px solid var(--line);background:#fff;min-height:140px;padding:18px 10px 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;transition:.2s}
.tile:hover,.tile.selected{border-color:#b79483;box-shadow:inset 0 0 0 1px #b79483}
.tile.selected:after{content:"✓";position:absolute;right:8px;top:8px;width:19px;height:19px;border-radius:50%;background:#b79483;color:#fff;font-size:10px;display:grid;place-items:center}
.tile strong{font-size:10px;font-weight:500;text-align:center}.tile em{font-size:8px;font-style:normal;color:#a59890}
.tile.disabled{opacity:.42;cursor:not-allowed}
.jewel-icon{display:block;width:58px;height:58px;border:2px solid #c49b55;background:linear-gradient(135deg,#f8e7ab,#bd8a30);box-shadow:inset 0 0 0 5px rgba(255,255,255,.32)}
.medal-icon{border-radius:50%}.identity-icon{width:72px;height:30px;border-radius:12px}.ring-icon{border-radius:50%;background:none;border-width:8px}
.shape-grid .tile.product-tile{padding:0;overflow:hidden;justify-content:flex-start;min-height:190px}
.product-thumb-wrap{height:145px;width:100%;overflow:hidden;background:#e9e9e9;display:grid;place-items:center}
.product-thumb{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s}
.product-tile:hover .product-thumb{transform:scale(1.035)}
.product-meta{width:100%;padding:10px;text-align:left}.product-meta strong{display:block}.product-meta small{display:block;font-size:8px;color:#999;margin-top:3px}
.option-row{display:grid;grid-template-columns:190px 1fr;gap:18px;padding:18px 0;border-top:1px solid #f1ede9;align-items:center}
.label strong{font-size:11px}.label small{display:block;color:#999;font-size:9px;margin-top:4px}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip,.metal{border:1px solid #ddd5cf;background:#fff;padding:10px 13px;font-size:10px;min-width:92px}
.chip.active,.metal.active{border-color:#9e7c6b;background:#fbf6f3}
.metal i{display:inline-block;width:13px;height:13px;border-radius:50%;background:#d6aa4c;margin-right:6px;vertical-align:-2px}.metal.white i{background:#e0e0e0;border:1px solid #ccc}.metal.rose i{background:#d89c8e}
.metal:disabled{opacity:.3;cursor:not-allowed}
select,textarea,input{border:1px solid #ded7d1;background:#fff;padding:12px;width:100%;outline:none;font-size:11px}
.qty{display:inline-grid;grid-template-columns:38px 42px 38px;border:1px solid #ded7d1;width:max-content}.qty button{border:0;background:#fff}.qty span{display:grid;place-items:center;font-size:11px}
.hidden{display:none!important}
.face-switch{display:flex;border-bottom:1px solid var(--line);margin-bottom:18px}.face-switch button{flex:1;border:0;background:#fff;padding:12px;font-size:9px;letter-spacing:.14em}.face-switch button.active{background:#332e2a;color:#fff}
.engraving-tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:20px}.engraving-tabs button{border:1px solid var(--line);background:#fff;padding:11px 7px;font-size:9px}.engraving-tabs button.active{background:var(--rose2);border-color:#d9bfb4}
.engraving-panel{display:none}.engraving-panel.active{display:block}
.engraving-panel label{font-size:10px;font-weight:600;display:flex;justify-content:space-between;margin:12px 0 7px}.engraving-panel label span{color:#aaa;font-weight:400}
.font-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.font{border:1px solid var(--line);background:#fff;padding:8px;font-size:8px}.font span{display:block;font-size:24px}.font.active{border-color:#a58474;background:#fbf6f3}
.savoye,.text-preview.savoye,#curvedTextElement.savoye{font-family:"Savoye LET","Segoe Script","Brush Script MT",cursive}
.lucida,.text-preview.lucida,#curvedTextElement.lucida{font-family:"Lucida Calligraphy","URW Chancery L","Segoe Script",cursive}
.english,.text-preview.english,#curvedTextElement.english{font-family:"English","Edwardian Script ITC","Brush Script MT",cursive}
.slider-row{display:grid;grid-template-columns:90px 1fr;align-items:center;margin-top:14px}.slider-row label{margin:0}.slider-row input{padding:0;border:0}
.toggle-line{justify-content:flex-start!important;gap:8px;align-items:center;font-weight:400!important}.toggle-line input{width:auto}.curve-controls{padding:8px 12px 14px;background:#fbf8f5;border:1px solid #eee5df}.curve-controls small{display:block;font-size:8px;color:#8d8179;line-height:1.5;margin-top:9px}
.panel-help{font-size:10px;color:#888}
.illustration-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.motif{height:120px;border:1px solid var(--line);background:#fff;padding:8px;display:flex;flex-direction:column;align-items:center;justify-content:center}.motif.selected{border-color:#a58474;background:#fbf6f3}.motif img{max-width:85%;max-height:82px;object-fit:contain}.motif small{font-size:8px;color:#777;margin-top:4px}.none-mark{font-size:30px;color:#aaa}
.upload-zone{border:1px dashed #cfc2ba;min-height:150px;display:flex!important;flex-direction:column;align-items:center;justify-content:center;background:#fcfaf8;cursor:pointer}.upload-zone span{font-size:24px!important}.upload-zone strong{font-size:11px}.upload-zone small{font-size:9px;color:#999}.upload-zone input{display:none}
.request-label{font-size:11px;font-weight:600;display:block;margin:4px 0 8px}.recap{margin-top:18px;border-top:1px solid var(--line)}.recap-row{display:flex;justify-content:space-between;gap:20px;border-bottom:1px solid var(--line);padding:9px 0;font-size:9px}.recap-row span{color:#888}.print-btn{margin-top:18px;border:1px solid #302b27;background:#fff;padding:12px 18px;font-size:9px;letter-spacing:.08em}

.preview-column{background:#fbf9f7;min-height:100%}.preview-sticky{position:sticky;top:0;padding:26px 30px 22px}
.preview-topline{display:flex;justify-content:space-between;align-items:center;color:#9b918a;font-size:8px;letter-spacing:.15em}.preview-topline button{border:0;background:none;color:#91867f;font-size:8px}
.canvas{height:610px;display:grid;place-items:center;position:relative;overflow:hidden;background:#efefef;margin:18px 0}
.product-visual-wrap{width:min(94%,590px);height:min(94%,590px);position:relative;display:grid;place-items:center;z-index:2}
.product-visual{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;display:block}
.image-engraving{position:absolute;inset:0;overflow:visible;pointer-events:none}
.text-preview{position:absolute;left:50%;top:55%;transform:translate(-50%,-50%);font-size:22px;max-width:48%;text-align:center;word-break:break-word;color:#6f5737;mix-blend-mode:multiply}
.model-M504J .text-preview{top:67%;max-width:46%}
.curved-text-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.curved-text-svg text{fill:#6f5737;mix-blend-mode:multiply}
.catalog-illustration,.uploaded{position:absolute;left:50%;top:48%;transform:translate(-50%,-50%);object-fit:contain;opacity:.82;filter:sepia(.6) saturate(.45) brightness(.55);mix-blend-mode:multiply}
.side-label{position:absolute;right:15px;bottom:14px;font-size:7px;letter-spacing:.15em;color:#aaa}.side-label strong{color:#4d4640}
.preview-info{padding:8px 4px 18px;border-bottom:1px solid var(--line)}.preview-category{font-size:8px;letter-spacing:.14em;color:#a18c80;margin:0 0 6px}.preview-info h2{font-family:"Cormorant Garamond",serif;font-size:27px;font-weight:500;margin:0}.product-ref{font-size:8px;letter-spacing:.1em;color:#aaa;margin:3px 0}
.cta{width:100%;border:0;background:#322d29;color:#fff;padding:16px 18px;font-size:9px;letter-spacing:.13em;display:flex;justify-content:space-between;margin-top:18px}.prototype{text-align:center;color:#aaa;font-size:7px}
.chain{position:absolute;width:75%;height:320px;z-index:1}.chain-oval{position:absolute;inset:0;border:4px dotted #c59c50;border-radius:50%}.spacer-dot{position:absolute;width:15px;height:15px;background:#d5ad5d;border-radius:50%;left:50%;top:3%}
@media(max-width:1050px){.builder{grid-template-columns:1fr}.options-column{border-right:0}.preview-column{grid-row:1}.preview-sticky{position:relative}.canvas{height:460px}}
@media(max-width:650px){.app{padding:8px 10px 50px}.preview-sticky{padding:12px}.canvas{height:350px}.section-title{padding:15px 12px;grid-template-columns:38px 1fr 18px}.section-number{width:34px;height:34px}.section-title>span:nth-child(2){font-size:21px}.section-body{padding:2px 12px 24px 64px}.type-grid{grid-template-columns:1fr 1fr}.shape-grid{grid-template-columns:repeat(2,1fr)}.option-row{grid-template-columns:1fr;gap:9px}.engraving-tabs{grid-template-columns:1fr}.font-cards{grid-template-columns:1fr}.illustration-grid{grid-template-columns:1fr 1fr}}
@media print{.options-column,.preview-topline,.cta,.prototype{display:none!important}.app{padding:0}.builder{display:block;border:0}.preview-column{background:#fff}.preview-sticky{position:relative}}

.editor-hint{display:flex;justify-content:space-between;gap:12px;align-items:center;font-size:9px;color:#827871;margin:14px 0 8px}.editor-hint strong{color:#332e2a}.editor-hint span{text-align:right}
.direct-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 0 10px;font-size:9px}.direct-tools span{margin-right:auto}.direct-tools button{border:1px solid #ddd5cf;background:#fff;padding:7px 9px;font-size:8px}
.transform-fields{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:16px}.transform-fields label{font-size:8px!important;margin:0!important;display:block!important}.transform-fields input{padding:7px;margin-top:4px}
.image-engraving{pointer-events:none}
.edit-object{position:absolute;left:50%;top:55%;width:220px;height:100px;transform-origin:center center;pointer-events:auto;touch-action:none;cursor:move;z-index:5}
.edit-object .object-content{position:absolute;inset:0;display:grid;place-items:center;overflow:visible}
.edit-object.selected-object{outline:1px dashed rgba(75,63,52,.75)}
.transform-handle{display:none;position:absolute;width:28px;height:28px;border-radius:50%;border:1px solid #78685d;background:#fff;color:#40362f;align-items:center;justify-content:center;font-size:12px;z-index:10;padding:0}
.selected-object .transform-handle{display:flex}
.resize-handle{right:-15px;bottom:-15px;cursor:nwse-resize}.rotate-handle{right:-15px;top:-38px;cursor:grab}
.edit-object .text-preview{position:static;left:auto;top:auto;transform:none;max-width:none;width:100%;white-space:nowrap}
.edit-object .curved-text-svg{position:absolute;inset:0;width:100%;height:100%}
.illustration-object,.upload-object{width:110px;height:110px}
.edit-object .catalog-illustration,.edit-object .uploaded{position:static;left:auto;top:auto;transform:none;width:100%!important;height:100%!important;max-width:100%;max-height:100%;filter:sepia(.6) saturate(.45) brightness(.55);object-fit:contain}
@media(max-width:650px){.transform-fields{grid-template-columns:1fr 1fr}.editor-hint{display:block}.editor-hint span{display:block;text-align:left;margin-top:3px}}

/* V7 — identité Kévin d'Armor : jaune doré / blanc / noir */
:root{
  --ink:#080808;
  --muted:#6f6f6f;
  --line:#ded7ca;
  --soft:#fbfaf7;
  --rose2:#fff9e8;
  --gold:#d3aa45;
  --gold-deep:#9c741c;
  --white:#ffffff;
  --black:#080808;
}
body{background:#fff;color:var(--black)}
.app{background:#fff}
.brand-strip{
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  border:1px solid var(--line);border-bottom:0;padding:12px 22px;background:#fff;
}
.brand-logo-wrap{width:240px;max-width:38%;display:flex;align-items:center}
.brand-logo{display:block;width:100%;height:auto;max-height:72px;object-fit:contain;object-position:left center}
.brand-copy{text-align:right}
.brand-copy strong{display:block;font-family:"Cormorant Garamond",serif;font-size:24px;font-weight:600;color:#111}
.brand-copy small{display:block;font-size:8px;letter-spacing:.08em;color:#777;margin-top:3px}
.builder{border-color:var(--line)}
.options-column{background:#fff}
.section-title{background:#fff;color:#111}
.section-title:hover{background:#fffdf8}
.section-number{border-color:var(--gold);color:var(--gold-deep);background:#fff}
.section-title small{color:var(--gold-deep)}
.tile:hover,.tile.selected{border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
.tile.selected:after{background:var(--black);color:#fff}
.chip.active,.metal.active,.font.active,.motif.selected{border-color:var(--gold);background:#fff9e8}
.face-switch button.active{background:var(--black);color:#fff}
.engraving-tabs button.active{background:var(--black);border-color:var(--black);color:#fff}
.preview-column,.preview-sticky{background:#fff}
.canvas{background:linear-gradient(180deg,#f7f7f7 0%,#ececec 100%)}
.preview-category{color:var(--gold-deep)}
.cta{background:var(--black);color:#fff}
.print-btn,.direct-tools button{border-color:#111}
.edit-object.selected-object{outline:1px dashed var(--gold-deep)}
.transform-handle{border-color:#111;background:#fff;color:#111;box-shadow:0 2px 7px rgba(0,0,0,.12)}
.curve-handle{
  left:50%;right:auto;bottom:-47px;top:auto;transform:translateX(-50%);
  border-color:var(--gold-deep);color:var(--gold-deep);cursor:ns-resize;
}
.curve-handle::after{
  content:"courbe";position:absolute;top:30px;left:50%;transform:translateX(-50%);
  font-size:7px;letter-spacing:.05em;color:#6d6257;white-space:nowrap;
}
.zone-status{
  margin:-2px 0 9px auto;width:max-content;max-width:100%;
  font-size:7px;letter-spacing:.07em;color:#8f7a4e;
}
.curve-controls{background:#fffaf0;border-color:#eadab5}
.metal i{background:#d3aa45}
@media(max-width:650px){
 .brand-strip{padding:10px 12px;gap:10px}
 .brand-logo-wrap{max-width:46%;width:180px}
 .brand-copy strong{font-size:18px}.brand-copy small{font-size:7px}
}

/* Import "Mon dessin" : le calque lui-même reste transparent. */
.upload-object,
.upload-object .object-content {
  background: transparent !important;
}


/* ===== Polices de gravure supplémentaires =====
   Les noms local() permettent au navigateur d'utiliser les polices installées
   sur l'ordinateur. Le fonctionnement des boutons reste celui natif de la V7. */
@font-face{font-family:"VijayaLocal";src:local("Vijaya");font-display:swap}
@font-face{font-family:"SavoyeLocal";src:local("Savoye LET"),local("Savoye LET Plain");font-display:swap}
@font-face{font-family:"LucidaLocal";src:local("Lucida Calligraphy"),local("Lucida Calligraphy Italic");font-display:swap}
@font-face{font-family:"MathildeLocal";src:local("Mathilde");font-display:swap}
@font-face{font-family:"EnglishLocal";src:local("English");font-display:swap}
@font-face{font-family:"TengwarLocal";src:local("Tengwar Feanor");font-display:swap}
@font-face{font-family:"TolkienLocal";src:local("Tolkien Regular"),local("Tolkien");font-display:swap}
@font-face{font-family:"CastellarLocal";src:local("Castellar"),local("Castelar");font-display:swap}

.savoye,.text-preview.savoye,#curvedTextElement.savoye{font-family:"SavoyeLocal","Savoye LET","Segoe Script","Brush Script MT",cursive!important}
.lucida,.text-preview.lucida,#curvedTextElement.lucida{font-family:"LucidaLocal","Lucida Calligraphy","Segoe Script",cursive!important}
.english,.text-preview.english,#curvedTextElement.english{font-family:"EnglishLocal","English","Brush Script MT",cursive!important}
.vijaya,.text-preview.vijaya,#curvedTextElement.vijaya{font-family:"VijayaLocal","Vijaya","Times New Roman",serif!important}
.mathilde,.text-preview.mathilde,#curvedTextElement.mathilde{font-family:"MathildeLocal","Mathilde","Segoe Script",cursive!important}
.tengwar,.text-preview.tengwar,#curvedTextElement.tengwar{font-family:"TengwarLocal","Tengwar Feanor",serif!important}
.tolkien,.text-preview.tolkien,#curvedTextElement.tolkien{font-family:"TolkienLocal","Tolkien Regular",serif!important}
.castelar,.text-preview.castelar,#curvedTextElement.castelar{font-family:"CastellarLocal","Castellar","Times New Roman",serif!important}

/* La liste passe sur plusieurs colonnes sans changer le style général V7. */
.font-cards{grid-template-columns:repeat(2,minmax(0,1fr))}

/* Test catalogue Excel — tarifs corrigés */
.category-tabs{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px}
.category-tab{border:1px solid #d6d0c7;background:#fff;padding:7px 11px;border-radius:999px;font-size:11px}
.category-tab.active{background:#111;color:#fff;border-color:#111}
.shape-grid{max-height:520px;overflow:auto;padding-right:4px}
.product-price{font-size:24px;font-weight:700;margin:8px 0 2px;color:#9a741c}
.back-source-note{font-size:10px;color:#8a857e;margin:0}
button.disabled,button:disabled{opacity:.35;cursor:not-allowed}

.product-price{display:block!important;visibility:visible!important;opacity:1!important;min-height:32px;font-size:26px!important;font-weight:700!important;color:#9a741c!important;}
#thicknessRow.hidden{display:none!important}
.metal.active{outline:2px solid #111;outline-offset:2px}

/* V4 — options de gravure tarifées */
.price-breakdown{margin:4px 0 0;font-size:10px;color:#777;line-height:1.45}
.illustration-selection-info{font-size:10px;color:#6f6962;margin:10px 0 7px}
.remove-illustration-btn{width:100%;border:1px solid #d7d1c8;background:#fff;padding:9px 10px;font-size:9px;letter-spacing:.03em;margin-bottom:8px}
.remove-illustration-btn:hover{border-color:#8f7d5b}
#illustrationObjectsLayer{position:absolute;inset:0;pointer-events:none}
#illustrationObjectsLayer .dynamic-illustration{pointer-events:auto}
.dynamic-illustration{width:92px;height:92px}
.dynamic-illustration .object-content,.dynamic-illustration .catalog-illustration{width:100%;height:100%;object-fit:contain}

/* V5 — déplacement illustrations + symétrie dessin */
#illustrationObjectsLayer{
  position:absolute;
  inset:0;
  z-index:30;
  pointer-events:none;
}
#illustrationObjectsLayer .dynamic-illustration{
  pointer-events:auto;
  cursor:grab;
  touch-action:none;
  user-select:none;
  -webkit-user-select:none;
}
#illustrationObjectsLayer .dynamic-illustration.dragging{cursor:grabbing}
#illustrationObjectsLayer .dynamic-illustration img{
  pointer-events:none;
  user-select:none;
  -webkit-user-drag:none;
}
#illustrationObjectsLayer .transform-handle{
  pointer-events:auto;
  touch-action:none;
}
.mirror-drawing-btn{
  width:100%;
  margin-top:9px;
  border:1px solid #d7d1c8;
  background:#fff;
  padding:9px 10px;
  font-size:9px;
  letter-spacing:.03em;
}
.mirror-drawing-btn:disabled{opacity:.35;cursor:not-allowed}
.mirror-drawing-btn.active{border-color:#111;background:#111;color:#fff}

/* V6 — manipulation fluide + symétrie illustration */
#illustrationObjectsLayer .dynamic-illustration{
  will-change:left,top,transform;
  transform-origin:center center;
  contain:layout style paint;
}
#illustrationObjectsLayer .dynamic-illustration .object-content{
  will-change:transform;
  pointer-events:none;
}
body.object-manipulating,
body.object-manipulating *{
  cursor:grabbing !important;
}
.dynamic-illustration.dragging,
.dynamic-illustration.resizing,
.dynamic-illustration.rotating{
  z-index:60;
}
.illustration-actions{
  display:grid;
  grid-template-columns:1fr;
  gap:7px;
  margin-bottom:8px;
}
.mirror-illustration-btn,
.remove-illustration-btn{
  width:100%;
  border:1px solid #d7d1c8;
  background:#fff;
  padding:9px 10px;
  font-size:9px;
  letter-spacing:.03em;
  margin:0;
}
.mirror-illustration-btn:disabled{opacity:.35;cursor:not-allowed}
.mirror-illustration-btn.active{
  border-color:#111;
  background:#111;
  color:#fff;
}

/* V6.1 hotfix — zone interactive garantie au-dessus du visuel */
.product-visual{position:relative;z-index:1;pointer-events:none}
.image-engraving{z-index:20}
#illustrationObjectsLayer{z-index:30}
#illustrationObjectsLayer .dynamic-illustration{z-index:31}
#illustrationObjectsLayer .dynamic-illustration.selected-object{z-index:50}

/* V6.2 — textes multiples + import client robuste */
#textObjectsLayer{position:absolute;inset:0;z-index:25;pointer-events:none}
#textObjectsLayer .dynamic-text{pointer-events:auto;z-index:26;cursor:grab;touch-action:none;user-select:none;min-width:100px;min-height:48px}
#textObjectsLayer .dynamic-text.selected-object{z-index:55}
.dynamic-text .object-content{width:100%;height:100%;pointer-events:none}
.dynamic-flat-text{white-space:nowrap;text-align:center;line-height:1.05;color:#24201b;text-shadow:0 0 .4px rgba(0,0,0,.3)}
.dynamic-curved-text{width:170px;height:90px;overflow:visible}
.dynamic-curved-text text{fill:#24201b}
.text-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-bottom:9px}
.add-text-btn,.remove-text-btn,.upload-file-btn,.remove-drawing-btn{
 border:1px solid #d7d1c8;background:#fff;padding:9px 10px;font-size:9px;letter-spacing:.03em;text-align:center;cursor:pointer
}
.remove-text-btn:disabled,.remove-drawing-btn:disabled{opacity:.35;cursor:not-allowed}
.text-list{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
.text-list-item{border:1px solid #d7d1c8;background:#fff;border-radius:999px;padding:6px 9px;font-size:9px;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.text-list-item.active{background:#111;color:#fff;border-color:#111}
.empty-text-note{font-size:10px;color:#8b857d;padding:5px 0}
.disabled-editor{opacity:.42}
.upload-zone{display:flex;flex-direction:column;align-items:center;gap:7px}
.upload-file-btn{display:inline-block;margin-top:6px;min-width:150px}
#upload{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.upload-status{font-size:10px;color:#777;text-align:center;margin-top:3px}
.upload-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:9px}
/* V6.3 — catalogue Excel maître */
.engraving-tabs button.disabled,.engraving-tabs button:disabled{opacity:.35;cursor:not-allowed;text-decoration:line-through}
.engraving-availability-note{margin:10px 0;padding:10px;border:1px solid #d7d1c8;background:#faf8f4;font-size:11px;font-weight:700;letter-spacing:.04em}
.unavailable-price{font-weight:800;letter-spacing:.08em}
.graphic-categories{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 10px}
.graphic-cat{border:1px solid #d7d1c8;background:#fff;border-radius:999px;padding:6px 9px;font-size:9px;cursor:pointer}
.graphic-cat.active{background:#111;color:#fff;border-color:#111}
.graphic-grid{max-height:420px;overflow:auto;padding-right:4px}
.graphic-grid .hidden{display:none!important}
[data-thickness].disabled{opacity:.48}
/* V6.3 — catalogue Excel maître */
.engraving-tabs button.disabled,.engraving-tabs button:disabled{opacity:.35;cursor:not-allowed;text-decoration:line-through}
.engraving-availability-note{margin:10px 0;padding:10px;border:1px solid #d7d1c8;background:#faf8f4;font-size:11px;font-weight:700;letter-spacing:.04em}
.unavailable-price{font-weight:800;letter-spacing:.08em}
.graphic-categories{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 10px}
.graphic-cat{border:1px solid #d7d1c8;background:#fff;border-radius:999px;padding:6px 9px;font-size:9px;cursor:pointer}
.graphic-cat.active{background:#111;color:#fff;border-color:#111}
.graphic-grid{max-height:420px;overflow:auto;padding-right:4px}
.graphic-grid .hidden{display:none!important}
[data-thickness].disabled{opacity:.48}

/* V6.3.1 — aperçu : visuels complets + gravures sur fond transparent */
.canvas{padding:18px;box-sizing:border-box}
.product-visual-wrap{width:min(90%,550px);height:min(90%,550px);overflow:visible}
.product-visual{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;object-position:center;display:block}
#illustrationObjectsLayer .dynamic-illustration,
#illustrationObjectsLayer .dynamic-illustration .object-content,
#illustrationObjectsLayer .dynamic-illustration img,
.catalog-illustration{background:transparent!important}

/* V6.3.3 — cadrage de sécurité de l’aperçu droit
   Le visuel produit + sa zone de gravure sont réduits ensemble : aucun décalage
   entre la médaille et les éléments personnalisés, avec davantage de marge
   pour les formes hautes/larges (croix notamment). */
.canvas{overflow:hidden}
.product-visual-wrap{width:min(82%,500px);height:min(82%,500px);overflow:visible}
.product-visual{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;object-position:center}
#illustrationObjectsLayer .dynamic-illustration .object-content{overflow:visible;padding:6px;box-sizing:border-box}
#illustrationObjectsLayer .dynamic-illustration img{max-width:100%;max-height:100%;object-fit:contain}


/* V6.3.4 — motifs toujours visibles en entier dans l’aperçu */
#illustrationObjectsLayer .dynamic-illustration .object-content{
  overflow:visible!important;
  padding:14px!important;
  box-sizing:border-box!important;
}
#illustrationObjectsLayer .dynamic-illustration img.catalog-illustration{
  width:100%!important;
  height:100%!important;
  max-width:100%!important;
  max-height:100%!important;
  object-fit:contain!important;
  object-position:center center!important;
  display:block!important;
  background:transparent!important;
}

/* V6.3.5 — cadrage spécifique des références très verticales.
   La réduction porte sur le conteneur produit complet afin que le bijou ET
   les calques de personnalisation restent parfaitement alignés. */
.product-visual-wrap.model-M154,
.product-visual-wrap.model-M158,
.product-visual-wrap.model-M165,
.product-visual-wrap.model-M519,
.product-visual-wrap.model-M611{
  width:min(68%,415px)!important;
  height:min(68%,415px)!important;
  overflow:visible!important;
}

/* V6.3.6 — cadrage renforcé des trois références encore tronquées. */
.product-visual-wrap.model-M158,
.product-visual-wrap.model-M165,
.product-visual-wrap.model-M345{
  width:min(56%,342px)!important;
  height:min(56%,342px)!important;
  overflow:visible!important;
}


/* V6.3.7 — rotation minimalistes + impression recto/verso complète */
.rotate-minimalist-btn{border:1px solid #d7d1c8;background:#fff;padding:9px 10px;font-size:9px;cursor:pointer}
.rotate-minimalist-btn:disabled{opacity:.35;cursor:not-allowed}
.print-sheet{display:none}
@media print{
  body>*:not(.print-sheet){display:none!important}
  .print-sheet{display:block!important;padding:10mm;background:#fff;color:#111}
  .print-sheet>h2{font-family:"Cormorant Garamond",serif;font-size:22pt;text-align:center;margin:0 0 8mm}
  .print-faces{display:grid;grid-template-columns:1fr 1fr;gap:10mm;align-items:start}
  .print-face{break-inside:avoid;text-align:center}
  .print-face h3{font-size:11pt;letter-spacing:.14em;margin:0 0 4mm}
  .print-canvas{position:relative!important;width:82mm!important;height:105mm!important;margin:0 auto!important;overflow:visible!important;background:#fff!important}
  .print-canvas .product-visual{max-width:100%!important;max-height:100%!important;object-fit:contain!important}
  .print-canvas .editor-hint,.print-canvas .zone-status,.print-canvas .side-label{display:none!important}
  .print-canvas .edit-object{outline:0!important}
  .print-canvas #illustrationObjectsLayer,.print-canvas #textObjectsLayer{overflow:visible!important}
}

/* V6.3.8 — aperçu sans zone de personnalisation contrainte */
#engravingOverlay{overflow:visible!important;}
#illustrationObjectsLayer .dynamic-illustration.selected-object .rotate-handle{display:flex!important;}


/* V6.3.9 — poignée de rotation visible sur les minimalistes */
.canvas{overflow:visible!important;}
#illustrationObjectsLayer{overflow:visible!important;}
#illustrationObjectsLayer .minimalist-object{overflow:visible!important;}
#illustrationObjectsLayer .minimalist-object.selected-object .rotate-handle{
  display:flex!important;
  visibility:visible!important;
  opacity:1!important;
  pointer-events:auto!important;
  z-index:999!important;
  right:50%!important;
  top:-42px!important;
  transform:translateX(50%)!important;
}
#illustrationObjectsLayer .minimalist-object.selected-object{z-index:100!important;}

/* V6.3.10 — correction réelle de la poignée de rotation des minimalistes.
   `contain: paint` sur les objets dynamiques rognait toute poignée placée
   en dehors du carré 110x110. On conserve l'optimisation de layout/style,
   mais on autorise désormais le débordement visuel des poignées. */
#illustrationObjectsLayer .dynamic-illustration{
  contain:layout style!important;
  overflow:visible!important;
}
#illustrationObjectsLayer .minimalist-object.selected-object .rotate-handle{
  display:flex!important;
  visibility:visible!important;
  opacity:1!important;
  right:-15px!important;
  top:-38px!important;
  transform:none!important;
  z-index:1000!important;
}

/* V6.3.11b — calques, aide et fiche d'impression */
.layer-panel{margin-top:16px;border:1px solid var(--line);background:#fff;padding:10px}
.layer-panel-head{display:flex;justify-content:space-between;align-items:center;font-size:9px;letter-spacing:.12em;margin-bottom:8px}.layer-panel-head small{color:#999}
.layer-list{display:flex;flex-direction:column;gap:5px;max-height:180px;overflow:auto}.layer-item{border:1px solid #e2ddd8;background:#fff;padding:8px 9px;text-align:left;font-size:9px;display:flex;justify-content:space-between;gap:8px}.layer-item.active{border-color:#332e2a;background:#f5f1ee}.layer-empty{font-size:9px;color:#999;padding:5px}
.help-modal{position:fixed;inset:0;background:rgba(0,0,0,.38);z-index:10000;display:grid;place-items:center;padding:20px}.help-card{position:relative;width:min(520px,100%);background:#fff;padding:28px;box-shadow:0 20px 70px rgba(0,0,0,.2)}.help-card h2{font-family:"Cormorant Garamond",serif;font-size:28px;margin:0 0 8px}.help-card p{font-size:10px;color:#777;line-height:1.5}.help-card label{display:block;font-size:9px;margin-top:10px}.help-card input,.help-card textarea{margin-top:5px}.help-close{position:absolute;right:12px;top:10px;border:0;background:none;font-size:24px;cursor:pointer}
.print-recap{margin:8mm auto 0;max-width:175mm;border-top:1px solid #d8cfc7}.print-recap .recap-row{font-size:8.5pt;padding:3mm 0}.print-note{font-size:7.5pt;color:#777;text-align:center;margin-top:5mm}
@media print{
 @page{size:A4 portrait;margin:10mm}
 .print-sheet{padding:0!important}
 .print-faces{gap:6mm!important}
 .print-face h3{margin-bottom:2mm!important}
 .print-canvas{width:78mm!important;height:88mm!important;overflow:visible!important;background:#fff!important;margin:0 auto!important;padding:0!important}
 .print-canvas .product-visual-wrap{overflow:visible!important}
 .print-canvas .side-label,.print-canvas .transform-handle{display:none!important}
 .print-canvas .edit-object{outline:0!important}
}

/* V6.3.12 — confinement aperçu + impression fidèle */
/* Les références très verticales restent entièrement dans la zone grise, sans déborder sur les informations. */
.canvas > .product-visual-wrap{
  max-height:calc(100% - 54px)!important;
  max-width:calc(100% - 54px)!important;
}
.product-visual-wrap.model-M154,
.product-visual-wrap.model-M158,
.product-visual-wrap.model-M165,
.product-visual-wrap.model-M345,
.product-visual-wrap.model-M519,
.product-visual-wrap.model-M611{
  width:min(54%,330px)!important;
  height:min(54%,330px)!important;
}
/* L'impression conserve la géométrie écran (610 x 610) et la réduit comme un bloc unique. */
.print-canvas-viewport{width:78mm;height:78mm;overflow:hidden;margin:0 auto;position:relative;background:#fff}
.print-canvas-viewport .print-canvas{
  width:610px!important;height:610px!important;min-width:610px!important;min-height:610px!important;
  margin:0!important;padding:18px!important;box-sizing:border-box!important;
  transform:scale(.483);transform-origin:top left;overflow:hidden!important;background:#efefef!important;
}
.print-canvas-viewport .print-canvas > .product-visual-wrap{max-width:calc(100% - 54px)!important;max-height:calc(100% - 54px)!important}
@media print{
 .print-faces{align-items:start!important}
 .print-face{min-width:0!important}
 .print-canvas-viewport{width:78mm!important;height:78mm!important;overflow:hidden!important}
 .print-canvas-viewport .print-canvas{width:610px!important;height:610px!important;transform:scale(.483)!important;transform-origin:top left!important}
 .print-recap{margin-top:6mm!important}
}

/* V6.3.13 — cadrage global et robuste du visuel de droite.
   Toutes les références utilisent désormais la même boîte de sécurité.
   Le ratio de la photo est conservé par object-fit:contain et aucun visuel
   ne peut déborder sur les informations produit sous le canvas. */
#editorCanvas.canvas{
  overflow:hidden!important;
  padding:28px!important;
  box-sizing:border-box!important;
}
#editorCanvas > .product-visual-wrap{
  width:min(76%,460px)!important;
  height:min(76%,460px)!important;
  max-width:calc(100% - 56px)!important;
  max-height:calc(100% - 56px)!important;
  min-width:0!important;
  min-height:0!important;
  overflow:visible!important;
  box-sizing:border-box!important;
}
#editorCanvas > .product-visual-wrap .product-visual{
  width:100%!important;
  height:100%!important;
  max-width:100%!important;
  max-height:100%!important;
  object-fit:contain!important;
  object-position:center center!important;
  display:block!important;
}
/* Annule les anciens cadrages au cas par cas : une seule règle pour tout le catalogue. */
#editorCanvas > .product-visual-wrap.model-M154,
#editorCanvas > .product-visual-wrap.model-M158,
#editorCanvas > .product-visual-wrap.model-M165,
#editorCanvas > .product-visual-wrap.model-M345,
#editorCanvas > .product-visual-wrap.model-M519,
#editorCanvas > .product-visual-wrap.model-M611{
  width:min(76%,460px)!important;
  height:min(76%,460px)!important;
}

/* V6.3.16 — impression par capture aplatie du visuel exact */
.print-snapshot{display:block;width:78mm;height:78mm;object-fit:contain;margin:0 auto;background:#efefef}
@media print{.print-snapshot{width:78mm!important;height:78mm!important;object-fit:contain!important}}

/* V6.3.17 — impression robuste : clone exact du repère 610x610, puis mise à l'échelle uniforme. */
.print-canvas-exact-viewport{width:78mm;height:78mm;overflow:hidden;margin:0 auto;position:relative;background:#efefef}
.print-canvas-exact{width:610px!important;height:610px!important;min-width:610px!important;min-height:610px!important;max-width:none!important;max-height:none!important;margin:0!important;transform:scale(.483);transform-origin:top left;overflow:hidden!important}
.print-canvas-exact .transform-handle,.print-canvas-exact .side-label{display:none!important}
/* Les dessins de catalogue sont du trait : éviter le lissage excessif lors des transformations. */
#illustrationObjectsLayer img.catalog-illustration{image-rendering:auto;backface-visibility:hidden;transform:translateZ(0)}
@media print{
 .print-canvas-exact-viewport{width:78mm!important;height:78mm!important;overflow:hidden!important}
 .print-canvas-exact{width:610px!important;height:610px!important;transform:scale(.483)!important;transform-origin:top left!important}
}

/* V6.3.18 — impression = capture exacte du visuel de droite */
.print-snapshot.exact-screen-capture{display:block;width:78mm;height:78mm;object-fit:contain;margin:0 auto;background:#efefef}
@media print{
 .print-snapshot.exact-screen-capture{width:78mm!important;height:78mm!important;object-fit:contain!important;display:block!important}
}

/* V6.3.20 — impression par clone DOM figé du visuel écran.
   Pas de SVG/foreignObject : les images locales restent imprimables. */
.print-dom-snapshot{display:block;overflow:hidden;margin:0 auto;background:#efefef}
@media print{
 .print-dom-snapshot{display:block!important;overflow:hidden!important;margin:0 auto!important;background:#efefef!important}
}

/* V6.3.21 — validation de commande */
.secondary-cta{margin-top:8px;background:#fff!important;color:#201b18!important;border:1px solid #cfc6bf!important}
.order-card{width:min(600px,100%)}
.order-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.help-card label{display:block;margin:12px 0;font-size:10px;letter-spacing:.05em}
.help-card input,.help-card textarea{display:block;width:100%;box-sizing:border-box;margin-top:6px;padding:11px;border:1px solid #d9d1ca;background:#fff;font:inherit}
.order-error{color:#8d251f;font-size:10px;margin:10px 0}
@media(max-width:640px){.order-grid{grid-template-columns:1fr}}

/* V6.4 WEB — ajustements de publication et petits écrans, sans changer le moteur métier. */
html{-webkit-text-size-adjust:100%}
button,input,select,textarea{font:inherit}
button,.chip,.metal,.tile,.motif,.cta,.print-btn,.upload-file-btn{touch-action:manipulation}
img{image-rendering:auto}
@media(max-width:430px){
  .app{padding:0 6px 36px}
  .brand-strip{padding:10px 8px}
  .brand-copy small{font-size:8px}
  .preview-sticky{padding:8px}
  .canvas{height:310px}
  .section-body{padding:2px 10px 20px 48px}
  .section-title{padding:13px 8px;gap:8px;grid-template-columns:34px 1fr 16px}
  .section-title>span:nth-child(2){font-size:18px}
  .type-grid,.shape-grid,.illustration-grid{grid-template-columns:1fr 1fr}
  .chips{display:flex;flex-wrap:wrap;gap:6px}
  .chip,.metal{min-width:0;flex:1 1 44%}
  .direct-tools{align-items:stretch}
  .direct-tools button{min-height:38px}
  .cta,.print-btn{min-height:48px}
  .help-card{width:calc(100vw - 20px);max-height:calc(100vh - 20px);overflow:auto;padding:18px}
}
