/* Visualiseur 3D – Carreaux Store */
.csvis-page{--cs-ink:#3a3a3a;--cs-muted:#666;--cs-line:#e4e4e4;--cs-accent:#f3a032;--cs-dark:#111;--cs-soft:#f7f7f7}
.csvis-page,.csvis-page *{box-sizing:border-box}
.csvis-main{display:grid;grid-template-columns:400px minmax(0,1fr);gap:18px;align-items:start;max-width:100%}
.csvis-main>*{min-width:0;max-width:100%}
.csvis-panel{background:#fff;padding:18px;border:1px solid var(--cs-line)}
.csvis-panel fieldset{border:0;padding:0;margin:0 0 18px;min-width:0}
.csvis-panel legend{font-weight:600;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--cs-ink);margin-bottom:10px;padding-bottom:6px;border-bottom:2px solid var(--cs-accent);display:inline-block;width:auto}
.csvis-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}.csvis-row2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.csvis-panel label{display:block;font-size:12px;color:var(--cs-muted);margin-bottom:4px}
.csvis-panel input,.csvis-panel select{width:100%;padding:9px 10px;border:1px solid #cfcfcf;border-radius:0;background:#fff;color:var(--cs-ink);font:inherit;height:auto}
.csvis-panel input[type=range]{padding:0;border:0}
.csvis-field{margin-bottom:10px}
.csvis-seg{display:flex;gap:6px;flex-wrap:wrap}
.csvis-seg button{flex:1;padding:8px 6px;border:1px solid #cfcfcf;background:#fff;font:inherit;font-size:12px;cursor:pointer;color:var(--cs-ink)}
.csvis-seg button[aria-pressed="true"]{background:var(--cs-dark);color:#fff;border-color:var(--cs-dark)}
.csvis-swatches{display:flex;gap:6px;flex-wrap:wrap}
.csvis-swatches button{width:30px;height:30px;border:1px solid #cfcfcf;cursor:pointer;position:relative;padding:0}
.csvis-swatches button[aria-pressed="true"]{outline:2px solid var(--cs-accent);outline-offset:1px}
.csvis-swatches button.photo::after{content:"";position:absolute;right:-3px;bottom:-3px;width:9px;height:9px;background:var(--cs-accent);border:1px solid #fff}
.csvis-surf{min-width:0}
.csvis-tile-card{display:flex;gap:10px;align-items:center;border:1px solid var(--cs-line);padding:8px;background:var(--cs-soft)}
.csvis-tile-card img,.csvis-tile-card .ph{width:56px;height:56px;object-fit:cover;background:#ddd;flex:none;border:1px solid #cfcfcf}
.csvis-tile-card .t{flex:1;min-width:0;font-size:12px}.csvis-tile-card .t b{display:block;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.csvis-tile-card .t span{color:var(--cs-muted)}
.csvis-tile-card button{padding:8px 10px;border:1px solid var(--cs-dark);background:#fff;font:inherit;font-size:12px;cursor:pointer}
.csvis-tile-card button:hover{background:var(--cs-dark);color:#fff}
.csvis-tile-info{font-size:12px;color:var(--cs-muted);margin-top:6px}.csvis-tile-info b{color:var(--cs-accent);font-weight:600}.csvis-tile-info a{color:var(--cs-ink);text-decoration:underline}
.csvis-sub{border-left:3px solid var(--cs-line);padding-left:10px;margin:8px 0}
.csvis-chk{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;margin:6px 0;color:var(--cs-ink)}.csvis-chk input{width:auto}
.csvis-add{padding:9px 10px;border:1px solid var(--cs-dark);background:var(--cs-dark);color:#fff;font:inherit;font-size:12px;cursor:pointer}
.csvis-obj{border:1px solid var(--cs-line);background:var(--cs-soft);padding:8px 10px;margin-bottom:6px;font-size:12px}
.csvis-obj.sel{outline:2px solid var(--cs-accent)}
.csvis-obj .hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.csvis-obj .hd b{font-size:13px}
.csvis-obj .hd button{border:0;background:none;color:var(--cs-muted);cursor:pointer;font-size:16px;padding:0 4px}
.csvis-obj .ctl{display:grid;grid-template-columns:auto 1fr;gap:8px;align-items:center}
.csvis-obj select{padding:5px 6px;width:auto}
.csvis-viewer{position:sticky;top:14px;height:calc(100vh - 150px);min-height:420px;background:#1b1b1b;border:1px solid var(--cs-line);overflow:hidden}
#csvis-gl{display:block;width:100%;height:100%;touch-action:none;cursor:grab}#csvis-gl:active{cursor:grabbing}
.csvis-hud{position:absolute;left:12px;right:12px;bottom:12px;display:flex;justify-content:space-between;gap:8px;align-items:flex-end;pointer-events:none}
.csvis-views{display:flex;gap:6px;flex-wrap:wrap;pointer-events:auto}
.csvis-views button{padding:8px 12px;border:0;background:#fff;color:var(--cs-ink);font:inherit;font-size:12px;letter-spacing:.04em;text-transform:uppercase;cursor:pointer}
.csvis-views button:hover{background:var(--cs-accent)}
.csvis-hint{font-size:12px;color:rgba(255,255,255,.8);background:rgba(0,0,0,.45);padding:6px 10px}
.csvis-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;letter-spacing:.08em;text-transform:uppercase;background:#1b1b1b;z-index:2}
.csvis-actions{display:flex;gap:8px;margin:4px 0 14px}
.csvis-actions button{flex:1;padding:9px 8px;border:1px solid #cfcfcf;background:#fff;font:inherit;font-size:12px;cursor:pointer;color:var(--cs-ink)}.csvis-actions button:hover{border-color:var(--cs-dark)}
.csvis-card{border:1px solid var(--cs-line);padding:12px 14px;margin-bottom:10px;background:var(--cs-soft)}
.csvis-card h3{margin:0 0 6px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;font-weight:600}.csvis-card .big{font-size:22px;font-weight:600}
.csvis-kv{display:grid;grid-template-columns:1fr auto;gap:2px 12px;font-size:13px}.csvis-kv span:nth-child(odd){color:var(--cs-muted)}
.csvis-links{font-size:12px;margin-top:6px}.csvis-links a{color:var(--cs-ink);margin-right:12px;text-decoration:underline}
.csvis-total{display:flex;justify-content:space-between;align-items:baseline;padding:12px 14px;background:var(--cs-dark);color:#fff}.csvis-total .big{font-size:24px;font-weight:600;color:var(--cs-accent)}
.csvis-note{font-size:12px;color:var(--cs-muted);margin-top:12px}
.csvis-cta{display:block;width:100%;margin-top:12px;padding:13px;border:0;background:var(--cs-accent);color:#111;font:inherit;font-weight:600;letter-spacing:.06em;text-transform:uppercase;cursor:pointer}.csvis-cta:hover{filter:brightness(1.05)}.csvis-cta[disabled]{opacity:.6;cursor:wait}
.csvis-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--cs-dark);color:#fff;padding:10px 16px;font-size:13px;opacity:0;transition:opacity .2s;pointer-events:none;z-index:1099}.csvis-toast.show{opacity:1}
.csvis-modal{position:fixed;inset:0;background:rgba(0,0,0,.55);display:none;align-items:center;justify-content:center;z-index:1090;padding:16px}
.csvis-modal.open{display:flex}
.csvis-dialog{background:#fff;width:min(1100px,100%);max-height:92vh;display:flex;flex-direction:column}
.csvis-dialog-head{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--cs-line);padding:14px 18px}
.csvis-dialog-head h2{margin:0;font-size:14px;letter-spacing:.08em;text-transform:uppercase}
.csvis-close{border:0;background:none;font-size:22px;cursor:pointer;color:var(--cs-muted)}
.csvis-filters{display:flex;gap:14px;flex-wrap:wrap;padding:12px 18px;border-bottom:1px solid var(--cs-line);align-items:flex-end}
.csvis-filters .f{min-width:160px}.csvis-filters .f label{display:block;font-size:12px;color:var(--cs-muted);margin-bottom:6px}
.csvis-filters select,.csvis-filters input{width:100%;padding:8px 10px;border:1px solid #cfcfcf;font:inherit}
.csvis-filters input[type=range]{padding:0;border:0}
.csvis-grid{overflow:auto;padding:14px 18px;display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.csvis-pcard{border:1px solid var(--cs-line);background:#fff;cursor:pointer;display:flex;flex-direction:column}
.csvis-pcard:hover{border-color:var(--cs-dark)}.csvis-pcard.sel{outline:2px solid var(--cs-accent)}
.csvis-pcard .thumb{height:120px;background:#eee center/cover;border-bottom:1px solid var(--cs-line)}
.csvis-pcard .b{padding:8px 10px;font-size:12px}.csvis-pcard .b b{display:block;font-size:13px;font-weight:600;margin-bottom:2px}
.csvis-pcard .b .price{color:var(--cs-accent);font-weight:600}
.csvis-pcard .sw{display:flex;gap:4px;flex-wrap:wrap;padding:0 10px 10px}
.csvis-pcard .sw i{display:block;width:16px;height:16px;border:1px solid #cfcfcf}
.csvis-product-button{margin:12px 0}.csvis-btn .material-icons{vertical-align:middle;font-size:18px;margin-right:4px}
.csvis-footer-link{text-align:center;padding:10px;font-size:13px}.csvis-footer-link a{color:inherit;text-decoration:underline}
@media (max-width:900px){.csvis-main{grid-template-columns:minmax(0,1fr)}.csvis-viewer{order:-1;position:relative;top:0;height:58vh;min-height:320px}.csvis-hint{display:none}}

@media (max-width:600px){.csvis-panel{padding:12px}.csvis-views button{padding:7px 9px;font-size:11px}.csvis-obj .ctl{grid-template-columns:1fr}.csvis-obj select{width:100%}}

@media (max-width:600px){.csvis-actions{flex-wrap:wrap}.csvis-actions button{flex:1 1 30%;padding:9px 4px}}

/* 1.0.4 : rubriques repliables */
.csvis-panel fieldset.csvis-acc{margin:0;border-bottom:1px solid var(--cs-line)}
.csvis-panel fieldset.csvis-acc:first-of-type{border-top:1px solid var(--cs-line)}
.csvis-panel .csvis-acc>legend{float:left;display:flex;align-items:baseline;gap:10px;width:100%;margin:0;padding:12px 26px 12px 0;border-bottom:0;cursor:pointer;user-select:none;position:relative}
.csvis-panel .csvis-acc>legend::after{content:"";position:absolute;right:6px;top:50%;width:8px;height:8px;border-right:2px solid var(--cs-ink);border-bottom:2px solid var(--cs-ink);transform:translateY(-70%) rotate(45deg);transition:transform .15s}
.csvis-panel .csvis-acc.open>legend::after{transform:translateY(-30%) rotate(-135deg)}
.csvis-panel .csvis-acc>legend:hover .csvis-acc-t,.csvis-panel .csvis-acc>legend:focus-visible .csvis-acc-t{color:var(--cs-accent)}
.csvis-panel .csvis-acc>legend:focus-visible{outline:2px solid var(--cs-accent);outline-offset:2px}
.csvis-acc-t{flex:none;padding-bottom:3px;border-bottom:2px solid transparent}
.csvis-acc.open .csvis-acc-t{border-bottom-color:var(--cs-accent)}
.csvis-sum{flex:1;min-width:0;font-size:12px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--cs-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right}
.csvis-acc .csvis-body{clear:both;padding:2px 0 16px}
.csvis-acc:not(.open)>.csvis-body{display:none}
.csvis-acc+.csvis-results,.csvis-panel>.csvis-results{margin-top:16px}
@media (max-width:900px){.csvis-viewer{position:sticky;top:0;height:45vh;min-height:260px;z-index:5}}
/* 1.1.0 — projets enregistrés */
.csvis-projbar{display:flex;gap:8px;margin:0 0 8px}
.csvis-projbar button{flex:1;padding:10px 8px;font:inherit;font-size:12px;cursor:pointer}
.csvis-save{display:inline-block;background:var(--cs-accent);color:#000;border:1px solid var(--cs-accent);padding:10px 16px;font-size:13px;text-decoration:none;cursor:pointer;text-align:center}
.csvis-save:hover{background:#e08e1f;border-color:#e08e1f;color:#000;text-decoration:none}
#btnProjects{border:1px solid var(--cs-dark);background:#fff;color:var(--cs-ink)}#btnProjects:hover{background:var(--cs-dark);color:#fff}
.csvis-projname{font-size:12px;color:var(--cs-muted);margin:0 0 14px}.csvis-projname b{color:var(--cs-ink)}
.csvis-dialog-sm{width:min(720px,100%)}
.csvis-proj-body{overflow:auto;padding:16px 18px;display:grid;gap:16px}
.csvis-proj-login{display:grid;gap:12px;font-size:14px;color:var(--cs-ink)}.csvis-proj-login .csvis-save{justify-self:start}
.csvis-proj-form{display:grid;gap:6px;padding-bottom:14px;border-bottom:1px solid var(--cs-line)}
.csvis-proj-form label{font-size:12px;color:var(--cs-muted)}
.csvis-proj-row{display:flex;gap:8px}.csvis-proj-row input{flex:1;min-width:0;padding:9px 10px;border:1px solid #cfcfcf;font:inherit}
.csvis-link{justify-self:start;border:0;background:none;padding:0;font:inherit;font-size:12px;color:var(--cs-ink);text-decoration:underline;cursor:pointer}
.csvis-proj-list{display:grid;gap:10px}
.csvis-proj{display:grid;grid-template-columns:140px minmax(0,1fr);gap:12px;border:1px solid var(--cs-line);padding:8px;background:#fff}
.csvis-proj.cur{outline:2px solid var(--cs-accent)}
.csvis-proj .im{aspect-ratio:16/10;background:var(--cs-soft);overflow:hidden}.csvis-proj .im img{width:100%;height:100%;object-fit:cover;display:block}
.csvis-proj .tx{display:grid;gap:4px;align-content:start;font-size:12px;color:var(--cs-muted)}.csvis-proj .tx b{font-size:14px;color:var(--cs-ink);font-weight:600;overflow-wrap:anywhere}
.csvis-proj .bt{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.csvis-proj .bt button{padding:6px 10px;border:1px solid #cfcfcf;background:#fff;font:inherit;font-size:12px;cursor:pointer;color:var(--cs-ink)}
.csvis-proj .bt button[data-act=open]{border-color:var(--cs-dark);background:var(--cs-dark);color:#fff}
.csvis-proj .bt button.confirm{border-color:#a43a2f;background:#a43a2f;color:#fff}
.csvis-proj-rename{padding:6px 8px;border:1px solid var(--cs-accent);font:inherit;font-size:14px}
@media (max-width:600px){.csvis-proj{grid-template-columns:100px minmax(0,1fr)}.csvis-proj-row{flex-direction:column}}
