{"id":15682,"date":"2026-10-16T20:27:41","date_gmt":"2026-10-16T18:27:41","guid":{"rendered":"https:\/\/www.ok3d.fr\/?page_id=15682"},"modified":"2026-10-16T20:45:21","modified_gmt":"2026-10-16T18:45:21","slug":"logo-lab","status":"publish","type":"page","link":"https:\/\/www.ok3d.fr\/en\/logo-lab\/","title":{"rendered":"Logo Lab"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"15682\" class=\"elementor elementor-15682\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bbe5d3c e-con e-atomic-element e-flexbox-base e-ba436fd \" data-id=\"bbe5d3c\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"bbe5d3c\" data-e-type=\"e-flexbox\" data-id=\"bbe5d3c\">\n    \t\t<div class=\"elementor-element elementor-element-c1d60fd elementor-widget elementor-widget-html\" data-id=\"c1d60fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Logo Lab by OK3D \u2014 contenu centr\u00e9, sans en-t\u00eate int\u00e9gr\u00e9.\n  Coller TOUT ce fichier dans un widget HTML (sans balises html\/head\/body).\n  Page : Elementor pleine largeur pour conserver l'en-t\u00eate du site.\n  Conteneur : pleine largeur, marges\/padding 0,\n  d\u00e9bordement visible. Le contenu conserve son d\u00e9filement vertical.\n  Cadre maximal : 1600px, marges comprises, comme le configurateur OK3D.\n  Header : 94px + 54px d'espace sur ordinateur ; 78px + 43px sur mobile.\n  R\u00e9glages : --okk-content-max, --okk-header-offset et --okk-top-gap.\n-->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Unbounded:wght@500;700&family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@500;600&display=swap\">\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@800&family=Montserrat:wght@800&family=Archivo+Black&family=Oswald:wght@700&family=Playfair+Display:wght@800&family=Orbitron:wght@800&family=Fredoka:wght@600&family=Righteous&family=Pacifico&text=Ag&display=swap\">\n<style>\n.okk-scope[data-okk=\"logolab\"]{display:block;width:100%;font-family:var(--f-body);font-size:15px;line-height:1.5;color:var(--ink);background:var(--bg);text-align:left;-webkit-font-smoothing:antialiased}\n.okk-scope[data-okk=\"logolab\"] *,.okk-scope[data-okk=\"logolab\"] *::before,.okk-scope[data-okk=\"logolab\"] *::after{box-sizing:border-box}\n.okk-scope[data-okk=\"logolab\"] [hidden]{display:none!important}\n.okk-scope[data-okk=\"logolab\"] img{max-width:100%;height:auto}\n.okk-scope[data-okk=\"logolab\"] button,.okk-scope[data-okk=\"logolab\"] input{font-family:inherit;text-transform:none;letter-spacing:normal;min-height:0;box-shadow:none;margin:0}\n.okk-scope[data-okk=\"logolab\"] h1,.okk-scope[data-okk=\"logolab\"] h2,.okk-scope[data-okk=\"logolab\"] h3{color:inherit;text-transform:none;padding:0}\n.okk-scope[data-okk=\"logolab\"] p{margin:0}\n.okk-scope[data-okk=\"logolab\"] a{text-decoration:none}\n.okk-scope[data-okk=\"logolab\"]{\n  color-scheme:dark;\n  --bg:#06080C; --bg2:#0A0E15; --ink:#EEF2F8; --muted:#8792A6; --faint:#566074; --line:#1C2433; --line2:#2A3549;\n  --brand:#2E6BFF; --brand-hi:#4F86FF; --brand2:#7CC4FF; --glow:rgba(46,107,255,.45);\n  --good:#35E0A1; --bad:#FF5A6E; --gold:#FFCB6B;\n  --key:#FFC46B; --fill:#7CC4FF; --rim:#FF7AA8; --fond:#A99BFF;\n  --f-display:\"Unbounded\",\"Arial Black\",system-ui,sans-serif;\n  --f-body:\"Geist\",system-ui,-apple-system,\"Segoe UI\",sans-serif;\n  --f-mono:\"Geist Mono\",ui-monospace,Menlo,Consolas,monospace;\n}\n.okk-scope[data-okk=\"logolab\"]{background:var(--bg);color:var(--ink)}\n.okk-scope[data-okk=\"logolab\"]{font-family:var(--f-body);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}\n.okk-scope[data-okk=\"logolab\"] *{box-sizing:border-box}\n.okk-scope[data-okk=\"logolab\"] button{font:inherit;color:inherit;cursor:pointer;background:none;border:0;padding:0}\n.okk-scope[data-okk=\"logolab\"] a{color:inherit}\n.okk-scope[data-okk=\"logolab\"] a.btn{text-decoration:none}\n.okk-scope[data-okk=\"logolab\"] :focus-visible{outline:2px solid var(--brand2);outline-offset:3px;border-radius:6px}\n.okk-scope[data-okk=\"logolab\"] .okk{position:relative;overflow:hidden;min-height:100%;\n  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:0 28px;\n  background:radial-gradient(1100px 560px at 12% -8%,rgba(46,107,255,.18),transparent 62%),radial-gradient(800px 480px at 105% 4%,rgba(255,196,107,.06),transparent 60%),var(--bg)}\n.okk-scope[data-okk=\"logolab\"] .okk::before{content:\"\";position:absolute;inset:0;pointer-events:none;opacity:.5;\n  background-image:linear-gradient(rgba(124,196,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(124,196,255,.035) 1px,transparent 1px);background-size:56px 56px;\n  mask-image:linear-gradient(180deg,#000,transparent 60%);-webkit-mask-image:linear-gradient(180deg,#000,transparent 60%)}\n.okk-scope[data-okk=\"logolab\"] .wrap{position:relative;max-width:1280px;margin:0 auto}\n.okk-scope[data-okk=\"logolab\"] .bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-block:18px;flex-wrap:wrap}\n.okk-scope[data-okk=\"logolab\"] .brand{display:flex;align-items:center;gap:12px;text-decoration:none}\n.okk-scope[data-okk=\"logolab\"] .brand .mk{font:700 17px var(--f-display);letter-spacing:-.02em;display:flex;align-items:center;gap:8px}\n.okk-scope[data-okk=\"logolab\"] .brand .mk i{width:26px;height:26px;border-radius:9px;display:grid;place-items:center;font-style:normal;font-size:9px;background:linear-gradient(150deg,var(--brand-hi),#1C47C9);box-shadow:0 0 0 1px rgba(255,255,255,.12) inset,0 6px 20px -6px var(--glow)}\n.okk-scope[data-okk=\"logolab\"] .brand img{height:26px;width:auto;display:block}\n.okk-scope[data-okk=\"logolab\"] .brand .pr{font:500 13px var(--f-body);color:var(--muted);padding-left:12px;border-left:1px solid var(--line2)}\n.okk-scope[data-okk=\"logolab\"] .eyebrow{font:600 11px var(--f-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--brand2);display:inline-flex;align-items:center;gap:8px}\n.okk-scope[data-okk=\"logolab\"] .eyebrow::before{content:\"\";width:6px;height:6px;border-radius:2px;background:var(--brand2);box-shadow:0 0 10px var(--brand2)}\n.okk-scope[data-okk=\"logolab\"] h1,.okk-scope[data-okk=\"logolab\"] h2,.okk-scope[data-okk=\"logolab\"] h3{margin:0;font-family:var(--f-display);letter-spacing:-.03em;text-wrap:balance}\n.okk-scope[data-okk=\"logolab\"] .grad{background:linear-gradient(100deg,#FFD9A0 0%,var(--brand2) 55%,#E9F5FF 100%);-webkit-background-clip:text;background-clip:text;color:transparent}\n.okk-scope[data-okk=\"logolab\"] .btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;height:44px;padding:0 20px;border-radius:999px;font-weight:600;font-size:14.5px;transition:transform .15s,box-shadow .2s,border-color .2s;white-space:nowrap}\n.okk-scope[data-okk=\"logolab\"] .btn.pri{background:linear-gradient(180deg,var(--brand-hi),#2152E0);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,.28),0 10px 30px -10px var(--glow),0 0 0 1px rgba(46,107,255,.6)}\n.okk-scope[data-okk=\"logolab\"] .btn.pri:hover{transform:translateY(-1px)}\n.okk-scope[data-okk=\"logolab\"] .btn.gho{border:1px solid var(--line2);background:rgba(255,255,255,.02)}\n.okk-scope[data-okk=\"logolab\"] .btn.gho:hover{border-color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .btn.sm{height:34px;padding:0 13px;font-size:12.5px}\n.okk-scope[data-okk=\"logolab\"] .glass{background:linear-gradient(180deg,rgba(255,255,255,.04),rgba(255,255,255,.012));border:1px solid var(--line);border-radius:24px;box-shadow:inset 0 1px 0 rgba(255,255,255,.045)}\n.okk-scope[data-okk=\"logolab\"] .intro{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap;padding-block:18px 26px}\n.okk-scope[data-okk=\"logolab\"] .intro h1{font-size:clamp(32px,4.6vw,60px);line-height:1.02;font-weight:700;margin-top:16px}\n.okk-scope[data-okk=\"logolab\"] .intro p{color:var(--muted);max-width:52ch;margin:16px 0 0;font-size:clamp(15px,1.3vw,16.5px)}\n.okk-scope[data-okk=\"logolab\"] .intro .rules{display:flex;gap:10px;flex-wrap:wrap}\n.okk-scope[data-okk=\"logolab\"] .intro .rules span{font:500 12px var(--f-mono);color:var(--muted);padding:6px 11px;border:1px solid var(--line);border-radius:999px}\n.okk-scope[data-okk=\"logolab\"] .lab{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:16px;align-items:start}\n.okk-scope[data-okk=\"logolab\"] .viewcol{position:sticky;top:12px;display:flex;flex-direction:column;gap:12px}\n.okk-scope[data-okk=\"logolab\"] .view{position:relative;overflow:hidden;padding:0;border-radius:24px}\n.okk-scope[data-okk=\"logolab\"] .vp{position:relative;aspect-ratio:16\/10;max-width:100%;background:#0B0E14}\n.okk-scope[data-okk=\"logolab\"] .vp>canvas{position:absolute;inset:0;width:100%!important;height:100%!important;display:block;touch-action:none;cursor:grab}\n.okk-scope[data-okk=\"logolab\"] .vp>canvas:active{cursor:grabbing}\n.okk-scope[data-okk=\"logolab\"] .vp .crn{position:absolute;width:14px;height:14px;border:0 solid rgba(255,255,255,.4);z-index:3;pointer-events:none}\n.okk-scope[data-okk=\"logolab\"] .c-tl{top:12px;left:12px;border-top-width:1.5px!important;border-left-width:1.5px!important}\n.okk-scope[data-okk=\"logolab\"] .c-tr{top:12px;right:12px;border-top-width:1.5px!important;border-right-width:1.5px!important}\n.okk-scope[data-okk=\"logolab\"] .c-bl{bottom:12px;left:12px;border-bottom-width:1.5px!important;border-left-width:1.5px!important}\n.okk-scope[data-okk=\"logolab\"] .c-br{bottom:12px;right:12px;border-bottom-width:1.5px!important;border-right-width:1.5px!important}\n.okk-scope[data-okk=\"logolab\"] .hud{position:absolute;z-index:4;display:flex;gap:6px;align-items:center;flex-wrap:wrap}\n.okk-scope[data-okk=\"logolab\"] .hud.tl{top:14px;left:34px}\n.okk-scope[data-okk=\"logolab\"] .hud.tr{top:10px;right:32px}\n.okk-scope[data-okk=\"logolab\"] .hud.bl{bottom:14px;left:34px}\n.okk-scope[data-okk=\"logolab\"] .tag{font:600 10.5px var(--f-mono);letter-spacing:.12em;text-transform:uppercase;padding:5px 10px;border-radius:999px;background:rgba(6,8,12,.62);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.1);color:#DDE4EE}\n.okk-scope[data-okk=\"logolab\"] .tag b{color:#fff;font-weight:600}\n.okk-scope[data-okk=\"logolab\"] .ibtn{height:32px;padding:0 12px;border-radius:999px;font:600 12px var(--f-body);background:rgba(6,8,12,.62);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.12);color:#fff;display:inline-flex;align-items:center;gap:6px}\n.okk-scope[data-okk=\"logolab\"] .ibtn[aria-pressed=\"true\"]{background:rgba(46,107,255,.6);border-color:rgba(124,196,255,.7)}\n.okk-scope[data-okk=\"logolab\"] .target{position:absolute;right:14px;bottom:14px;z-index:4;width:32%;min-width:120px;border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.25);box-shadow:0 12px 40px rgba(0,0,0,.6);background:#000}\n.okk-scope[data-okk=\"logolab\"] .target canvas{display:block;width:100%;height:auto}\n.okk-scope[data-okk=\"logolab\"] .target span{position:absolute;top:6px;left:6px;font:600 9.5px var(--f-mono);letter-spacing:.12em;text-transform:uppercase;padding:3px 7px;border-radius:999px;background:rgba(0,0,0,.6);color:var(--gold)}\n.okk-scope[data-okk=\"logolab\"] .drop{position:relative;border:1.5px dashed var(--line2);border-radius:16px;padding:16px 14px;text-align:center;display:flex;flex-direction:column;gap:3px;transition:border-color .2s,background-color .2s}\n.okk-scope[data-okk=\"logolab\"] .drop input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}\n.okk-scope[data-okk=\"logolab\"] .drop:hover,.okk-scope[data-okk=\"logolab\"] .drop.over{border-color:var(--brand2);background:rgba(46,107,255,.08)}\n.okk-scope[data-okk=\"logolab\"] .drop b{font:700 14px var(--f-display);letter-spacing:-.02em}\n.okk-scope[data-okk=\"logolab\"] .drop span{font:500 11.5px var(--f-mono);color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .drop small{font-size:12px;color:var(--faint);margin-top:4px}\n.okk-scope[data-okk=\"logolab\"] .mtools{display:flex;gap:6px;flex-wrap:wrap;align-items:center}\n.okk-scope[data-okk=\"logolab\"] .mtools[hidden]{display:none!important}\n.okk-scope[data-okk=\"logolab\"] .minfo{font:500 11px var(--f-mono);color:var(--muted);width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.okk-scope[data-okk=\"logolab\"] .busy,.okk-scope[data-okk=\"logolab\"] .dz{position:absolute;inset:0;z-index:6;display:grid;place-items:center;text-align:center;padding:20px;background:rgba(4,6,10,.72);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);font:600 14px var(--f-body)}\n.okk-scope[data-okk=\"logolab\"] .busy[hidden],.okk-scope[data-okk=\"logolab\"] .dz[hidden]{display:none!important}\n.okk-scope[data-okk=\"logolab\"] .busy i{display:block;width:34px;height:34px;margin:0 auto 12px;border-radius:50%;border:3px solid rgba(124,196,255,.25);border-top-color:var(--brand2);animation:spin .8s linear infinite}\n@keyframes spin{to{transform:rotate(360deg)}}\n.okk-scope[data-okk=\"logolab\"] .dz{border:2px dashed var(--brand2);border-radius:24px;font:700 18px var(--f-display)}\n.okk-scope[data-okk=\"logolab\"] .fallback{position:absolute;inset:0;display:grid;place-items:center;text-align:center;padding:24px;color:var(--muted);z-index:5}\n.okk-scope[data-okk=\"logolab\"] .explain{padding:18px 20px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:center}\n.okk-scope[data-okk=\"logolab\"] .explain h3{font-size:17px;font-weight:700}\n.okk-scope[data-okk=\"logolab\"] .explain p{margin:6px 0 0;color:var(--muted);font-size:14px;max-width:62ch}\n.okk-scope[data-okk=\"logolab\"] .explain .tip{margin-top:10px;font:500 12.5px var(--f-mono);color:var(--brand2)}\n.okk-scope[data-okk=\"logolab\"] .ratio{display:flex;flex-direction:column;align-items:flex-end;gap:2px;text-align:right}\n.okk-scope[data-okk=\"logolab\"] .ratio b{font:700 26px var(--f-display);letter-spacing:-.03em;font-variant-numeric:tabular-nums}\n.okk-scope[data-okk=\"logolab\"] .ratio span{font:500 10px var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .desk{padding:16px;display:flex;flex-direction:column;gap:14px}\n.okk-scope[data-okk=\"logolab\"] .planwrap{position:relative;border-radius:18px;border:1px solid var(--line);background:radial-gradient(closest-side,rgba(46,107,255,.08),transparent),#080B11;overflow:hidden}\n.okk-scope[data-okk=\"logolab\"] .planwrap svg{display:block;width:100%;height:auto;touch-action:none;user-select:none;-webkit-user-select:none}\n.okk-scope[data-okk=\"logolab\"] .planfoot{display:flex;justify-content:space-between;gap:8px;padding:0 12px 10px;font:600 10px var(--f-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}\n.okk-scope[data-okk=\"logolab\"] .planwrap .cap{position:absolute;left:12px;top:10px;font:600 10px var(--f-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}\n.okk-scope[data-okk=\"logolab\"] .planwrap .cap2{position:absolute;right:12px;top:10px;font:500 10.5px var(--f-mono);color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .ring{fill:none;stroke:#1A2232;stroke-width:1}\n.okk-scope[data-okk=\"logolab\"] .ring.d{stroke-dasharray:2 4}\n.okk-scope[data-okk=\"logolab\"] .beam{stroke-width:10;stroke-linecap:round;opacity:.16}\n.okk-scope[data-okk=\"logolab\"] .ldot{cursor:grab}\n.okk-scope[data-okk=\"logolab\"] .ldot:active{cursor:grabbing}\n.okk-scope[data-okk=\"logolab\"] .ldot circle.h{fill:transparent}\n.okk-scope[data-okk=\"logolab\"] .ldot text{font:700 9px var(--f-mono);fill:#0A0D14;pointer-events:none}\n.okk-scope[data-okk=\"logolab\"] .ldot.off{opacity:.3}\n.okk-scope[data-okk=\"logolab\"] .ldot.sel circle.o{stroke:#fff;stroke-width:2}\n.okk-scope[data-okk=\"logolab\"] .ghost circle{fill:none;stroke-width:1.4;stroke-dasharray:3 2}\n.okk-scope[data-okk=\"logolab\"] .cam{fill:#2A3549}\n.okk-scope[data-okk=\"logolab\"] .plab{font:500 9px var(--f-mono);fill:var(--faint)}\n.okk-scope[data-okk=\"logolab\"] .tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding:4px;border:1px solid var(--line);border-radius:14px;background:rgba(0,0,0,.2)}\n.okk-scope[data-okk=\"logolab\"] .tabs button{padding:8px 4px;border-radius:10px;font-size:12.5px;font-weight:600;color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .tabs button[aria-selected=\"true\"]{background:var(--ink);color:var(--bg)}\n.okk-scope[data-okk=\"logolab\"] .pane{display:flex;flex-direction:column;gap:14px}\n.okk-scope[data-okk=\"logolab\"] .pane[hidden]{display:none!important}\n.okk-scope[data-okk=\"logolab\"] .lbl{font:600 10px var(--f-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin-bottom:8px;display:flex;justify-content:space-between;gap:8px}\n.okk-scope[data-okk=\"logolab\"] .lbl b{color:var(--ink);font-weight:600;letter-spacing:.02em;text-transform:none;font-variant-numeric:tabular-nums}\n.okk-scope[data-okk=\"logolab\"] .chips{display:flex;gap:6px;flex-wrap:wrap}\n.okk-scope[data-okk=\"logolab\"] .chip{padding:7px 11px;border-radius:999px;border:1px solid var(--line2);font-size:12.5px;font-weight:500;color:var(--muted);display:inline-flex;align-items:center;gap:7px;transition:all .15s}\n.okk-scope[data-okk=\"logolab\"] .chip:hover{color:var(--ink)}\n.okk-scope[data-okk=\"logolab\"] .chip[aria-pressed=\"true\"]{color:var(--ink);border-color:var(--brand);background:rgba(46,107,255,.14)}\n.okk-scope[data-okk=\"logolab\"] .chip i{width:10px;height:10px;border-radius:50%;display:inline-block;box-shadow:inset 0 0 0 1px rgba(255,255,255,.25)}\n.okk-scope[data-okk=\"logolab\"] .lsel{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}\n.okk-scope[data-okk=\"logolab\"] .lsel button{padding:9px 6px;border-radius:12px;border:1px solid var(--line2);font:600 12px var(--f-body);display:flex;flex-direction:column;align-items:center;gap:4px;color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .lsel button i{width:10px;height:10px;border-radius:50%}\n.okk-scope[data-okk=\"logolab\"] .lsel button[aria-pressed=\"true\"]{color:var(--ink);border-color:var(--ink);background:rgba(255,255,255,.05)}\n.okk-scope[data-okk=\"logolab\"] .lsel button.off i{opacity:.3}\n.okk-scope[data-okk=\"logolab\"] .rowc{display:flex;align-items:center;justify-content:space-between;gap:12px}\n.okk-scope[data-okk=\"logolab\"] input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:22px;background:transparent;margin:0}\n.okk-scope[data-okk=\"logolab\"] input[type=range]::-webkit-slider-runnable-track{height:4px;border-radius:4px;background:linear-gradient(90deg,var(--brand2) var(--v,50%),var(--line2) var(--v,50%))}\n.okk-scope[data-okk=\"logolab\"] input[type=range]::-moz-range-track{height:4px;border-radius:4px;background:var(--line2)}\n.okk-scope[data-okk=\"logolab\"] input[type=range]::-moz-range-progress{height:4px;border-radius:4px;background:var(--brand2)}\n.okk-scope[data-okk=\"logolab\"] input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:#fff;margin-top:-6px;box-shadow:0 0 0 4px rgba(124,196,255,.25)}\n.okk-scope[data-okk=\"logolab\"] input[type=range]::-moz-range-thumb{width:16px;height:16px;border:0;border-radius:50%;background:#fff;box-shadow:0 0 0 4px rgba(124,196,255,.25)}\n.okk-scope[data-okk=\"logolab\"] input[type=range].kel::-webkit-slider-runnable-track{background:linear-gradient(90deg,#FF9A3C,#FFD7A0,#FFF6EA,#DCE8FF,#A9C6FF)}\n.okk-scope[data-okk=\"logolab\"] input[type=range]:disabled{opacity:.35}\n.okk-scope[data-okk=\"logolab\"] input[type=color]{width:34px;height:34px;border:1px solid var(--line2);border-radius:50%;padding:0;background:none;cursor:pointer}\n.okk-scope[data-okk=\"logolab\"] input[type=color]::-webkit-color-swatch-wrapper{padding:3px}\n.okk-scope[data-okk=\"logolab\"] input[type=color]::-webkit-color-swatch{border:0;border-radius:50%}\n.okk-scope[data-okk=\"logolab\"] .sw{position:relative;width:40px;height:22px;border-radius:999px;background:var(--line2);transition:background .2s;flex:none}\n.okk-scope[data-okk=\"logolab\"] .sw::after{content:\"\";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .2s}\n.okk-scope[data-okk=\"logolab\"] input.swi{position:absolute;opacity:0;width:1px;height:1px}\n.okk-scope[data-okk=\"logolab\"] input.swi:checked+.sw{background:var(--brand)}\n.okk-scope[data-okk=\"logolab\"] input.swi:checked+.sw::after{transform:translateX(18px)}\n.okk-scope[data-okk=\"logolab\"] input.swi:focus-visible+.sw{outline:2px solid var(--brand2);outline-offset:2px}\n.okk-scope[data-okk=\"logolab\"] .tg{display:flex;align-items:center;gap:10px;cursor:pointer;font-size:13.5px}\n.okk-scope[data-okk=\"logolab\"] .presets{display:grid;grid-template-columns:1fr 1fr;gap:8px}\n.okk-scope[data-okk=\"logolab\"] .pcard{text-align:left;padding:12px;border-radius:16px;border:1px solid var(--line2);display:flex;flex-direction:column;gap:8px;transition:all .2s;background:rgba(255,255,255,.015)}\n.okk-scope[data-okk=\"logolab\"] .pcard:hover{border-color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .pcard[aria-pressed=\"true\"]{border-color:var(--brand2);background:rgba(46,107,255,.1);box-shadow:0 0 0 1px var(--brand2)}\n.okk-scope[data-okk=\"logolab\"] .pcard b{font:700 13px var(--f-display);letter-spacing:-.02em}\n.okk-scope[data-okk=\"logolab\"] .pcard small{color:var(--muted);font-size:12px;line-height:1.35}\n.okk-scope[data-okk=\"logolab\"] .pcard .dots{display:flex;gap:4px}\n.okk-scope[data-okk=\"logolab\"] .pcard .dots i{width:12px;height:12px;border-radius:50%;box-shadow:0 0 10px currentColor}\n.okk-scope[data-okk=\"logolab\"] .chal{padding:16px;border-radius:16px;border:1px solid rgba(255,203,107,.35);background:linear-gradient(140deg,rgba(255,203,107,.1),rgba(255,203,107,.02))}\n.okk-scope[data-okk=\"logolab\"] .chal h3{font-size:16px;font-weight:700;color:var(--gold)}\n.okk-scope[data-okk=\"logolab\"] .chal p{margin:6px 0 0;color:var(--muted);font-size:13.5px}\n.okk-scope[data-okk=\"logolab\"] .score{display:flex;align-items:flex-end;gap:14px;margin-top:4px}\n.okk-scope[data-okk=\"logolab\"] .score b{white-space:nowrap;font:700 44px var(--f-display);letter-spacing:-.04em;line-height:1;font-variant-numeric:tabular-nums}\n.okk-scope[data-okk=\"logolab\"] .score span{color:var(--muted);font-size:13px;padding-bottom:5px}\n.okk-scope[data-okk=\"logolab\"] .meter{height:6px;border-radius:6px;background:var(--line2);overflow:hidden}\n.okk-scope[data-okk=\"logolab\"] .meter i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--bad),var(--gold),var(--good));transition:width .8s cubic-bezier(.2,.8,.2,1)}\n.okk-scope[data-okk=\"logolab\"] .stats{display:flex;gap:18px;font:500 12px var(--f-mono);color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .stats b{color:var(--ink)}\n.okk-scope[data-okk=\"logolab\"] .rules3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:40px}\n.okk-scope[data-okk=\"logolab\"] .rules3 article{padding:22px}\n.okk-scope[data-okk=\"logolab\"] .rules3 .n{font:700 12px var(--f-mono);color:var(--brand2);letter-spacing:.1em}\n.okk-scope[data-okk=\"logolab\"] .rules3 h3{font-size:17px;font-weight:700;margin-top:10px}\n.okk-scope[data-okk=\"logolab\"] .rules3 p{color:var(--muted);font-size:14px;margin:8px 0 0}\n.okk-scope[data-okk=\"logolab\"] .studio{margin-top:16px;padding:clamp(22px,4vw,36px);display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px;align-items:center;background:linear-gradient(140deg,rgba(46,107,255,.14),rgba(46,107,255,.02))}\n.okk-scope[data-okk=\"logolab\"] .studio h3{font-size:clamp(20px,2.4vw,28px);font-weight:700}\n.okk-scope[data-okk=\"logolab\"] .studio p{color:var(--muted);margin:10px 0 0;max-width:58ch}\n.okk-scope[data-okk=\"logolab\"] .foot{margin-top:28px;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font:500 12px var(--f-mono);color:var(--faint);letter-spacing:.04em}\n.okk-scope[data-okk=\"logolab\"] .shot{position:absolute;inset:0;z-index:20;display:grid;place-items:center;background:rgba(3,4,7,.82);backdrop-filter:blur(6px);padding:16px}\n.okk-scope[data-okk=\"logolab\"] .shot[hidden]{display:none!important}\n.okk-scope[data-okk=\"logolab\"] .shot .in{max-width:min(900px,100%);display:flex;flex-direction:column;gap:12px;align-items:center;text-align:center}\n.okk-scope[data-okk=\"logolab\"] .shot img{max-width:100%;border-radius:14px;border:1px solid var(--line2);box-shadow:0 30px 80px rgba(0,0,0,.6)}\n.okk-scope[data-okk=\"logolab\"] .shot p{margin:0;color:var(--muted);font-size:13.5px}\n.okk-scope[data-okk=\"logolab\"] .toast{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);padding:10px 16px;border-radius:999px;background:var(--ink);color:var(--bg);font-weight:600;font-size:13px;z-index:60;text-align:center;max-width:90%}\n@media (max-width:1020px){.okk-scope[data-okk=\"logolab\"] .lab{grid-template-columns:1fr}\n.okk-scope[data-okk=\"logolab\"] .viewcol{position:relative;top:0}}\n@media (max-width:760px){.okk-scope[data-okk=\"logolab\"] .rules3{grid-template-columns:1fr}\n.okk-scope[data-okk=\"logolab\"] .studio{grid-template-columns:1fr}\n.okk-scope[data-okk=\"logolab\"] .explain{grid-template-columns:1fr}\n.okk-scope[data-okk=\"logolab\"] .ratio{align-items:flex-start;text-align:left}}\n@media (max-width:560px){.okk-scope[data-okk=\"logolab\"] .ibtn .t{display:none}\n.okk-scope[data-okk=\"logolab\"] .ibtn{width:34px;justify-content:center;padding:0}\n.okk-scope[data-okk=\"logolab\"] .vp{aspect-ratio:4\/3}\n.okk-scope[data-okk=\"logolab\"] .bar .pr{display:none}\n.okk-scope[data-okk=\"logolab\"] .presets{grid-template-columns:1fr 1fr}\n.okk-scope[data-okk=\"logolab\"] .target{width:38%}\n.okk-scope[data-okk=\"logolab\"] .hud.tl{left:30px;top:12px}}\n@media (prefers-reduced-motion:reduce){.okk-scope[data-okk=\"logolab\"] *{transition:none!important;animation:none!important}}\n.okk-scope[data-okk=\"logolab\"] .view{background:#05070A}\n.okk-scope[data-okk=\"logolab\"] .vp[data-fmt=\"16:9\"]{aspect-ratio:16\/9}\n.okk-scope[data-okk=\"logolab\"] .vp[data-fmt=\"1:1\"]{aspect-ratio:1\/1;max-width:min(100%,620px);margin:0 auto}\n.okk-scope[data-okk=\"logolab\"] .vp[data-fmt=\"9:16\"]{aspect-ratio:9\/16;max-width:min(100%,380px);margin:0 auto}\n.okk-scope[data-okk=\"logolab\"] .tabs.two{grid-template-columns:1fr 1fr}\n.okk-scope[data-okk=\"logolab\"] .txt{width:100%;height:54px;border-radius:14px;border:1px solid var(--line2);background:rgba(0,0,0,.25);color:var(--ink);font:700 22px var(--f-display);letter-spacing:-.02em;padding:0 16px}\n.okk-scope[data-okk=\"logolab\"] .txt:focus{outline:none;border-color:var(--brand2);box-shadow:0 0 0 3px rgba(124,196,255,.15)}\n.okk-scope[data-okk=\"logolab\"] .tag.rec{color:#fff;background:rgba(255,90,110,.8);border-color:rgba(255,255,255,.3)}\n.okk-scope[data-okk=\"logolab\"] .tag.rec[hidden]{display:none}\n.okk-scope[data-okk=\"logolab\"] .shot video,.okk-scope[data-okk=\"logolab\"] .shot img{max-width:100%;max-height:68vh;border-radius:14px;border:1px solid var(--line2)}\n.okk-scope[data-okk=\"logolab\"] .shot [hidden]{display:none!important}\n.okk-scope[data-okk=\"logolab\"] .ibtn:disabled{opacity:.5}\n.okk-scope[data-okk=\"logolab\"] .explain .btn{white-space:nowrap}\n.okk-scope[data-okk=\"logolab\"] .fonts{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}\n.okk-scope[data-okk=\"logolab\"] .ft{border:1px solid var(--line2);border-radius:12px;padding:9px 2px 7px;display:flex;flex-direction:column;align-items:center;gap:3px;transition:border-color .15s,background-color .15s;min-width:0}\n.okk-scope[data-okk=\"logolab\"] .ft:hover{border-color:var(--muted)}\n.okk-scope[data-okk=\"logolab\"] .ft b{font-size:21px;line-height:1.15;color:var(--ink);white-space:nowrap}\n.okk-scope[data-okk=\"logolab\"] .ft small{font:500 9px var(--f-mono);letter-spacing:.02em;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}\n.okk-scope[data-okk=\"logolab\"] .ft[aria-pressed=\"true\"]{border-color:var(--brand2);background:rgba(46,107,255,.14);box-shadow:0 0 0 1px var(--brand2)}\n\n\/* OK3D \u2014 fond pleine largeur, contenu centr\u00e9 et largeur ma\u00eetris\u00e9e.\n   M\u00eame cadre de 1600px et m\u00eames marges que le configurateur OK3D.\n   --okk-content-max r\u00e8gle la largeur maximale du cadre, marges comprises.\n   Le fond seul suit la largeur de l'\u00e9cran, m\u00eame sur un \u00e9cran tr\u00e8s large. *\/\n.okk-scope[data-okk=\"logolab\"] {\n  --okk-content-max: 1600px;\n  --okk-gutter: clamp(22px, 5vw, 88px);\n  --okk-header-offset: 94px;\n  --okk-top-gap: 54px;\n  position: relative;\n  left: var(--okk-shift, 0px);\n  width: var(--okk-width, 100%) !important;\n  max-width: none !important;\n  min-width: 0;\n  min-height: 100vh;\n  min-height: 100dvh;\n  margin: 0 !important;\n  padding: 0 !important;\n}\n.okk-scope[data-okk=\"logolab\"] .okk {\n  width: 100%;\n  overflow: clip;\n  min-height: 100vh;\n  min-height: 100dvh;\n  padding-left: 0;\n  padding-right: 0;\n  padding-top: calc(var(--okk-header-offset) + var(--okk-top-gap));\n  padding-bottom: max(28px, env(safe-area-inset-bottom, 0px));\n  scroll-margin-top: calc(var(--okk-header-offset) + var(--okk-admin-height, 0px) + 24px);\n}\n.okk-scope[data-okk=\"logolab\"] .wrap {\n  width: 100%;\n  max-width: var(--okk-content-max);\n  margin: 0 auto;\n  padding-left: max(var(--okk-gutter), env(safe-area-inset-left, 0px));\n  padding-right: max(var(--okk-gutter), env(safe-area-inset-right, 0px));\n}\n.okk-scope[data-okk=\"logolab\"] .intro { padding-top: 0; }\n.okk-scope[data-okk=\"logolab\"] .lab { grid-template-columns: minmax(0, 1fr) clamp(360px, 28%, 400px); }\n.okk-scope[data-okk=\"logolab\"] .lab > *, .okk-scope[data-okk=\"logolab\"] .intro > *, .okk-scope[data-okk=\"logolab\"] .studio > *,\n.okk-scope[data-okk=\"logolab\"] .explain > *, .okk-scope[data-okk=\"logolab\"] .rowc > *, .okk-scope[data-okk=\"logolab\"] .res > *,\n.okk-scope[data-okk=\"logolab\"] .cta > *, .okk-scope[data-okk=\"logolab\"] .ghead > *, .okk-scope[data-okk=\"logolab\"] .fb > * { min-width: 0; }\n.okk-scope[data-okk=\"logolab\"] .viewcol { top: calc(var(--okk-header-offset) + var(--okk-admin-height, 0px) + 12px); }\n.okk-scope[data-okk=\"logolab\"] .intro h1, .okk-scope[data-okk=\"logolab\"] .studio h3,\n.okk-scope[data-okk=\"logolab\"] .drop span, .okk-scope[data-okk=\"logolab\"] .planfoot { overflow-wrap: anywhere; }\n.okk-scope[data-okk=\"logolab\"] .rowc > .chips { flex: 1 1 0; }\n.okk-scope[data-okk=\"logolab\"] input[type=color] { flex: 0 0 34px; }\n.okk-scope[data-okk=\"logolab\"] .btn { max-width: 100%; height: auto; min-height: 44px; padding-block: 10px; white-space: normal; text-align: center; }\n.okk-scope[data-okk=\"logolab\"] .btn.sm { min-height: 34px; padding-block: 6px; }\n.okk-scope[data-okk=\"logolab\"] .explain .btn { white-space: normal; }\n.okk-scope[data-okk=\"logolab\"] .bar .screen-btn { margin-left: auto; }\n.okk-scope[data-okk=\"logolab\"] .game { width: 100%; max-width: 680px; margin-inline: auto; }\n.okk-scope[data-okk=\"logolab\"] .icons .ico span { overflow-wrap: anywhere; }\n.okk-scope[data-okk=\"logolab\"] .hint {\n  width: max-content;\n  max-width: calc(100% - 24px);\n  white-space: normal;\n  text-align: center;\n}\n.okk-scope[data-okk=\"logolab\"] .fb .tx { overflow-wrap: anywhere; }\n.okk-scope[data-okk=\"logolab\"] .shot { overflow-y: auto; }\n.okk-scope[data-okk=\"logolab\"] .shot img, .okk-scope[data-okk=\"logolab\"] .shot video { max-height: 60vh; max-height: 60dvh; object-fit: contain; }\n.okk-scope[data-okk=\"logolab\"]:fullscreen {\n  left: 0 !important;\n  width: 100% !important;\n  height: 100vh;\n  height: 100dvh;\n  overflow: auto;\n  overscroll-behavior: contain;\n  --okk-admin-height: 0px !important;\n  --okk-header-offset: 0px !important;\n  --okk-top-gap: 32px !important;\n}\n.okk-scope[data-okk=\"logolab\"]:-webkit-full-screen {\n  left: 0 !important;\n  width: 100% !important;\n  height: 100vh;\n  overflow: auto;\n  --okk-admin-height: 0px !important;\n  --okk-header-offset: 0px !important;\n  --okk-top-gap: 32px !important;\n}\n\/* Ces ajustements ne concernent que le widget contenant ce laboratoire. *\/\n.elementor-widget-html:has(.okk-scope[data-okk=\"logolab\"]) { width: 100%; min-width: 0; padding: 0; }\n.elementor-widget-container:has(> .okk-scope[data-okk=\"logolab\"]) { padding: 0; margin: 0; }\n@media (max-width: 1020px) {\n  .okk-scope[data-okk=\"logolab\"] .lab { grid-template-columns: minmax(0, 1fr); }\n  .okk-scope[data-okk=\"logolab\"] .viewcol { position: relative; top: 0; }\n}\n@media (max-width: 700px) {\n  .okk-scope[data-okk=\"logolab\"] { --okk-header-offset: 78px; --okk-top-gap: 43px; }\n}\n@media (max-width: 560px) {\n  .okk-scope[data-okk=\"logolab\"] .bar { gap: 10px; }\n  .okk-scope[data-okk=\"logolab\"] .bar > a.btn { flex-basis: 100%; }\n  .okk-scope[data-okk=\"logolab\"] .intro { padding-block: 0 22px; }\n  .okk-scope[data-okk=\"logolab\"] .intro h1 { font-size: clamp(26px, 7.6vw, 40px); }\n  .okk-scope[data-okk=\"logolab\"] .desk { padding: 12px; }\n  .okk-scope[data-okk=\"logolab\"] .planfoot { flex-wrap: wrap; }\n  .okk-scope[data-okk=\"logolab\"] .explain { padding: 16px; }\n  .okk-scope[data-okk=\"logolab\"] .stats { flex-wrap: wrap; }\n  .okk-scope[data-okk=\"logolab\"] .hud.tr { right: 12px; }\n  .okk-scope[data-okk=\"logolab\"] .hud.tl { left: 14px; top: auto; bottom: 54px; }\n}\n\n\/* Affichage app lorsque le plein \u00e9cran natif n'est pas disponible. *\/\n.okk-scope[data-okk=\"logolab\"].is-app-screen {\n  position: fixed !important; inset: 0 !important; left: 0 !important;\n  width: 100% !important; max-width: none !important; margin: 0 !important;\n  height: 100vh; height: 100dvh; overflow: auto; overscroll-behavior: contain;\n  z-index: 2147483646;\n}\n.okk-scope[data-okk=\"logolab\"]:fullscreen, .okk-scope[data-okk=\"logolab\"].is-app-screen {\n  --okk-header-offset: 0px !important; --okk-top-gap: 32px !important;\n  --okk-admin-height: 0px !important;\n  left: 0 !important; width: 100% !important; max-width: none !important; margin: 0 !important;\n  height: 100vh; height: 100dvh; overflow: auto; overscroll-behavior: contain;\n  \n}\n.okk-scope[data-okk=\"logolab\"]:-webkit-full-screen {\n  --okk-header-offset: 0px !important; --okk-top-gap: 32px !important; --okk-admin-height: 0px !important;\n  left: 0 !important; width: 100% !important; max-width: none !important; margin: 0 !important;\n  height: 100vh; overflow: auto;\n  \n}\n.okk-scope[data-okk=\"logolab\"] .appbar {\n  display: flex; justify-content: flex-end; align-items: center; gap: 12px;\n  flex-wrap: wrap; padding: 0 0 18px;\n}\n.okk-scope[data-okk=\"logolab\"] .screen-btn { margin-left: auto; flex: 0 0 auto; }\n.okk-scope[data-okk=\"logolab\"]:fullscreen .appbar, .okk-scope[data-okk=\"logolab\"].is-app-screen .appbar,\n.okk-scope[data-okk=\"logolab\"]:fullscreen .bar, .okk-scope[data-okk=\"logolab\"].is-app-screen .bar {\n  position: sticky; top: 0; z-index: 40; background: var(--bg, #06080c);\n  padding-block: 10px; margin-bottom: 12px;\n}\n\n\n<\/style>\n<div class=\"okk-scope\" data-okk=\"logolab\">\n<div class=\"okk\" id=\"okk\">\n  <div class=\"wrap\">\n    <div class=\"appbar\"><button type=\"button\" class=\"btn gho sm screen-btn\" data-okk-fullscreen aria-pressed=\"false\">\u26f6 Plein \u00e9cran<\/button><\/div>\n\n    <section class=\"intro\">\n      <div>\n        <span class=\"eyebrow\">OK3D Lab \u00b7 Logo 3D<\/span>\n        <h1>Ton logo en 3D.<br><span class=\"grad\">En dix secondes.<\/span><\/h1>\n        <p>Tape le nom de ta marque ou d\u00e9pose ton logo en SVG. Choisis une mati\u00e8re, une lumi\u00e8re, une animation, et repars avec une image ou une vid\u00e9o pr\u00eate pour tes r\u00e9seaux.<\/p>\n      <\/div>\n      <div class=\"rules\"><span>Texte ou SVG<\/span><span>Rendu temps r\u00e9el<\/span><span>Vid\u00e9o 6 s<\/span><span>16:9 \u00b7 1:1 \u00b7 9:16<\/span><\/div>\n    <\/section>\n\n    <section class=\"lab\">\n      <div class=\"viewcol\">\n        <div class=\"glass view\" id=\"view\">\n          <div class=\"vp\" id=\"vp\" data-fmt=\"16:9\">\n            <span class=\"crn c-tl\"><\/span><span class=\"crn c-tr\"><\/span><span class=\"crn c-bl\"><\/span><span class=\"crn c-br\"><\/span>\n            <div class=\"hud tl\"><span class=\"tag\" id=\"ftag\">16:9 \u00b7 Nuit<\/span><span class=\"tag rec\" id=\"rec\" hidden>\u25cf REC <b id=\"rect\">6<\/b><\/span><\/div>\n            <div class=\"hud tr\"><button type=\"button\" class=\"ibtn\" id=\"snap\" aria-label=\"Capture\">\u25c9<span class=\"t\"> Capture<\/span><\/button><button type=\"button\" class=\"ibtn\" id=\"vid\" aria-label=\"Vid\u00e9o 6 secondes\">\u25b6<span class=\"t\"> Vid\u00e9o 6 s<\/span><\/button><\/div>\n            <div class=\"busy\" id=\"busy\" hidden><div><i><\/i><span id=\"busyt\">Chargement\u2026<\/span><\/div><\/div>\n            <div class=\"dz\" id=\"dz\" hidden>D\u00e9pose ton logo SVG<\/div>\n            <div class=\"shot\" id=\"shot\" hidden><div class=\"in\"><img id=\"shotimg\" alt=\"Capture du logo en 3D\" hidden><video id=\"shotvid\" autoplay loop muted playsinline controls hidden><\/video><p id=\"shotp\"><\/p>\n              <div style=\"display:flex;gap:8px;flex-wrap:wrap;justify-content:center\"><a class=\"btn pri sm\" id=\"shotdl\" hidden>T\u00e9l\u00e9charger<\/a><button type=\"button\" class=\"btn gho sm\" id=\"shotx\">Fermer<\/button><\/div><\/div><\/div>\n          <\/div>\n        <\/div>\n        <div class=\"glass explain\">\n          <div><h3>Ceci est un aper\u00e7u temps r\u00e9el.<\/h3><p>Une animation de logo produite par OK3D va plus loin : mod\u00e9lisation sur mesure, mati\u00e8res photor\u00e9alistes, rendu cin\u00e9ma, cam\u00e9ra et sound design. Id\u00e9ale pour une ouverture de vid\u00e9o, un salon ou un lancement.<\/p><\/div>\n          <a class=\"btn pri\" id=\"cta-mid\" href=\"#\" target=\"_blank\" rel=\"noopener\">Demander mon animation \u2192<\/a>\n        <\/div>\n      <\/div>\n\n      <aside class=\"glass desk\">\n        <div>\n          <div class=\"tabs two\" role=\"tablist\"><button type=\"button\" role=\"tab\" data-src=\"text\" aria-selected=\"true\">Texte<\/button><button type=\"button\" role=\"tab\" data-src=\"svg\" aria-selected=\"false\">Logo SVG<\/button><\/div>\n        <\/div>\n        <div class=\"pane\" id=\"p-text\">\n          <div><div class=\"lbl\">Ta marque <b id=\"cnt\"><\/b><\/div><input class=\"txt\" id=\"txt\" maxlength=\"16\" autocomplete=\"off\" spellcheck=\"false\" aria-label=\"Texte du logo\"><\/div>\n          <div><div class=\"lbl\">Police <b id=\"fname\"><\/b><\/div><div class=\"fonts\" id=\"fonts\"><\/div><\/div>\n          <div><div class=\"lbl\">Interlettrage <b id=\"v-track\"><\/b><\/div><input type=\"range\" id=\"track\" min=\"-0.06\" max=\"0.5\" step=\"0.01\"><\/div>\n          <label class=\"tg\"><input type=\"checkbox\" class=\"swi\" id=\"caps\"><span class=\"sw\"><\/span><span>Tout en majuscules<\/span><\/label>\n        <\/div>\n        <div class=\"pane\" id=\"p-svg\" hidden>\n          <div class=\"drop\" id=\"drop\"><input type=\"file\" id=\"sfile\" accept=\".svg,image\/svg+xml\" aria-label=\"Importer un logo SVG\"><b>D\u00e9pose ton logo SVG<\/b><span>Formes pleines \u00b7 fond transparent<\/span><small>Le fichier reste dans ton navigateur, rien n'est envoy\u00e9.<\/small><\/div>\n          <div class=\"rowc\"><button type=\"button\" class=\"chip\" id=\"sample\">Logo d'exemple \u2733<\/button><label class=\"tg\"><input type=\"checkbox\" class=\"swi\" id=\"keepc\"><span class=\"sw\"><\/span><span>Couleurs du SVG<\/span><\/label><\/div>\n          <div class=\"minfo\" id=\"sinfo\"><\/div>\n        <\/div>\n        <div><div class=\"lbl\">Mati\u00e8re<\/div><div class=\"chips\" id=\"mats\"><\/div><\/div>\n        <div id=\"colrow\"><div class=\"lbl\">Couleur<\/div><div class=\"rowc\"><div class=\"chips\" id=\"cols\"><\/div><input type=\"color\" id=\"col\" aria-label=\"Couleur personnalis\u00e9e\"><\/div><\/div>\n        <div><div class=\"lbl\">Profondeur <b id=\"v-depth\"><\/b><\/div><input type=\"range\" id=\"depth\" min=\"0.05\" max=\"0.9\" step=\"0.01\"><\/div>\n        <div><div class=\"lbl\">Biseau <b id=\"v-bevel\"><\/b><\/div><input type=\"range\" id=\"bevel\" min=\"0\" max=\"0.08\" step=\"0.002\"><\/div>\n        <div><div class=\"lbl\">Lumi\u00e8re<\/div><div class=\"chips\" id=\"lights\"><\/div><\/div>\n        <div><div class=\"lbl\">Fond<\/div><div class=\"rowc\"><div class=\"chips\" id=\"bgs\"><\/div><input type=\"color\" id=\"bgc\" aria-label=\"Fond personnalis\u00e9\"><\/div><\/div>\n        <div><div class=\"lbl\">Animation<\/div><div class=\"chips\" id=\"anims\"><\/div><\/div>\n        <div><div class=\"lbl\">Format<\/div><div class=\"chips\" id=\"fmts\"><\/div><\/div>\n      <\/aside>\n    <\/section>\n\n    <section class=\"rules3\">\n      <article class=\"glass\"><span class=\"n\">USAGE 01<\/span><h3>Ouverture de vid\u00e9o<\/h3><p>Trois secondes de logo anim\u00e9 en t\u00eate de chaque film installent la marque avant m\u00eame le premier plan.<\/p><\/article>\n      <article class=\"glass\"><span class=\"n\">USAGE 02<\/span><h3>R\u00e9seaux sociaux<\/h3><p>Une boucle en 1:1 ou 9:16 s'arr\u00eate dans le fil d'actualit\u00e9. Exporte la vid\u00e9o et teste-la d\u00e8s aujourd'hui.<\/p><\/article>\n      <article class=\"glass\"><span class=\"n\">USAGE 03<\/span><h3>Salons et \u00e9crans<\/h3><p>Sur un \u00e9cran de stand ou en vitrine, un logo en volume attire l'\u0153il de loin, en boucle, sans son.<\/p><\/article>\n    <\/section>\n\n    <section class=\"glass studio\">\n      <div><span class=\"eyebrow\">Studio OK3D<\/span><h3 style=\"margin-top:12px\">Passe de l'aper\u00e7u \u00e0 l'animation de marque.<\/h3>\n        <p>OK3D mod\u00e9lise ton logo au d\u00e9tail pr\u00e8s, lui donne des mati\u00e8res photor\u00e9alistes et l'anime pour la vid\u00e9o, le web et l'\u00e9v\u00e9nementiel.<\/p><\/div>\n      <a class=\"btn pri\" id=\"cta-bottom\" href=\"#\" target=\"_blank\" rel=\"noopener\">Demander un devis \u2192<\/a>\n    <\/section>\n    <footer class=\"foot\"><span>Logo Lab \u00b7 un outil OK3D Studio, Paris<\/span><span>Rendu temps r\u00e9el WebGL<\/span><\/footer>\n  <\/div>\n<\/div>\n<\/div>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r128\/three.min.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/controls\/OrbitControls.js\"><\/script>\n<script>\n(function(){\nconst OKK=document.querySelector('[data-okk=\"logolab\"]:not([data-okk-ready])');\nif(!OKK) return;\nOKK.setAttribute('data-okk-ready', 'true');\n\nconst FONT_SRC={inter:[\"inter\",800],montserrat:[\"montserrat\",800],archivo:[\"archivo-black\",400],oswald:[\"oswald\",700],playfair:[\"playfair-display\",800],orbitron:[\"orbitron\",800],fredoka:[\"fredoka\",600],righteous:[\"righteous\",400],pacifico:[\"pacifico\",400],unbounded:[\"unbounded\",700]};\nlet otP=null;\nfunction loadOT(){ return otP||(otP=new Promise((res,rej)=>{ if(window.opentype) return res(); const s=document.createElement(\"script\"); s.src=\"https:\/\/cdn.jsdelivr.net\/npm\/opentype.js@1.3.4\/dist\/opentype.min.js\"; s.onload=res; s.onerror=()=>{ otP=null; rej(new Error(\"Police indisponible\")) }; document.head.appendChild(s) })) }\nasync function fontFromCDN(k){ await loadOT(); const [p,w]=FONT_SRC[k]; const r=await fetch(`https:\/\/cdn.jsdelivr.net\/npm\/@fontsource\/${p}@5.3.0\/files\/${p}-latin-${w}-normal.woff`); if(!r.ok) throw new Error(\"Police indisponible\");\n  const f=window.opentype.parse(await r.arrayBuffer()); const R=Math.round, glyphs={};\n  const CS=[...Array(95)].map((_,i)=>String.fromCharCode(32+i)).join(\"\")+\"\u00e0\u00e2\u00e4\u00e7\u00e9\u00e8\u00ea\u00eb\u00ee\u00ef\u00f4\u00f6\u00f9\u00fb\u00fc\u00ff\u0153\u00e6\u00c0\u00c2\u00c4\u00c7\u00c9\u00c8\u00ca\u00cb\u00ce\u00cf\u00d4\u00d6\u00d9\u00db\u00dc\u0152\u00c6\u2019\u00ab\u00bb\u20ac\u00b0\";\n  for(const ch of CS){ const g=f.charToGlyph(ch); if(!g||g.index===0) continue; let o=\"\";\n    for(const c of g.path.commands){ if(c.type===\"M\") o+=`m ${R(c.x)} ${R(c.y)} `; else if(c.type===\"L\") o+=`l ${R(c.x)} ${R(c.y)} `; else if(c.type===\"Q\") o+=`q ${R(c.x)} ${R(c.y)} ${R(c.x1)} ${R(c.y1)} `; else if(c.type===\"C\") o+=`b ${R(c.x)} ${R(c.y)} ${R(c.x1)} ${R(c.y1)} ${R(c.x2)} ${R(c.y2)} ` }\n    glyphs[ch]={ha:R(g.advanceWidth),o:o.trim()} }\n  const h=f.tables.head, post=f.tables.post||{};\n  return {glyphs,familyName:k,ascender:R(f.ascender),descender:R(f.descender),underlinePosition:R(post.underlinePosition||-100),underlineThickness:R(post.underlineThickness||50),boundingBox:{yMin:R(h.yMin),xMin:R(h.xMin),yMax:R(h.yMax),xMax:R(h.xMax)},resolution:f.unitsPerEm} }\n\n\nconst FONTS={unbounded:{\"glyphs\":{\"0\":{\"ha\":925,\"x_min\":42,\"x_max\":883,\"o\":\"m 463 -16 l 463 -16 q 240 33 335 -16 q 94 169 145 81 q 42 375 42 257 l 42 375 q 94 581 42 493 q 240 718 145 669 q 463 766 335 766 l 463 766 q 685 718 590 766 q 831 581 779 669 q 883 375 883 493 l 883 375 q 831 169 883 257 q 685 33 779 81 q 463 -16 590 -16 m 463 152 l 463 152 q 620 211 564 152 q 676 375 676 269 l 676 375 q 620 540 676 482 q 463 598 564 598 l 463 598 q 305 540 362 598 q 248 375 248 482 l 248 375 q 305 211 248 269 q 463 152 362 152\"},\"1\":{\"ha\":520,\"x_min\":14,\"x_max\":446,\"o\":\"m 294 750 l 446 750 l 446 0 l 241 0 l 241 572 l 14 532 l 14 692 l 294 750\"},\"2\":{\"ha\":835,\"x_min\":34,\"x_max\":792,\"o\":\"m 240 480 l 34 480 q 92 633 40 568 q 231 732 144 697 q 426 766 317 766 l 426 766 q 608 735 530 766 q 728 647 685 703 q 771 517 771 591 l 771 517 q 740 411 771 460 q 643 314 709 361 q 470 214 577 266 l 470 214 l 370 164 l 792 164 l 792 0 l 50 0 l 50 144 l 372 325 q 489 398 447 368 q 548 452 530 427 q 565 505 565 477 l 565 505 q 549 559 565 536 q 499 594 532 581 q 418 607 466 607 l 418 607 q 320 590 358 607 q 263 544 282 572 q 240 480 244 515 l 240 480\"},\"3\":{\"ha\":839,\"x_min\":28,\"x_max\":795,\"o\":\"m 254 508 l 47 508 q 98 638 53 579 q 228 731 143 696 q 435 766 313 766 l 435 766 q 617 740 539 766 q 737 667 694 714 q 779 556 779 620 l 779 556 q 749 464 779 506 q 653 398 718 422 l 653 398 q 620 387 637 392 l 620 387 q 650 381 636 385 l 650 381 q 758 322 720 363 q 795 218 795 281 l 795 218 q 751 97 795 150 q 624 14 707 44 q 419 -16 540 -16 l 419 -16 q 215 16 302 -16 q 80 108 128 48 q 28 247 31 167 l 28 247 l 234 247 q 287 170 242 197 q 419 143 331 143 l 419 143 q 542 167 499 143 q 584 234 584 191 l 584 234 q 571 276 584 259 q 523 302 557 293 q 428 310 489 310 l 428 310 l 299 310 l 299 450 l 428 450 q 539 471 507 450 q 570 527 570 492 l 570 527 q 534 586 570 565 q 424 607 497 607 l 424 607 q 304 581 346 607 q 254 508 262 555 l 254 508\"},\"4\":{\"ha\":861,\"x_min\":24,\"x_max\":828,\"o\":\"m 446 750 l 708 750 l 708 293 l 828 293 l 828 140 l 708 140 l 708 0 l 503 0 l 503 140 l 24 140 l 24 286 l 446 750 m 235 293 l 503 293 l 503 589 l 235 293\"},\"5\":{\"ha\":807,\"x_min\":29,\"x_max\":770,\"o\":\"m 58 300 l 124 750 l 711 750 l 711 596 l 262 596 l 237 432 q 329 481 274 462 l 329 481 q 459 499 385 499 l 459 499 q 625 468 555 499 q 732 381 694 436 q 770 252 770 325 l 770 252 q 727 114 770 174 q 602 19 683 53 q 405 -16 520 -16 l 405 -16 q 212 17 294 -16 q 83 105 129 49 q 29 229 36 160 l 29 229 l 235 229 q 289 167 245 190 q 405 143 333 143 l 405 143 q 490 157 455 143 q 544 195 525 170 q 563 253 563 219 l 563 253 q 546 310 563 285 q 495 349 529 335 q 411 362 461 362 l 411 362 q 336 353 369 362 q 279 330 303 344 q 237 300 254 316 l 237 300 l 58 300\"},\"6\":{\"ha\":857,\"x_min\":43,\"x_max\":816,\"o\":\"m 449 766 l 449 766 q 622 737 546 766 q 744 657 697 707 q 800 543 790 606 l 800 543 l 608 543 q 558 594 594 573 q 454 615 522 615 l 454 615 q 333 588 381 615 q 261 509 284 560 q 237 383 237 458 l 237 383 q 237 375 237 379 l 237 375 q 246 385 241 380 l 246 385 q 363 461 295 433 q 515 489 430 489 l 515 489 q 676 458 609 489 q 780 373 743 427 q 816 245 816 318 l 816 245 q 774 110 816 169 q 651 18 731 51 q 455 -16 571 -16 l 455 -16 q 226 34 317 -16 q 89 172 134 84 q 43 374 43 260 q 89 577 43 488 q 225 716 134 666 q 449 766 315 766 m 261 252 l 261 252 q 263 247 262 249 l 263 247 q 338 164 289 192 q 458 136 387 136 l 458 136 q 541 150 507 136 q 591 187 574 163 q 608 238 608 210 l 608 238 q 592 291 608 268 q 544 325 576 313 q 464 337 512 337 l 464 337 q 342 309 400 337 l 342 309 q 261 252 299 288\"},\"7\":{\"ha\":753,\"x_min\":13,\"x_max\":725,\"o\":\"m 360 0 l 123 0 l 499 586 l 13 586 l 13 750 l 725 750 l 725 585 l 360 0\"},\"8\":{\"ha\":892,\"x_min\":42,\"x_max\":850,\"o\":\"m 446 766 l 446 766 q 729 710 631 766 q 827 552 827 653 l 827 552 q 742 416 827 462 l 742 416 q 671 389 711 399 l 671 389 q 759 360 721 380 l 759 360 q 850 208 850 312 l 850 208 q 747 42 850 99 q 446 -16 643 -16 l 446 -16 q 146 42 250 -16 q 42 208 42 99 l 42 208 q 134 361 42 312 l 134 361 q 220 390 171 380 l 220 390 q 151 416 181 400 l 151 416 q 65 552 65 462 l 65 552 q 163 710 65 653 q 446 766 261 766 m 446 142 l 446 142 q 591 164 541 142 q 640 226 640 185 l 640 226 q 591 289 640 268 q 446 310 541 310 q 302 289 351 310 q 252 226 252 268 l 252 226 q 302 164 252 185 q 446 142 351 142 m 446 453 l 446 453 q 542 462 503 453 q 601 488 580 470 q 621 531 621 505 l 621 531 q 576 588 621 568 q 446 608 531 608 l 446 608 q 317 588 362 608 q 272 531 272 568 l 272 531 q 292 488 272 505 q 351 462 312 470 q 446 453 390 453\"},\"9\":{\"ha\":857,\"x_min\":40,\"x_max\":814,\"o\":\"m 408 -16 l 408 -16 q 236 14 311 -16 q 114 94 160 43 q 57 207 67 145 l 57 207 l 248 207 q 300 156 263 177 q 402 135 336 135 l 402 135 q 525 163 477 135 q 597 242 573 190 q 620 367 620 293 l 620 367 q 620 374 620 371 l 620 374 q 612 366 616 370 l 612 366 q 495 289 562 317 q 341 261 428 261 l 341 261 q 181 292 248 261 q 77 378 113 323 q 40 505 41 433 l 40 505 q 83 640 41 581 q 206 733 125 699 q 402 766 287 766 l 402 766 q 632 716 540 766 q 769 578 723 666 q 814 376 815 490 l 814 376 q 769 174 815 262 q 633 35 723 85 q 408 -16 542 -16 m 596 498 l 596 498 q 594 503 595 500 l 594 503 q 519 586 568 558 q 399 614 469 614 l 399 614 q 316 601 349 614 q 266 564 283 587 q 248 512 248 541 l 248 512 q 265 460 248 482 q 313 426 281 438 q 393 413 345 413 l 393 413 q 516 441 457 413 l 516 441 q 596 498 559 462\"},\" \":{\"ha\":248,\"x_min\":0,\"x_max\":0,\"o\":\"\"},\"!\":{\"ha\":323,\"x_min\":48,\"x_max\":275,\"o\":\"m 89 265 l 55 750 l 268 750 l 234 265 l 89 265 m 162 -10 l 162 -10 q 80 19 111 -10 q 48 95 48 48 l 48 95 q 80 172 48 143 q 162 201 111 201 l 162 201 q 244 172 213 201 q 275 95 275 143 l 275 95 q 244 19 275 48 q 162 -10 213 -10\"},\"\\\"\":{\"ha\":506,\"x_min\":36,\"x_max\":469,\"o\":\"m 430 415 l 314 415 l 275 750 l 469 750 l 430 415 m 191 415 l 76 415 l 36 750 l 231 750 l 191 415\"},\"#\":{\"ha\":857,\"x_min\":41,\"x_max\":815,\"o\":\"m 198 572 l 219 750 l 382 750 l 361 572 l 541 572 l 562 750 l 725 750 l 704 572 l 815 572 l 815 433 l 688 433 l 674 316 l 791 316 l 791 177 l 658 177 l 637 0 l 474 0 l 495 177 l 315 177 l 294 0 l 131 0 l 152 177 l 41 177 l 41 316 l 168 316 l 182 433 l 65 433 l 65 572 l 198 572 m 525 433 l 345 433 l 331 316 l 511 316 l 525 433\"},\"$\":{\"ha\":812,\"x_min\":38,\"x_max\":773,\"o\":\"m 329 832 l 480 832 l 480 760 q 578 736 533 753 l 578 736 q 703 650 657 705 q 754 520 749 594 l 754 520 l 552 520 q 508 586 546 559 l 508 586 q 480 599 496 594 l 480 599 l 480 460 l 485 460 q 653 425 590 452 q 745 352 716 397 q 773 240 773 306 l 773 240 q 729 106 773 164 q 605 16 685 48 l 605 16 q 480 -13 549 -6 l 480 -13 l 480 -82 l 329 -82 l 329 -11 q 220 17 270 -3 l 220 17 q 89 109 136 49 q 38 246 41 168 l 38 246 l 241 246 q 295 167 248 196 l 295 167 q 329 151 310 157 l 329 151 l 329 298 q 115 370 183 311 l 115 370 q 46 527 46 429 l 46 527 q 89 657 46 603 q 210 738 132 710 l 210 738 q 329 763 263 757 l 329 763 l 329 832 m 480 284 l 480 284 l 480 142 q 532 159 511 148 l 532 159 q 570 216 570 179 l 570 216 q 559 251 570 236 q 520 275 547 265 l 520 275 q 480 284 504 280 m 329 475 l 329 607 q 286 593 304 602 l 286 593 q 248 537 248 573 l 248 537 q 258 506 248 520 q 293 484 268 492 l 293 484 q 329 475 308 478 l 329 475\"},\"%\":{\"ha\":1294,\"x_min\":23,\"x_max\":1270,\"o\":\"m 288 311 l 288 311 q 150 339 210 311 q 57 418 90 367 q 23 536 23 469 l 23 536 q 57 654 23 603 q 150 732 90 704 q 288 760 210 760 l 288 760 q 428 732 368 760 q 520 654 487 704 q 553 536 553 603 l 553 536 q 520 418 553 469 q 428 339 487 367 q 288 311 368 311 m 288 429 l 288 429 q 366 457 338 429 q 394 536 394 485 l 394 536 q 367 614 394 585 q 289 642 339 642 l 289 642 q 211 614 239 642 q 183 536 183 585 l 183 536 q 211 457 183 485 q 288 429 239 429 m 1005 -17 l 1005 -17 q 867 11 926 -17 q 774 90 807 39 q 740 208 740 141 l 740 208 q 774 326 740 275 q 867 404 807 376 q 1005 432 927 432 l 1005 432 q 1144 404 1085 432 q 1237 326 1203 376 q 1270 208 1270 275 l 1270 208 q 1237 90 1270 141 q 1144 11 1203 39 q 1005 -17 1084 -17 m 1005 102 l 1005 102 q 1083 130 1055 102 q 1111 208 1111 158 l 1111 208 q 1083 287 1111 258 q 1005 315 1055 315 l 1005 315 q 928 287 955 315 q 900 208 900 258 l 900 208 q 928 130 900 158 q 1005 102 955 102 m 368 0 l 776 750 l 926 750 l 517 0 l 368 0\"},\"&\":{\"ha\":940,\"x_min\":30,\"x_max\":954,\"o\":\"m 751 537 l 751 537 l 548 537 q 516 599 543 574 q 437 623 488 623 l 437 623 q 386 615 407 623 q 353 592 364 607 q 342 558 342 577 l 342 558 q 352 526 342 542 q 383 492 361 510 l 383 492 l 609 298 l 698 414 l 910 414 l 721 201 l 954 0 l 699 0 l 606 79 q 571 52 589 64 l 571 52 q 463 0 521 16 q 331 -16 405 -16 l 331 -16 q 170 14 237 -16 q 66 93 102 43 q 30 207 30 143 l 30 207 q 60 309 30 263 q 154 386 90 355 l 154 386 q 220 410 183 400 l 220 410 q 155 483 182 444 l 155 483 q 125 572 125 524 l 125 572 q 160 674 125 630 q 263 742 195 717 q 429 766 331 766 l 429 766 q 600 736 529 766 q 709 654 670 706 q 751 537 747 602 m 496 174 l 496 174 l 312 331 q 267 305 285 320 l 267 305 q 233 234 233 275 l 233 234 q 250 185 233 207 q 295 149 266 162 q 362 136 323 136 l 362 136 q 479 163 432 136 l 479 163 q 496 174 487 168\"},\"'\":{\"ha\":275,\"x_min\":36,\"x_max\":239,\"o\":\"m 76 415 l 36 750 l 239 750 l 199 415 l 76 415\"},\"(\":{\"ha\":390,\"x_min\":35,\"x_max\":370,\"o\":\"m 211 750 l 211 750 l 370 750 q 277 531 307 636 q 246 320 246 425 l 246 320 q 277 112 246 217 q 370 -110 307 6 l 370 -110 l 211 -110 q 79 98 123 -8 q 35 320 35 204 l 35 320 q 79 542 35 436 q 211 750 123 648\"},\")\":{\"ha\":390,\"x_min\":20,\"x_max\":355,\"o\":\"m 20 750 l 179 750 q 312 542 268 648 q 355 320 355 436 l 355 320 q 312 98 355 204 q 179 -110 268 -8 l 179 -110 l 20 -110 q 114 112 84 6 q 144 320 144 217 l 144 320 q 114 531 144 425 q 20 750 84 636 l 20 750\"},\"*\":{\"ha\":536,\"x_min\":36,\"x_max\":501,\"o\":\"m 214 619 l 206 768 l 331 768 l 324 619 l 463 673 l 501 554 l 358 514 l 452 398 l 351 325 l 268 449 l 185 325 l 84 398 l 179 514 l 36 554 l 74 673 l 214 619\"},\"+\":{\"ha\":620,\"x_min\":30,\"x_max\":590,\"o\":\"m 384 74 l 236 74 l 236 280 l 30 280 l 30 428 l 236 428 l 236 634 l 384 634 l 384 428 l 590 428 l 590 280 l 384 280 l 384 74\"},\",\":{\"ha\":302,\"x_min\":35,\"x_max\":265,\"o\":\"m 135 -148 l 36 -148 l 107 1 q 92 8 99 4 l 92 8 q 51 49 66 23 q 35 106 35 75 l 35 106 q 51 164 35 138 q 92 204 66 189 q 150 219 118 219 l 150 219 q 209 204 183 219 q 250 163 235 189 q 265 103 265 136 l 265 103 q 251 39 265 73 q 201 -48 236 5 l 201 -48 l 135 -148\"},\"-\":{\"ha\":371,\"x_min\":54,\"x_max\":317,\"o\":\"m 54 269 l 54 430 l 317 430 l 317 269 l 54 269\"},\".\":{\"ha\":300,\"x_min\":35,\"x_max\":265,\"o\":\"m 150 -10 l 150 -10 q 92 5 118 -10 q 50 47 65 20 q 35 105 35 73 l 35 105 q 50 163 35 137 q 92 205 65 189 q 150 220 118 220 l 150 220 q 209 205 183 220 q 250 163 235 189 q 265 105 265 137 l 265 105 q 250 47 265 73 q 209 5 235 20 q 150 -10 183 -10\"},\"\/\":{\"ha\":459,\"x_min\":14,\"x_max\":446,\"o\":\"m 14 -27 l 294 777 l 446 777 l 166 -27 l 14 -27\"},\":\":{\"ha\":328,\"x_min\":50,\"x_max\":278,\"o\":\"m 164 -10 l 164 -10 q 82 20 114 -10 q 50 97 50 50 l 50 97 q 82 175 50 145 q 164 205 114 205 l 164 205 q 246 175 214 205 q 278 97 278 145 l 278 97 q 246 20 278 50 q 164 -10 214 -10 m 164 330 l 164 330 q 82 361 114 330 q 50 438 50 391 l 50 438 q 82 516 50 485 q 164 546 114 546 l 164 546 q 246 516 214 546 q 278 438 278 485 l 278 438 q 246 361 278 391 q 164 330 214 330\"},\";\":{\"ha\":330,\"x_min\":52,\"x_max\":279,\"o\":\"m 150 -148 l 52 -148 l 121 -3 q 84 20 100 5 l 84 20 q 52 96 52 49 q 84 172 52 143 q 166 201 115 201 q 248 172 217 201 q 279 95 279 142 l 279 95 q 266 36 279 69 q 216 -50 252 3 l 216 -50 l 150 -148 m 165 330 l 165 330 q 84 361 115 330 q 52 438 52 391 q 84 516 52 485 q 165 546 115 546 l 165 546 q 248 516 216 546 q 279 438 279 485 q 248 361 279 391 q 165 330 216 330\"},\"<\":{\"ha\":620,\"x_min\":28,\"x_max\":588,\"o\":\"m 588 636 l 588 480 l 220 355 l 588 230 l 588 74 l 28 273 l 28 436 l 588 636\"},\"=\":{\"ha\":620,\"x_min\":30,\"x_max\":590,\"o\":\"m 30 406 l 30 554 l 590 554 l 590 406 l 30 406 m 30 154 l 30 302 l 590 302 l 590 154 l 30 154\"},\">\":{\"ha\":620,\"x_min\":32,\"x_max\":592,\"o\":\"m 400 355 l 32 480 l 32 636 l 592 436 l 592 273 l 32 74 l 32 230 l 400 355\"},\"?\":{\"ha\":705,\"x_min\":16,\"x_max\":681,\"o\":\"m 245 286 l 245 286 q 271 368 245 332 q 356 430 297 403 l 356 430 l 434 465 q 472 493 459 477 q 485 527 485 508 l 485 527 q 452 587 485 565 q 357 608 419 608 l 357 608 q 256 581 293 608 q 211 505 218 553 l 211 505 l 16 505 q 115 697 24 628 q 357 766 205 766 l 357 766 q 596 706 510 766 q 681 535 681 645 l 681 535 q 651 438 681 481 q 560 367 621 395 l 560 367 l 475 327 q 440 302 452 316 q 428 267 428 288 l 428 267 l 428 251 l 250 251 q 246 270 247 261 q 245 286 245 278 m 337 -10 l 337 -10 q 255 19 286 -10 q 223 95 223 48 l 223 95 q 255 172 223 143 q 337 201 286 201 l 337 201 q 419 172 388 201 q 450 95 450 143 l 450 95 q 419 19 450 48 q 337 -10 388 -10\"},\"@\":{\"ha\":1046,\"x_min\":32,\"x_max\":1017,\"o\":\"m 1017 385 l 1017 385 q 982 249 1017 307 q 883 159 947 191 q 730 127 818 127 l 730 127 l 634 127 l 613 216 q 585 172 601 192 l 585 172 q 451 114 536 114 l 451 114 q 348 141 392 114 q 278 216 303 168 q 253 328 253 264 l 253 328 q 278 441 253 393 q 348 516 303 489 q 451 542 392 542 q 551 515 510 542 l 551 515 q 610 448 588 490 l 610 448 l 624 530 l 812 530 l 782 328 l 805 214 q 834 228 820 219 l 834 228 q 885 290 867 250 q 903 384 903 330 l 903 384 q 859 526 903 466 q 734 619 814 586 q 544 651 653 651 l 544 651 q 337 610 425 651 q 200 495 248 569 q 152 318 152 420 l 152 318 q 200 155 152 224 q 335 47 247 85 q 540 9 422 9 l 540 9 q 658 18 597 9 q 772 42 718 27 q 863 77 826 57 l 863 77 l 863 -29 q 769 -61 824 -48 q 654 -82 714 -75 q 535 -90 593 -90 l 535 -90 q 270 -39 383 -90 q 95 103 157 11 q 32 316 32 194 l 32 316 q 68 494 32 414 q 172 631 104 574 q 333 719 239 688 q 544 750 427 750 l 544 750 q 794 705 687 750 q 959 578 900 660 q 1017 385 1017 496 m 435 328 l 435 328 q 456 272 435 293 q 509 250 477 250 l 509 250 q 573 273 543 250 q 613 328 603 295 l 613 328 q 573 384 603 362 q 509 406 543 406 l 509 406 q 471 396 488 406 q 445 369 454 386 q 435 328 435 352\"},\"A\":{\"ha\":957,\"x_min\":1,\"x_max\":956,\"o\":\"m 342 750 l 615 750 l 956 0 l 735 0 l 673 144 l 284 144 l 222 0 l 1 0 l 342 750 m 357 311 l 601 311 l 479 593 l 357 311\"},\"B\":{\"ha\":883,\"x_min\":47,\"x_max\":851,\"o\":\"m 691 395 l 691 395 q 739 380 717 389 l 739 380 q 823 312 795 355 q 851 211 851 268 l 851 211 q 823 103 851 150 q 740 28 795 55 q 601 0 684 0 l 601 0 l 47 0 l 105 385 l 47 750 l 581 750 q 743 702 685 750 q 801 567 801 653 l 801 567 q 779 477 801 520 q 709 405 757 434 l 709 405 q 691 395 700 399 m 292 314 l 267 145 l 545 145 q 615 167 590 145 q 640 228 640 189 q 613 291 640 267 q 533 314 586 314 l 533 314 l 292 314 m 292 456 l 505 456 q 566 478 541 456 q 590 536 590 499 l 590 536 q 569 586 590 566 q 509 605 548 605 l 509 605 l 268 605 l 292 456\"},\"C\":{\"ha\":934,\"x_min\":37,\"x_max\":903,\"o\":\"m 695 314 l 903 314 q 835 141 892 215 q 686 25 778 66 q 473 -16 593 -16 l 473 -16 q 244 33 342 -16 q 92 170 146 82 q 37 375 37 258 l 37 375 q 92 580 37 492 q 244 717 146 668 q 473 766 342 766 l 473 766 q 686 725 593 766 q 835 610 778 684 q 903 436 892 535 l 903 436 l 695 436 q 656 518 685 484 q 581 569 627 551 q 473 587 534 587 l 473 587 q 352 562 403 587 q 274 489 301 536 q 247 375 247 441 l 247 375 q 274 262 247 309 q 352 189 301 214 q 473 163 403 163 l 473 163 q 581 180 534 163 q 656 231 627 197 q 695 314 685 265 l 695 314\"},\"D\":{\"ha\":926,\"x_min\":70,\"x_max\":889,\"o\":\"m 70 750 l 444 750 q 678 704 577 750 q 834 573 778 657 q 889 375 889 488 q 834 178 889 262 q 678 47 778 93 q 444 0 577 0 l 444 0 l 70 0 l 70 750 m 276 566 l 276 184 l 460 184 q 577 208 527 184 q 653 274 626 231 q 680 375 680 317 l 680 375 q 653 477 680 434 q 577 543 626 519 q 460 566 527 566 l 460 566 l 276 566\"},\"E\":{\"ha\":794,\"x_min\":47,\"x_max\":744,\"o\":\"m 291 450 l 711 450 l 711 300 l 291 300 l 269 168 l 744 168 l 744 0 l 47 0 l 104 375 l 47 750 l 739 750 l 739 582 l 269 582 l 291 450\"},\"F\":{\"ha\":771,\"x_min\":70,\"x_max\":734,\"o\":\"m 70 750 l 734 750 l 734 575 l 277 575 l 277 443 l 715 443 l 715 268 l 277 268 l 277 0 l 70 0 l 70 750\"},\"G\":{\"ha\":964,\"x_min\":38,\"x_max\":910,\"o\":\"m 718 242 l 512 242 l 512 388 l 910 388 l 910 0 l 763 0 l 753 101 q 740 86 747 93 l 740 86 q 624 11 693 38 q 462 -16 554 -16 l 462 -16 q 297 10 374 -16 q 162 85 220 35 q 71 208 103 135 q 38 375 38 281 q 71 542 38 469 q 164 665 104 615 q 302 741 223 715 q 473 766 380 766 l 473 766 q 687 728 597 766 q 832 624 777 690 q 903 471 887 558 l 903 471 l 694 471 q 654 537 684 509 q 578 579 623 564 q 474 593 532 593 l 474 593 q 353 569 404 593 q 274 496 302 544 q 246 375 246 447 l 246 375 q 276 252 246 302 q 362 177 306 202 q 492 152 417 152 l 492 152 q 621 173 565 152 q 711 233 677 193 l 711 233 q 718 242 714 237 l 718 242\"},\"H\":{\"ha\":938,\"x_min\":70,\"x_max\":868,\"o\":\"m 70 0 l 70 750 l 277 750 l 277 473 l 660 473 l 660 750 l 868 750 l 868 0 l 660 0 l 660 289 l 277 289 l 277 0 l 70 0\"},\"I\":{\"ha\":347,\"x_min\":70,\"x_max\":277,\"o\":\"m 70 0 l 70 750 l 277 750 l 277 0 l 70 0\"},\"J\":{\"ha\":806,\"x_min\":18,\"x_max\":745,\"o\":\"m 19 328 l 18 369 l 221 369 l 221 344 q 258 210 221 256 q 379 163 294 163 l 379 163 q 500 207 462 163 q 538 328 538 250 l 538 328 l 538 750 l 745 750 l 745 317 q 699 138 745 213 q 571 24 653 63 q 379 -16 489 -16 l 379 -16 q 190 25 271 -16 q 64 144 108 66 q 19 328 19 221 l 19 328\"},\"K\":{\"ha\":870,\"x_min\":70,\"x_max\":875,\"o\":\"m 257 0 l 70 0 l 70 750 l 276 750 l 276 278 l 646 750 l 865 750 l 610 435 l 875 0 l 640 0 l 478 273 l 257 0\"},\"L\":{\"ha\":764,\"x_min\":70,\"x_max\":745,\"o\":\"m 70 750 l 277 750 l 277 184 l 745 184 l 745 0 l 70 0 l 70 750\"},\"M\":{\"ha\":1236,\"x_min\":70,\"x_max\":1166,\"o\":\"m 846 750 l 1166 750 l 1166 0 l 969 0 l 969 569 l 723 0 l 513 0 l 267 566 l 267 0 l 70 0 l 70 750 l 390 750 l 619 202 l 846 750\"},\"N\":{\"ha\":972,\"x_min\":70,\"x_max\":902,\"o\":\"m 338 750 l 701 236 l 701 750 l 902 750 l 902 0 l 641 0 l 271 527 l 271 0 l 70 0 l 70 750 l 338 750\"},\"O\":{\"ha\":965,\"x_min\":37,\"x_max\":928,\"o\":\"m 482 -16 l 482 -16 q 249 33 349 -16 q 93 170 148 82 q 37 375 37 258 l 37 375 q 93 580 37 492 q 249 717 148 668 q 482 766 349 766 l 482 766 q 716 717 616 766 q 872 580 816 668 q 928 375 928 492 l 928 375 q 872 170 928 258 q 716 33 816 82 q 482 -16 616 -16 m 482 169 l 482 169 q 608 194 555 169 q 690 265 661 219 q 718 375 718 311 l 718 375 q 690 485 718 439 q 608 556 661 531 q 482 581 555 581 l 482 581 q 357 556 410 581 q 275 485 304 531 q 246 375 246 439 l 246 375 q 275 265 246 311 q 357 194 304 219 q 482 169 410 169\"},\"P\":{\"ha\":814,\"x_min\":70,\"x_max\":794,\"o\":\"m 70 750 l 491 750 q 654 718 585 750 q 758 628 722 686 q 794 491 794 569 l 794 491 q 758 356 794 414 q 654 265 722 297 q 491 233 585 233 l 491 233 l 277 233 l 277 0 l 70 0 l 70 750 m 277 584 l 277 399 l 478 399 q 556 424 528 399 q 584 491 584 448 l 584 491 q 556 560 584 535 q 478 584 528 584 l 478 584 l 277 584\"},\"Q\":{\"ha\":965,\"x_min\":37,\"x_max\":928,\"o\":\"m 482 -16 l 482 -16 q 249 33 349 -16 q 93 170 148 82 q 37 375 37 258 q 93 580 37 492 q 249 717 148 668 q 482 766 349 766 l 482 766 q 716 717 616 766 q 872 580 816 668 q 928 375 928 492 q 872 170 928 258 l 872 170 q 799 86 842 122 l 799 86 l 927 -56 l 674 -56 l 624 0 q 482 -16 559 -16 m 474 169 l 353 305 l 601 305 l 665 234 q 690 265 679 248 l 690 265 q 718 375 718 311 q 690 485 718 439 q 608 556 661 531 q 482 581 555 581 l 482 581 q 357 556 410 581 q 275 485 304 531 q 246 375 246 439 q 275 265 246 311 q 357 194 304 219 l 357 194 q 474 169 407 170 l 474 169\"},\"R\":{\"ha\":850,\"x_min\":70,\"x_max\":827,\"o\":\"m 385 270 l 277 270 l 277 0 l 70 0 l 70 750 l 515 750 q 665 720 601 750 q 765 636 729 689 q 801 509 801 582 l 801 509 q 765 384 801 438 q 665 300 729 330 l 665 300 q 612 281 640 288 l 612 281 l 827 0 l 587 0 l 385 270 m 277 596 l 277 422 l 486 422 q 564 445 536 422 q 592 509 592 468 l 592 509 q 564 574 592 551 q 486 596 536 596 l 486 596 l 277 596\"},\"S\":{\"ha\":843,\"x_min\":36,\"x_max\":809,\"o\":\"m 36 246 l 36 246 l 247 246 q 276 192 252 215 q 341 157 300 169 q 436 144 381 144 l 436 144 q 556 164 512 144 q 600 221 600 183 l 600 221 q 575 266 600 250 q 479 289 550 282 l 479 289 l 339 302 q 114 373 184 316 q 44 525 44 429 l 44 525 q 90 657 44 603 q 218 739 135 711 q 410 766 300 766 l 410 766 q 602 736 518 766 q 736 649 686 705 q 789 519 785 593 l 789 519 l 579 519 q 554 566 575 546 q 495 596 532 585 q 406 606 458 606 l 406 606 q 295 588 336 606 q 254 533 254 569 l 254 533 q 279 491 254 507 q 367 469 303 475 l 367 469 l 516 454 q 687 420 623 444 q 780 352 751 395 q 809 245 809 309 l 809 245 q 762 108 809 166 q 630 17 715 49 q 432 -16 545 -16 l 432 -16 q 228 17 316 -16 q 89 109 139 49 q 36 246 39 168\"},\"T\":{\"ha\":818,\"x_min\":19,\"x_max\":799,\"o\":\"m 19 566 l 19 750 l 799 750 l 799 566 l 513 566 l 513 0 l 305 0 l 305 566 l 19 566\"},\"U\":{\"ha\":878,\"x_min\":60,\"x_max\":818,\"o\":\"m 267 750 l 267 335 q 287 247 267 284 q 345 189 306 209 q 439 169 383 169 l 439 169 q 534 189 496 169 q 591 247 572 209 q 610 335 610 284 l 610 335 l 610 750 l 818 750 l 818 325 q 771 146 818 222 q 638 27 723 69 q 439 -16 553 -16 l 439 -16 q 241 27 326 -16 q 108 146 155 69 q 60 325 60 222 l 60 325 l 60 750 l 267 750\"},\"V\":{\"ha\":935,\"x_min\":1,\"x_max\":934,\"o\":\"m 223 750 l 470 193 l 715 750 l 934 750 l 585 0 l 350 0 l 1 750 l 223 750\"},\"W\":{\"ha\":1360,\"x_min\":10,\"x_max\":1350,\"o\":\"m 790 750 l 974 194 l 1131 750 l 1350 750 l 1122 0 l 855 0 l 680 515 l 505 0 l 239 0 l 10 750 l 230 750 l 387 193 l 571 750 l 790 750\"},\"X\":{\"ha\":870,\"x_min\":-11,\"x_max\":881,\"o\":\"m 860 750 l 564 390 l 881 0 l 626 0 l 434 248 l 241 0 l -11 0 l 308 390 l 11 750 l 270 750 l 439 532 l 605 750 l 860 750\"},\"Y\":{\"ha\":923,\"x_min\":6,\"x_max\":916,\"o\":\"m 566 0 l 358 0 l 358 302 l 6 750 l 236 750 l 461 463 l 686 750 l 916 750 l 566 305 l 566 0\"},\"Z\":{\"ha\":808,\"x_min\":42,\"x_max\":766,\"o\":\"m 766 0 l 42 0 l 42 150 l 488 588 l 45 588 l 45 751 l 763 751 l 763 601 l 318 163 l 766 163 l 766 0\"},\"[\":{\"ha\":433,\"x_min\":66,\"x_max\":399,\"o\":\"m 66 750 l 399 750 l 399 599 l 256 599 l 256 41 l 399 41 l 399 -110 l 66 -110 l 66 750\"},\"\\\\\":{\"ha\":459,\"x_min\":14,\"x_max\":446,\"o\":\"m 14 777 l 166 777 l 446 -27 l 294 -27 l 14 777\"},\"]\":{\"ha\":433,\"x_min\":34,\"x_max\":367,\"o\":\"m 34 599 l 34 750 l 367 750 l 367 -110 l 34 -110 l 34 41 l 177 41 l 177 599 l 34 599\"},\"^\":{\"ha\":620,\"x_min\":26,\"x_max\":594,\"o\":\"m 594 375 l 428 375 l 310 591 l 192 375 l 26 375 l 237 750 l 383 750 l 594 375\"},\"_\":{\"ha\":482,\"x_min\":-34,\"x_max\":516,\"o\":\"m -34 -167 l -34 -30 l 516 -30 l 516 -167 l -34 -167\"},\"`\":{\"ha\":374,\"x_min\":25,\"x_max\":349,\"o\":\"m 25 816 l 224 816 l 349 627 l 160 627 l 25 816\"},\"a\":{\"ha\":826,\"x_min\":32,\"x_max\":784,\"o\":\"m 784 0 l 572 0 l 557 116 q 460 22 518 56 l 460 22 q 315 -16 396 -16 l 315 -16 q 168 22 231 -16 q 68 128 104 59 q 32 285 32 196 l 32 285 q 68 444 32 376 q 168 550 104 512 q 315 588 231 588 l 315 588 q 460 551 396 588 l 460 551 q 558 457 518 516 l 558 457 l 572 571 l 784 571 l 748 286 l 784 0 m 239 285 l 239 285 q 257 210 239 243 q 305 159 274 177 q 376 140 336 140 l 376 140 q 455 159 418 140 q 520 210 492 177 q 562 285 548 243 l 562 285 q 520 361 548 328 q 455 413 492 394 q 376 432 418 432 l 376 432 q 305 413 336 432 q 257 361 274 394 q 239 285 239 328\"},\"b\":{\"ha\":814,\"x_min\":56,\"x_max\":782,\"o\":\"m 56 0 l 56 770 l 261 770 l 261 462 q 356 551 299 518 l 356 551 q 500 588 420 588 l 500 588 q 648 550 584 588 q 747 444 711 512 q 782 285 782 376 l 782 285 q 747 128 782 196 q 648 22 711 59 q 500 -16 584 -16 l 500 -16 q 355 22 419 -16 l 355 22 q 261 110 299 54 l 261 110 l 261 0 l 56 0 m 576 285 l 576 285 q 559 361 576 328 q 510 413 541 394 q 438 432 479 432 q 360 413 397 432 q 295 361 323 394 q 252 285 267 328 l 252 285 q 295 210 267 243 q 360 159 323 177 q 438 140 397 140 q 510 159 479 140 q 559 210 541 177 q 576 285 576 243\"},\"c\":{\"ha\":762,\"x_min\":30,\"x_max\":737,\"o\":\"m 534 241 l 737 241 q 681 106 729 164 q 557 16 633 48 q 385 -16 480 -16 l 385 -16 q 200 22 280 -16 q 75 128 120 60 q 30 285 30 196 l 30 285 q 75 443 30 375 q 200 550 120 511 q 385 588 280 588 l 385 588 q 557 556 480 588 q 681 466 633 523 q 737 330 729 408 l 737 330 l 534 330 q 483 409 523 381 q 385 436 443 436 l 385 436 q 307 419 340 436 q 255 368 273 401 q 236 285 236 334 l 236 285 q 255 204 236 237 q 307 153 273 170 q 385 135 340 135 l 385 135 q 484 164 443 135 q 534 241 524 193 l 534 241\"},\"d\":{\"ha\":828,\"x_min\":32,\"x_max\":810,\"o\":\"m 787 0 l 576 0 l 561 121 q 460 22 520 57 l 460 22 q 315 -16 396 -16 l 315 -16 q 168 22 231 -16 q 68 128 104 59 q 32 285 32 196 l 32 285 q 68 444 32 376 q 168 550 104 512 q 315 588 231 588 l 315 588 q 460 551 396 588 l 460 551 q 560 454 519 515 l 560 454 l 598 770 l 810 770 l 751 301 l 787 0 m 239 285 l 239 285 q 257 210 239 243 q 305 159 274 177 q 376 140 336 140 l 376 140 q 455 159 418 140 q 520 210 492 177 q 562 285 548 243 l 562 285 q 520 361 548 328 q 455 413 492 394 q 376 432 418 432 l 376 432 q 305 413 336 432 q 257 361 274 394 q 239 285 239 328\"},\"e\":{\"ha\":734,\"x_min\":30,\"x_max\":703,\"o\":\"m 391 -16 l 391 -16 q 206 22 287 -16 q 77 129 124 60 q 30 288 30 197 l 30 288 q 75 445 30 377 q 199 550 120 512 q 376 588 277 588 l 376 588 q 552 544 479 588 q 664 418 624 499 q 703 227 703 337 l 703 227 l 252 227 q 261 212 256 219 l 261 212 q 333 154 285 174 q 449 134 380 134 l 449 134 q 575 151 512 134 q 688 197 637 167 l 688 197 l 688 67 q 554 6 629 27 q 391 -16 478 -16 m 243 350 l 243 350 l 513 350 q 499 382 507 367 l 499 382 q 452 428 481 412 q 381 444 422 444 l 381 444 q 304 426 336 444 q 254 377 272 408 l 254 377 q 243 350 247 364\"},\"f\":{\"ha\":589,\"x_min\":22,\"x_max\":589,\"o\":\"m 462 634 l 462 634 q 369 611 395 634 q 342 535 342 587 l 342 535 l 342 524 l 575 524 l 575 373 l 342 373 l 342 0 l 138 0 l 138 373 l 22 373 l 22 524 l 138 524 l 138 525 q 172 667 138 608 q 273 756 206 725 q 437 786 339 786 l 437 786 q 516 780 481 786 q 589 763 550 774 l 589 763 l 589 613 q 528 629 559 624 q 462 634 496 634\"},\"g\":{\"ha\":813,\"x_min\":30,\"x_max\":759,\"o\":\"m 555 144 l 555 144 l 555 164 q 545 154 550 159 l 545 154 q 445 87 504 113 q 310 60 385 60 l 310 60 q 166 93 229 60 q 67 186 103 126 q 30 324 30 245 l 30 324 q 67 463 30 404 q 166 555 103 522 q 310 588 229 588 l 310 588 q 420 570 370 588 q 509 521 470 551 l 509 521 q 555 478 535 500 l 555 478 l 555 571 l 759 571 l 759 152 q 710 -28 759 47 q 574 -142 661 -103 q 367 -181 486 -181 l 367 -181 q 221 -160 288 -181 q 86 -100 153 -140 l 86 -100 l 86 54 q 217 -12 148 8 q 354 -33 285 -33 l 354 -33 q 504 9 452 -33 q 555 144 555 51 m 379 199 l 379 199 q 484 230 438 199 q 562 324 530 261 l 562 324 q 483 419 529 388 q 379 449 437 449 l 379 449 q 303 434 335 449 q 253 391 270 419 q 236 324 236 362 l 236 324 q 253 259 236 287 q 302 215 270 230 q 379 199 334 199\"},\"h\":{\"ha\":779,\"x_min\":56,\"x_max\":730,\"o\":\"m 56 0 l 56 770 l 261 770 l 261 481 q 345 556 296 529 l 345 556 q 470 588 402 588 l 470 588 q 611 555 553 588 q 699 462 668 522 q 730 320 730 402 l 730 320 l 730 0 l 525 0 l 525 290 q 493 388 525 354 q 399 422 460 422 l 399 422 q 326 404 357 422 q 278 353 294 386 q 261 275 261 320 l 261 275 l 261 0 l 56 0\"},\"i\":{\"ha\":317,\"x_min\":39,\"x_max\":278,\"o\":\"m 56 0 l 56 580 l 159 560 l 261 580 l 261 0 l 56 0 m 158 627 l 158 627 q 72 654 105 627 q 39 726 39 680 l 39 726 q 72 798 39 771 q 158 825 105 825 l 158 825 q 246 798 213 825 q 278 726 278 771 l 278 726 q 246 654 278 680 q 158 627 213 627\"},\"j\":{\"ha\":317,\"x_min\":39,\"x_max\":278,\"o\":\"m 56 -165 l 56 580 l 159 560 l 261 580 l 261 -165 l 56 -165 m 158 627 l 158 627 q 72 654 105 627 q 39 726 39 680 l 39 726 q 72 798 39 771 q 158 825 105 825 l 158 825 q 246 798 213 825 q 278 726 278 771 l 278 726 q 246 654 278 680 q 158 627 213 627\"},\"k\":{\"ha\":743,\"x_min\":56,\"x_max\":751,\"o\":\"m 261 770 l 261 251 l 521 571 l 736 571 l 538 344 l 751 0 l 521 0 l 408 194 l 239 0 l 56 0 l 56 770 l 261 770\"},\"l\":{\"ha\":317,\"x_min\":56,\"x_max\":261,\"o\":\"m 56 0 l 56 770 l 261 770 l 261 0 l 56 0\"},\"m\":{\"ha\":1208,\"x_min\":29,\"x_max\":1159,\"o\":\"m 67 374 l 29 571 l 234 571 l 253 454 q 257 462 255 458 l 257 462 q 349 556 294 524 q 468 588 403 588 l 468 588 q 602 555 547 588 q 686 462 657 522 l 686 462 q 693 447 690 455 l 693 447 q 701 462 696 454 l 701 462 q 792 556 737 524 q 911 588 847 588 l 911 588 q 1046 555 990 588 q 1130 462 1101 522 q 1159 320 1159 402 l 1159 320 l 1159 0 l 955 0 l 955 290 q 926 388 955 354 q 842 422 897 422 l 842 422 q 775 404 803 422 q 731 353 746 386 q 715 275 715 320 l 715 275 l 715 0 l 511 0 l 511 290 q 482 388 511 354 q 398 422 453 422 l 398 422 q 331 404 359 422 q 287 353 302 386 q 271 275 271 320 l 271 275 l 271 0 l 67 0 l 67 374\"},\"n\":{\"ha\":789,\"x_min\":29,\"x_max\":740,\"o\":\"m 67 374 l 29 571 l 234 571 l 253 452 q 259 462 256 457 l 259 462 q 355 556 298 524 q 481 588 412 588 l 481 588 q 621 555 563 588 q 710 462 679 522 q 740 320 740 402 l 740 320 l 740 0 l 536 0 l 536 290 q 504 388 536 354 q 410 422 471 422 l 410 422 q 337 404 368 422 q 288 353 305 386 q 271 275 271 320 l 271 275 l 271 0 l 67 0 l 67 374\"},\"o\":{\"ha\":792,\"x_min\":30,\"x_max\":762,\"o\":\"m 396 -16 l 396 -16 q 204 22 286 -16 q 76 128 122 59 q 30 285 30 196 l 30 285 q 76 444 30 376 q 204 550 122 512 q 396 588 286 588 l 396 588 q 588 550 505 588 q 716 444 670 512 q 762 285 762 376 l 762 285 q 716 128 762 196 q 588 22 670 59 q 396 -16 505 -16 m 396 135 l 396 135 q 482 153 446 135 q 536 205 517 171 q 555 285 555 239 l 555 285 q 536 367 555 333 q 482 418 517 400 q 396 436 446 436 l 396 436 q 310 418 346 436 q 255 367 274 400 q 236 286 236 333 l 236 286 q 255 205 236 239 q 310 153 274 171 q 396 135 346 135\"},\"p\":{\"ha\":815,\"x_min\":56,\"x_max\":783,\"o\":\"m 56 -165 l 56 571 l 261 571 l 261 462 q 356 551 300 518 l 356 551 q 501 588 420 588 l 501 588 q 649 550 585 588 q 748 444 712 512 q 783 285 783 376 l 783 285 q 748 128 783 196 q 649 22 712 59 q 501 -16 585 -16 l 501 -16 q 356 22 420 -16 l 356 22 q 261 111 300 55 l 261 111 l 261 -165 l 56 -165 m 577 285 l 577 285 q 560 361 577 328 q 511 413 542 394 q 439 432 479 432 l 439 432 q 361 413 398 432 q 296 361 324 394 q 253 285 268 328 l 253 285 q 296 210 268 243 q 361 159 324 177 q 439 140 398 140 l 439 140 q 511 159 479 140 q 560 210 542 177 q 577 285 577 243\"},\"q\":{\"ha\":815,\"x_min\":32,\"x_max\":758,\"o\":\"m 554 571 l 758 571 l 758 -165 l 554 -165 l 554 111 q 459 22 515 55 l 459 22 q 314 -16 395 -16 l 314 -16 q 167 22 231 -16 q 68 128 103 59 q 32 285 32 196 l 32 285 q 68 444 32 376 q 167 550 103 512 q 314 588 231 588 l 314 588 q 459 551 395 588 l 459 551 q 554 462 515 518 l 554 462 l 554 571 m 238 285 l 238 285 q 256 210 238 243 q 304 159 273 177 q 376 140 335 140 q 454 159 417 140 q 520 210 491 177 q 562 285 548 243 l 562 285 q 520 361 548 328 q 454 413 491 394 q 376 432 417 432 q 304 413 335 432 q 256 361 273 394 q 238 285 238 328\"},\"r\":{\"ha\":553,\"x_min\":29,\"x_max\":539,\"o\":\"m 67 379 l 29 571 l 237 571 l 262 419 q 300 497 277 462 l 300 497 q 368 564 327 539 q 468 588 409 588 l 468 588 q 503 586 485 588 q 539 580 521 584 l 539 580 l 539 406 q 483 415 509 412 q 434 417 456 417 l 434 417 q 353 400 390 417 q 294 342 316 382 q 271 235 271 302 l 271 235 l 271 0 l 67 0 l 67 379\"},\"s\":{\"ha\":748,\"x_min\":25,\"x_max\":718,\"o\":\"m 718 186 l 718 186 q 678 75 718 120 q 564 7 638 30 q 386 -16 490 -16 l 386 -16 q 199 10 279 -16 q 73 83 118 36 q 25 192 28 130 l 25 192 l 232 192 q 260 153 239 169 q 314 128 280 136 q 395 119 348 119 l 395 119 q 488 131 456 119 q 519 167 519 143 l 519 167 q 495 196 519 186 q 413 210 471 205 l 413 210 l 312 218 q 152 249 211 225 q 66 310 92 272 q 40 395 40 347 l 40 395 q 81 503 40 460 q 194 567 121 545 q 363 588 266 588 l 363 588 q 534 563 459 588 q 654 494 609 538 q 706 389 699 449 l 706 389 l 499 389 q 477 424 494 408 q 430 449 460 439 q 353 459 400 459 l 353 459 q 270 447 298 459 q 241 413 241 435 l 241 413 q 259 386 241 396 q 324 372 276 376 l 324 372 l 457 362 q 613 334 556 356 q 694 274 670 311 q 718 186 718 237\"},\"t\":{\"ha\":603,\"x_min\":6,\"x_max\":576,\"o\":\"m 122 420 l 6 420 l 6 509 l 122 556 l 210 725 l 326 725 l 326 571 l 566 571 l 566 420 l 326 420 l 326 252 q 351 165 326 190 q 442 140 376 140 l 442 140 q 517 148 484 140 q 576 167 549 155 l 576 167 l 576 13 q 497 -7 546 2 q 396 -16 448 -16 l 396 -16 q 241 13 301 -16 q 151 97 180 42 q 122 224 122 151 l 122 224 l 122 420\"},\"u\":{\"ha\":777,\"x_min\":49,\"x_max\":747,\"o\":\"m 302 -16 l 302 -16 q 166 17 222 -16 q 79 111 109 50 q 49 252 49 171 l 49 252 l 49 571 l 253 571 l 253 281 q 284 184 253 218 q 373 150 315 150 l 373 150 q 445 168 416 150 q 490 218 474 185 q 506 297 506 251 l 506 297 l 506 571 l 710 571 l 710 197 l 747 0 l 543 0 l 524 118 q 520 111 522 114 l 520 111 q 425 16 481 48 q 302 -16 369 -16\"},\"v\":{\"ha\":769,\"x_min\":1,\"x_max\":768,\"o\":\"m 227 571 l 387 182 l 550 571 l 768 571 l 501 0 l 268 0 l 1 571 l 227 571\"},\"w\":{\"ha\":1140,\"x_min\":2,\"x_max\":1138,\"o\":\"m 669 571 l 804 204 l 934 571 l 1138 571 l 924 0 l 716 0 l 571 384 l 424 0 l 216 0 l 2 571 l 208 571 l 338 203 l 474 571 l 669 571\"},\"x\":{\"ha\":719,\"x_min\":-12,\"x_max\":732,\"o\":\"m 216 0 l -12 0 l 228 290 l 3 571 l 230 571 l 361 411 l 492 571 l 716 571 l 487 293 l 732 0 l 500 0 l 357 172 l 216 0\"},\"y\":{\"ha\":777,\"x_min\":8,\"x_max\":776,\"o\":\"m 244 -181 l 244 -181 q 132 -165 181 -181 q 37 -118 83 -150 l 37 -118 l 37 24 q 125 -19 84 -6 q 215 -32 166 -32 l 215 -32 q 288 -14 256 -32 q 340 52 320 4 l 340 52 l 340 53 l 251 53 l 8 571 l 233 571 l 395 182 l 559 571 l 776 571 l 502 -11 q 432 -111 473 -74 q 342 -165 390 -149 q 244 -181 294 -181\"},\"z\":{\"ha\":694,\"x_min\":38,\"x_max\":655,\"o\":\"m 655 0 l 38 0 l 38 142 l 398 425 l 41 425 l 41 571 l 653 571 l 653 429 l 294 147 l 655 147 l 655 0\"},\"{\":{\"ha\":472,\"x_min\":31,\"x_max\":437,\"o\":\"m 437 750 l 437 606 l 328 606 q 296 592 305 606 q 293 553 286 577 l 293 553 l 318 466 q 314 367 338 404 q 233 320 289 329 l 233 320 q 314 274 289 312 q 318 174 338 236 l 318 174 l 293 87 q 296 49 286 63 q 328 34 305 34 l 328 34 l 437 34 l 437 -110 l 235 -110 q 146 -85 181 -110 q 99 -19 110 -60 q 105 71 88 22 l 105 71 l 146 191 q 142 236 155 219 q 100 252 129 252 l 100 252 l 31 252 l 31 388 l 100 388 q 142 405 129 388 q 146 449 155 421 l 146 449 l 105 569 q 99 659 88 618 q 146 725 110 700 q 235 750 181 750 l 235 750 l 437 750\"},\"|\":{\"ha\":313,\"x_min\":70,\"x_max\":243,\"o\":\"m 70 -98 l 70 750 l 243 750 l 243 -98 l 70 -98\"},\"}\":{\"ha\":472,\"x_min\":35,\"x_max\":441,\"o\":\"m 144 606 l 35 606 l 35 750 l 237 750 q 327 725 291 750 q 374 659 362 700 q 367 569 385 618 l 367 569 l 326 449 q 330 405 317 421 q 372 388 343 388 l 372 388 l 441 388 l 441 252 l 372 252 q 330 236 343 252 q 326 191 317 219 l 326 191 l 367 71 q 374 -19 385 22 q 327 -85 362 -60 q 237 -110 291 -110 l 237 -110 l 35 -110 l 35 34 l 144 34 q 177 49 167 34 q 179 87 186 63 l 179 87 l 154 174 q 159 274 134 236 q 239 320 183 312 l 239 320 q 159 367 183 329 q 154 466 134 404 l 154 466 l 179 553 q 177 592 186 577 q 144 606 167 606 l 144 606\"},\"~\":{\"ha\":620,\"x_min\":30,\"x_max\":590,\"o\":\"m 30 263 l 30 405 q 196 442 107 442 l 196 442 q 276 434 241 442 q 345 417 310 425 q 424 408 380 408 l 424 408 q 590 445 513 408 l 590 445 l 590 303 q 424 266 513 266 l 424 266 q 345 275 380 266 q 276 292 310 283 q 196 300 241 300 l 196 300 q 30 263 107 300 l 30 263\"},\"\u00e0\":{\"ha\":826,\"x_min\":32,\"x_max\":784,\"o\":\"m 784 0 l 572 0 l 557 116 q 460 22 518 56 l 460 22 q 315 -16 396 -16 l 315 -16 q 168 22 231 -16 q 68 128 104 59 q 32 285 32 196 l 32 285 q 68 444 32 376 q 168 550 104 512 q 315 588 231 588 l 315 588 q 460 551 396 588 l 460 551 q 558 457 518 516 l 558 457 l 572 571 l 784 571 l 748 286 l 784 0 m 239 285 l 239 285 q 257 210 239 243 q 305 159 274 177 q 376 140 336 140 l 376 140 q 455 159 418 140 q 520 210 492 177 q 562 285 548 243 l 562 285 q 520 361 548 328 q 455 413 492 394 q 376 432 418 432 l 376 432 q 305 413 336 432 q 257 361 274 394 q 239 285 239 328 m 188 816 l 387 816 l 512 627 l 323 627 l 188 816\"},\"\u00e2\":{\"ha\":826,\"x_min\":32,\"x_max\":784,\"o\":\"m 784 0 l 572 0 l 557 116 q 460 22 518 56 l 460 22 q 315 -16 396 -16 l 315 -16 q 168 22 231 -16 q 68 128 104 59 q 32 285 32 196 l 32 285 q 68 444 32 376 q 168 550 104 512 q 315 588 231 588 l 315 588 q 460 551 396 588 l 460 551 q 558 457 518 516 l 558 457 l 572 571 l 784 571 l 748 286 l 784 0 m 239 285 l 239 285 q 257 210 239 243 q 305 159 274 177 q 376 140 336 140 l 376 140 q 455 159 418 140 q 520 210 492 177 q 562 285 548 243 l 562 285 q 520 361 548 328 q 455 413 492 394 q 376 432 418 432 l 376 432 q 305 413 336 432 q 257 361 274 394 q 239 285 239 328 m 164 627 l 307 816 l 516 816 l 659 627 l 498 627 l 412 717 l 326 627 l 164 627\"},\"\u00e4\":{\"ha\":826,\"x_min\":32,\"x_max\":784,\"o\":\"m 784 0 l 572 0 l 557 116 q 460 22 518 56 l 460 22 q 315 -16 396 -16 l 315 -16 q 168 22 231 -16 q 68 128 104 59 q 32 285 32 196 l 32 285 q 68 444 32 376 q 168 550 104 512 q 315 588 231 588 l 315 588 q 460 551 396 588 l 460 551 q 558 457 518 516 l 558 457 l 572 571 l 784 571 l 748 286 l 784 0 m 239 285 l 239 285 q 257 210 239 243 q 305 159 274 177 q 376 140 336 140 l 376 140 q 455 159 418 140 q 520 210 492 177 q 562 285 548 243 l 562 285 q 520 361 548 328 q 455 413 492 394 q 376 432 418 432 l 376 432 q 305 413 336 432 q 257 361 274 394 q 239 285 239 328 m 259 627 l 259 627 q 179 652 209 627 q 148 722 148 677 l 148 722 q 179 790 148 765 q 259 815 209 815 l 259 815 q 340 790 310 815 q 370 722 370 765 l 370 722 q 340 652 370 677 q 259 627 310 627 m 565 627 l 565 627 q 484 652 514 627 q 454 722 454 677 l 454 722 q 484 790 454 765 q 565 815 514 815 l 565 815 q 645 790 615 815 q 675 722 675 765 l 675 722 q 645 652 675 677 q 565 627 615 627\"},\"\u00e7\":{\"ha\":762,\"x_min\":30,\"x_max\":737,\"o\":\"m 534 241 l 737 241 q 681 106 729 164 q 557 16 633 48 l 557 16 q 426 -14 497 -9 l 426 -14 l 406 -45 q 451 -41 427 -41 l 451 -41 q 554 -67 519 -41 q 589 -138 589 -93 l 589 -138 q 543 -217 589 -186 q 407 -249 497 -249 l 407 -249 q 276 -219 328 -249 q 207 -140 223 -190 l 207 -140 l 329 -140 q 354 -160 336 -152 q 407 -169 372 -169 l 407 -169 q 456 -159 439 -169 q 472 -134 472 -150 l 472 -134 q 459 -110 472 -120 q 416 -101 446 -101 l 416 -101 q 388 -104 401 -101 q 364 -112 374 -107 l 364 -112 l 263 -112 l 327 -13 q 200 22 257 -5 l 200 22 q 75 128 120 60 q 30 285 30 196 l 30 285 q 75 443 30 375 q 200 550 120 511 q 385 588 280 588 l 385 588 q 557 556 480 588 q 681 466 633 523 q 737 330 729 408 l 737 330 l 534 330 q 483 409 523 381 q 385 436 443 436 l 385 436 q 307 419 340 436 q 255 368 273 401 q 236 285 236 334 l 236 285 q 255 204 236 237 q 307 153 273 170 q 385 135 340 135 l 385 135 q 484 164 443 135 q 534 241 524 193 l 534 241\"},\"\u00e9\":{\"ha\":734,\"x_min\":30,\"x_max\":703,\"o\":\"m 391 -16 l 391 -16 q 206 22 287 -16 q 77 129 124 60 q 30 288 30 197 l 30 288 q 75 445 30 377 q 199 550 120 512 q 376 588 277 588 l 376 588 q 552 544 479 588 q 664 418 624 499 q 703 227 703 337 l 703 227 l 252 227 q 261 212 256 219 l 261 212 q 333 154 285 174 q 449 134 380 134 l 449 134 q 575 151 512 134 q 688 197 637 167 l 688 197 l 688 67 q 554 6 629 27 q 391 -16 478 -16 m 243 350 l 243 350 l 513 350 q 499 382 507 367 l 499 382 q 452 428 481 412 q 381 444 422 444 l 381 444 q 304 426 336 444 q 254 377 272 408 l 254 377 q 243 350 247 364 m 262 627 l 388 816 l 586 816 l 451 627 l 262 627\"},\"\u00e8\":{\"ha\":734,\"x_min\":30,\"x_max\":703,\"o\":\"m 391 -16 l 391 -16 q 206 22 287 -16 q 77 129 124 60 q 30 288 30 197 l 30 288 q 75 445 30 377 q 199 550 120 512 q 376 588 277 588 l 376 588 q 552 544 479 588 q 664 418 624 499 q 703 227 703 337 l 703 227 l 252 227 q 261 212 256 219 l 261 212 q 333 154 285 174 q 449 134 380 134 l 449 134 q 575 151 512 134 q 688 197 637 167 l 688 197 l 688 67 q 554 6 629 27 q 391 -16 478 -16 m 152 816 l 350 816 l 476 627 l 287 627 l 152 816 m 243 350 l 243 350 l 513 350 q 499 382 507 367 l 499 382 q 452 428 481 412 q 381 444 422 444 l 381 444 q 304 426 336 444 q 254 377 272 408 l 254 377 q 243 350 247 364\"},\"\u00ea\":{\"ha\":734,\"x_min\":30,\"x_max\":703,\"o\":\"m 391 -16 l 391 -16 q 206 22 287 -16 q 77 129 124 60 q 30 288 30 197 l 30 288 q 75 445 30 377 q 199 550 120 512 q 376 588 277 588 l 376 588 q 552 544 479 588 q 664 418 624 499 q 703 227 703 337 l 703 227 l 252 227 q 261 212 256 219 l 261 212 q 333 154 285 174 q 449 134 380 134 l 449 134 q 575 151 512 134 q 688 197 637 167 l 688 197 l 688 67 q 554 6 629 27 q 391 -16 478 -16 m 243 350 l 243 350 l 513 350 q 499 382 507 367 l 499 382 q 452 428 481 412 q 381 444 422 444 l 381 444 q 304 426 336 444 q 254 377 272 408 l 254 377 q 243 350 247 364 m 128 627 l 271 816 l 480 816 l 623 627 l 462 627 l 376 717 l 290 627 l 128 627\"},\"\u00eb\":{\"ha\":734,\"x_min\":30,\"x_max\":703,\"o\":\"m 391 -16 l 391 -16 q 206 22 287 -16 q 77 129 124 60 q 30 288 30 197 l 30 288 q 75 445 30 377 q 199 550 120 512 q 376 588 277 588 l 376 588 q 552 544 479 588 q 664 418 624 499 q 703 227 703 337 l 703 227 l 252 227 q 261 212 256 219 l 261 212 q 333 154 285 174 q 449 134 380 134 l 449 134 q 575 151 512 134 q 688 197 637 167 l 688 197 l 688 67 q 554 6 629 27 q 391 -16 478 -16 m 243 350 l 243 350 l 513 350 q 499 382 507 367 l 499 382 q 452 428 481 412 q 381 444 422 444 l 381 444 q 304 426 336 444 q 254 377 272 408 l 254 377 q 243 350 247 364 m 222 627 l 222 627 q 142 652 172 627 q 111 722 111 677 l 111 722 q 142 790 111 765 q 222 815 172 815 l 222 815 q 303 790 273 815 q 333 722 333 765 l 333 722 q 303 652 333 677 q 222 627 273 627 m 528 627 l 528 627 q 447 652 477 627 q 417 722 417 677 l 417 722 q 447 790 417 765 q 528 815 477 815 l 528 815 q 608 790 578 815 q 638 722 638 765 l 638 722 q 608 652 638 677 q 528 627 578 627\"},\"\u00ee\":{\"ha\":317,\"x_min\":-39,\"x_max\":356,\"o\":\"m 56 0 l 56 580 l 159 560 l 261 580 l 261 0 l 56 0 m -39 627 l 53 816 l 263 816 l 356 627 l 220 627 l 158 719 l 97 627 l -39 627\"},\"\u00ef\":{\"ha\":317,\"x_min\":-30,\"x_max\":351,\"o\":\"m 59 627 l 59 627 q -6 653 17 627 q -30 726 -30 679 l -30 726 q -6 799 -30 773 q 59 825 17 825 l 59 825 q 124 799 100 825 q 147 726 147 773 l 147 726 q 124 653 147 679 q 59 627 100 627 m 263 627 l 263 627 q 198 653 222 627 q 174 726 174 679 l 174 726 q 198 799 174 773 q 263 825 222 825 l 263 825 q 328 799 304 825 q 351 726 351 773 l 351 726 q 328 653 351 679 q 263 627 304 627 m 56 0 l 56 580 l 159 560 l 261 580 l 261 0 l 56 0\"},\"\u00f4\":{\"ha\":792,\"x_min\":30,\"x_max\":762,\"o\":\"m 396 -16 l 396 -16 q 204 22 286 -16 q 76 128 122 59 q 30 285 30 196 l 30 285 q 76 444 30 376 q 204 550 122 512 q 396 588 286 588 l 396 588 q 588 550 505 588 q 716 444 670 512 q 762 285 762 376 l 762 285 q 716 128 762 196 q 588 22 670 59 q 396 -16 505 -16 m 396 135 l 396 135 q 482 153 446 135 q 536 205 517 171 q 555 285 555 239 l 555 285 q 536 367 555 333 q 482 418 517 400 q 396 436 446 436 l 396 436 q 310 418 346 436 q 255 367 274 400 q 236 286 236 333 l 236 286 q 255 205 236 239 q 310 153 274 171 q 396 135 346 135 m 148 627 l 291 816 l 500 816 l 643 627 l 482 627 l 396 717 l 310 627 l 148 627\"},\"\u00f6\":{\"ha\":792,\"x_min\":30,\"x_max\":762,\"o\":\"m 396 -16 l 396 -16 q 204 22 286 -16 q 76 128 122 59 q 30 285 30 196 l 30 285 q 76 444 30 376 q 204 550 122 512 q 396 588 286 588 l 396 588 q 588 550 505 588 q 716 444 670 512 q 762 285 762 376 l 762 285 q 716 128 762 196 q 588 22 670 59 q 396 -16 505 -16 m 396 135 l 396 135 q 482 153 446 135 q 536 205 517 171 q 555 285 555 239 l 555 285 q 536 367 555 333 q 482 418 517 400 q 396 436 446 436 l 396 436 q 310 418 346 436 q 255 367 274 400 q 236 286 236 333 l 236 286 q 255 205 236 239 q 310 153 274 171 q 396 135 346 135 m 243 627 l 243 627 q 163 652 193 627 q 132 722 132 677 l 132 722 q 163 790 132 765 q 243 815 193 815 l 243 815 q 324 790 294 815 q 354 722 354 765 l 354 722 q 324 652 354 677 q 243 627 294 627 m 549 627 l 549 627 q 468 652 498 627 q 438 722 438 677 l 438 722 q 468 790 438 765 q 549 815 498 815 l 549 815 q 629 790 599 815 q 659 722 659 765 l 659 722 q 629 652 659 677 q 549 627 599 627\"},\"\u00f9\":{\"ha\":777,\"x_min\":49,\"x_max\":747,\"o\":\"m 302 -16 l 302 -16 q 166 17 222 -16 q 79 111 109 50 q 49 252 49 171 l 49 252 l 49 571 l 253 571 l 253 281 q 284 184 253 218 q 373 150 315 150 l 373 150 q 445 168 416 150 q 490 218 474 185 q 506 297 506 251 l 506 297 l 506 571 l 710 571 l 710 197 l 747 0 l 543 0 l 524 118 q 520 111 522 114 l 520 111 q 425 16 481 48 q 302 -16 369 -16 m 163 816 l 362 816 l 487 627 l 298 627 l 163 816\"},\"\u00fb\":{\"ha\":777,\"x_min\":49,\"x_max\":747,\"o\":\"m 302 -16 l 302 -16 q 166 17 222 -16 q 79 111 109 50 q 49 252 49 171 l 49 252 l 49 571 l 253 571 l 253 281 q 284 184 253 218 q 373 150 315 150 l 373 150 q 445 168 416 150 q 490 218 474 185 q 506 297 506 251 l 506 297 l 506 571 l 710 571 l 710 197 l 747 0 l 543 0 l 524 118 q 520 111 522 114 l 520 111 q 425 16 481 48 q 302 -16 369 -16 m 139 627 l 282 816 l 491 816 l 634 627 l 473 627 l 387 717 l 301 627 l 139 627\"},\"\u00fc\":{\"ha\":777,\"x_min\":49,\"x_max\":747,\"o\":\"m 302 -16 l 302 -16 q 166 17 222 -16 q 79 111 109 50 q 49 252 49 171 l 49 252 l 49 571 l 253 571 l 253 281 q 284 184 253 218 q 373 150 315 150 l 373 150 q 445 168 416 150 q 490 218 474 185 q 506 297 506 251 l 506 297 l 506 571 l 710 571 l 710 197 l 747 0 l 543 0 l 524 118 q 520 111 522 114 l 520 111 q 425 16 481 48 q 302 -16 369 -16 m 234 627 l 234 627 q 154 652 184 627 q 123 722 123 677 l 123 722 q 154 790 123 765 q 234 815 184 815 l 234 815 q 315 790 285 815 q 345 722 345 765 l 345 722 q 315 652 345 677 q 234 627 285 627 m 540 627 l 540 627 q 459 652 489 627 q 429 722 429 677 l 429 722 q 459 790 429 765 q 540 815 489 815 l 540 815 q 620 790 590 815 q 650 722 650 765 l 650 722 q 620 652 650 677 q 540 627 590 627\"},\"\u00ff\":{\"ha\":777,\"x_min\":8,\"x_max\":776,\"o\":\"m 244 -181 l 244 -181 q 132 -165 181 -181 q 37 -118 83 -150 l 37 -118 l 37 24 q 125 -19 84 -6 q 215 -32 166 -32 l 215 -32 q 288 -14 256 -32 q 340 52 320 4 l 340 52 l 340 53 l 251 53 l 8 571 l 233 571 l 395 182 l 559 571 l 776 571 l 502 -11 q 432 -111 473 -74 q 342 -165 390 -149 q 244 -181 294 -181 m 244 627 l 244 627 q 164 652 194 627 q 133 722 133 677 l 133 722 q 164 790 133 765 q 244 815 194 815 l 244 815 q 325 790 295 815 q 355 722 355 765 l 355 722 q 325 652 355 677 q 244 627 295 627 m 550 627 l 550 627 q 469 652 499 627 q 439 722 439 677 l 439 722 q 469 790 439 765 q 550 815 499 815 l 550 815 q 630 790 600 815 q 660 722 660 765 l 660 722 q 630 652 660 677 q 550 627 600 627\"},\"\u0153\":{\"ha\":1244,\"x_min\":30,\"x_max\":1213,\"o\":\"m 384 -16 l 384 -16 q 200 22 280 -16 q 75 128 120 59 q 30 285 30 196 l 30 285 q 75 444 30 376 q 200 550 120 512 q 384 588 280 588 l 384 588 q 564 551 489 588 l 564 551 q 650 486 615 526 l 650 486 q 730 549 683 523 l 730 549 q 892 588 801 588 l 892 588 q 1063 545 991 588 q 1174 423 1135 501 q 1213 238 1213 344 l 1213 238 l 762 238 q 776 211 767 224 l 776 211 q 846 154 800 173 q 954 134 891 134 l 954 134 q 1085 151 1023 134 q 1198 197 1147 167 l 1198 197 l 1198 73 q 1062 8 1140 31 q 906 -16 984 -16 l 906 -16 q 731 20 804 -16 l 731 20 q 648 82 682 44 l 648 82 q 564 21 613 45 l 564 21 q 384 -16 489 -16 m 393 135 l 393 135 q 478 153 443 135 q 532 205 513 171 q 551 285 551 239 l 551 285 q 532 367 551 333 q 478 418 513 400 q 393 436 443 436 l 393 436 q 310 418 345 436 q 255 367 274 400 q 236 285 236 333 l 236 285 q 255 205 236 239 q 310 153 274 171 q 393 135 345 135 m 756 345 l 756 345 l 1035 345 q 1019 385 1029 367 l 1019 385 q 970 434 1001 416 q 896 451 939 451 q 821 433 853 451 q 770 381 788 414 l 770 381 q 756 345 760 365\"},\"\u00e6\":{\"ha\":1263,\"x_min\":32,\"x_max\":1230,\"o\":\"m 962 -16 l 962 -16 q 781 23 857 -16 l 781 23 q 710 72 740 43 l 710 72 l 706 0 l 558 0 l 550 105 q 460 22 512 53 l 460 22 q 315 -16 396 -16 l 315 -16 q 168 22 231 -16 q 68 128 104 59 q 32 285 32 196 l 32 285 q 68 444 32 376 q 168 550 104 512 q 315 588 231 588 l 315 588 q 460 551 396 588 l 460 551 q 550 468 512 519 l 550 468 l 558 571 l 706 571 l 709 510 q 765 550 734 533 l 765 550 q 927 588 834 588 l 927 588 q 1095 545 1026 588 q 1199 422 1164 501 q 1230 238 1233 343 l 1230 238 l 780 238 q 793 213 786 225 l 793 213 q 866 155 817 175 q 989 134 915 134 l 989 134 q 1108 148 1050 134 q 1214 188 1165 161 l 1214 188 l 1214 64 q 1142 22 1179 40 q 1060 -6 1104 3 q 962 -16 1016 -16 m 239 285 l 239 285 q 257 210 239 243 q 305 159 274 177 q 376 140 336 140 l 376 140 q 455 159 418 140 q 520 210 492 177 q 562 285 548 243 l 562 285 q 520 361 548 328 q 455 413 492 394 q 376 432 418 432 l 376 432 q 305 413 336 432 q 257 361 274 394 q 239 285 239 328 m 773 345 l 773 345 l 1053 345 q 1039 383 1048 366 l 1039 383 q 990 434 1021 416 q 913 451 958 451 l 913 451 q 838 433 870 451 q 787 382 805 415 l 787 382 q 773 345 778 365\"},\"\u00c0\":{\"ha\":957,\"x_min\":1,\"x_max\":956,\"o\":\"m 342 750 l 615 750 l 956 0 l 735 0 l 673 144 l 284 144 l 222 0 l 1 0 l 342 750 m 212 974 l 444 974 l 591 806 l 386 806 l 212 974 m 357 311 l 601 311 l 479 593 l 357 311\"},\"\u00c2\":{\"ha\":957,\"x_min\":1,\"x_max\":956,\"o\":\"m 342 750 l 615 750 l 956 0 l 735 0 l 673 144 l 284 144 l 222 0 l 1 0 l 342 750 m 357 311 l 601 311 l 479 593 l 357 311 m 219 806 l 371 974 l 586 974 l 738 806 l 571 806 l 479 875 l 386 806 l 219 806\"},\"\u00c4\":{\"ha\":957,\"x_min\":1,\"x_max\":956,\"o\":\"m 342 750 l 615 750 l 956 0 l 735 0 l 673 144 l 284 144 l 222 0 l 1 0 l 342 750 m 357 311 l 601 311 l 479 593 l 357 311 m 324 805 l 324 805 q 244 831 274 805 q 213 901 213 856 l 213 901 q 244 968 213 943 q 324 993 274 993 l 324 993 q 405 968 374 993 q 435 901 435 943 l 435 901 q 405 831 435 856 q 324 805 374 805 m 634 805 l 634 805 q 554 831 584 805 q 523 901 523 856 l 523 901 q 554 968 523 943 q 634 993 584 993 l 634 993 q 715 968 684 993 q 745 901 745 943 l 745 901 q 715 831 745 856 q 634 805 684 805\"},\"\u00c7\":{\"ha\":934,\"x_min\":37,\"x_max\":903,\"o\":\"m 695 314 l 903 314 q 835 141 892 215 q 686 25 778 66 l 686 25 q 509 -15 607 -10 l 509 -15 l 493 -43 q 540 -39 515 -39 l 540 -39 q 647 -65 610 -39 q 684 -138 684 -92 l 684 -138 q 635 -220 684 -188 q 492 -252 586 -252 l 492 -252 q 355 -222 410 -252 q 285 -141 300 -193 l 285 -141 l 417 -141 q 443 -160 425 -152 q 492 -168 460 -168 l 492 -168 q 541 -158 525 -168 q 557 -134 557 -148 q 544 -111 557 -120 q 503 -103 530 -103 l 503 -103 q 472 -105 487 -103 q 445 -112 456 -107 l 445 -112 l 344 -112 l 409 -13 q 244 33 317 -4 l 244 33 q 92 170 146 82 q 37 375 37 258 q 92 580 37 492 q 244 717 146 668 q 473 766 342 766 l 473 766 q 686 725 593 766 q 835 610 778 684 q 903 436 892 535 l 903 436 l 695 436 q 656 518 685 484 q 581 569 627 551 q 473 587 534 587 l 473 587 q 352 562 403 587 q 274 489 301 536 q 247 375 247 441 q 274 262 247 309 q 352 189 301 214 q 473 163 403 163 l 473 163 q 581 180 534 163 q 656 231 627 197 q 695 314 685 265 l 695 314\"},\"\u00c9\":{\"ha\":794,\"x_min\":47,\"x_max\":744,\"o\":\"m 291 450 l 711 450 l 711 300 l 291 300 l 269 168 l 744 168 l 744 0 l 47 0 l 104 375 l 47 750 l 739 750 l 739 582 l 269 582 l 291 450 m 276 806 l 423 974 l 655 974 l 482 806 l 276 806\"},\"\u00c8\":{\"ha\":794,\"x_min\":47,\"x_max\":744,\"o\":\"m 291 450 l 711 450 l 711 300 l 291 300 l 269 168 l 744 168 l 744 0 l 47 0 l 104 375 l 47 750 l 739 750 l 739 582 l 269 582 l 291 450 m 134 974 l 366 974 l 513 806 l 307 806 l 134 974\"},\"\u00ca\":{\"ha\":794,\"x_min\":47,\"x_max\":744,\"o\":\"m 291 450 l 711 450 l 711 300 l 291 300 l 269 168 l 744 168 l 744 0 l 47 0 l 104 375 l 47 750 l 739 750 l 739 582 l 269 582 l 291 450 m 140 806 l 292 974 l 507 974 l 659 806 l 492 806 l 400 875 l 307 806 l 140 806\"},\"\u00cb\":{\"ha\":794,\"x_min\":47,\"x_max\":744,\"o\":\"m 291 450 l 711 450 l 711 300 l 291 300 l 269 168 l 744 168 l 744 0 l 47 0 l 104 375 l 47 750 l 739 750 l 739 582 l 269 582 l 291 450 m 245 805 l 245 805 q 165 831 195 805 q 134 901 134 856 l 134 901 q 165 968 134 943 q 245 993 195 993 l 245 993 q 326 968 295 993 q 356 901 356 943 l 356 901 q 326 831 356 856 q 245 805 295 805 m 555 805 l 555 805 q 475 831 505 805 q 444 901 444 856 l 444 901 q 475 968 444 943 q 555 993 505 993 l 555 993 q 636 968 605 993 q 666 901 666 943 l 666 901 q 636 831 666 856 q 555 805 605 805\"},\"\u00ce\":{\"ha\":347,\"x_min\":-41,\"x_max\":388,\"o\":\"m 70 0 l 70 750 l 277 750 l 277 0 l 70 0 m -41 806 l 69 974 l 278 974 l 388 806 l 244 806 l 173 881 l 102 806 l -41 806\"},\"\u00cf\":{\"ha\":347,\"x_min\":-29,\"x_max\":376,\"o\":\"m 63 805 l 63 805 q -4 830 20 805 q -29 899 -29 855 l -29 899 q -4 969 -29 944 q 63 993 20 993 l 63 993 q 130 969 105 993 q 154 899 154 944 l 154 899 q 130 830 154 855 q 63 805 105 805 m 284 805 l 284 805 q 218 830 242 805 q 193 899 193 855 l 193 899 q 218 969 193 944 q 284 993 242 993 l 284 993 q 352 969 327 993 q 376 899 376 944 l 376 899 q 352 830 376 855 q 284 805 327 805 m 70 0 l 70 750 l 277 750 l 277 0 l 70 0\"},\"\u00d4\":{\"ha\":965,\"x_min\":37,\"x_max\":928,\"o\":\"m 482 -16 l 482 -16 q 249 33 349 -16 q 93 170 148 82 q 37 375 37 258 l 37 375 q 93 580 37 492 q 249 717 148 668 q 482 766 349 766 l 482 766 q 716 717 616 766 q 872 580 816 668 q 928 375 928 492 l 928 375 q 872 170 928 258 q 716 33 816 82 q 482 -16 616 -16 m 482 169 l 482 169 q 608 194 555 169 q 690 265 661 219 q 718 375 718 311 l 718 375 q 690 485 718 439 q 608 556 661 531 q 482 581 555 581 l 482 581 q 357 556 410 581 q 275 485 304 531 q 246 375 246 439 l 246 375 q 275 265 246 311 q 357 194 304 219 q 482 169 410 169 m 223 806 l 375 974 l 590 974 l 742 806 l 575 806 l 483 875 l 390 806 l 223 806\"},\"\u00d6\":{\"ha\":965,\"x_min\":37,\"x_max\":928,\"o\":\"m 482 -16 l 482 -16 q 249 33 349 -16 q 93 170 148 82 q 37 375 37 258 l 37 375 q 93 580 37 492 q 249 717 148 668 q 482 766 349 766 l 482 766 q 716 717 616 766 q 872 580 816 668 q 928 375 928 492 l 928 375 q 872 170 928 258 q 716 33 816 82 q 482 -16 616 -16 m 482 169 l 482 169 q 608 194 555 169 q 690 265 661 219 q 718 375 718 311 l 718 375 q 690 485 718 439 q 608 556 661 531 q 482 581 555 581 l 482 581 q 357 556 410 581 q 275 485 304 531 q 246 375 246 439 l 246 375 q 275 265 246 311 q 357 194 304 219 q 482 169 410 169 m 327 805 l 327 805 q 247 831 277 805 q 216 901 216 856 l 216 901 q 247 968 216 943 q 327 993 277 993 l 327 993 q 408 968 377 993 q 438 901 438 943 l 438 901 q 408 831 438 856 q 327 805 377 805 m 637 805 l 637 805 q 557 831 587 805 q 526 901 526 856 l 526 901 q 557 968 526 943 q 637 993 587 993 l 637 993 q 718 968 687 993 q 748 901 748 943 l 748 901 q 718 831 748 856 q 637 805 687 805\"},\"\u00d9\":{\"ha\":878,\"x_min\":60,\"x_max\":818,\"o\":\"m 267 750 l 267 335 q 287 247 267 284 q 345 189 306 209 q 439 169 383 169 l 439 169 q 534 189 496 169 q 591 247 572 209 q 610 335 610 284 l 610 335 l 610 750 l 818 750 l 818 325 q 771 146 818 222 q 638 27 723 69 q 439 -16 553 -16 l 439 -16 q 241 27 326 -16 q 108 146 155 69 q 60 325 60 222 l 60 325 l 60 750 l 267 750 m 172 974 l 404 974 l 551 806 l 346 806 l 172 974\"},\"\u00db\":{\"ha\":878,\"x_min\":60,\"x_max\":818,\"o\":\"m 267 750 l 267 335 q 287 247 267 284 q 345 189 306 209 q 439 169 383 169 l 439 169 q 534 189 496 169 q 591 247 572 209 q 610 335 610 284 l 610 335 l 610 750 l 818 750 l 818 325 q 771 146 818 222 q 638 27 723 69 q 439 -16 553 -16 l 439 -16 q 241 27 326 -16 q 108 146 155 69 q 60 325 60 222 l 60 325 l 60 750 l 267 750 m 179 806 l 331 974 l 546 974 l 698 806 l 531 806 l 439 875 l 346 806 l 179 806\"},\"\u00dc\":{\"ha\":878,\"x_min\":60,\"x_max\":818,\"o\":\"m 267 750 l 267 335 q 287 247 267 284 q 345 189 306 209 q 439 169 383 169 l 439 169 q 534 189 496 169 q 591 247 572 209 q 610 335 610 284 l 610 335 l 610 750 l 818 750 l 818 325 q 771 146 818 222 q 638 27 723 69 q 439 -16 553 -16 l 439 -16 q 241 27 326 -16 q 108 146 155 69 q 60 325 60 222 l 60 325 l 60 750 l 267 750 m 284 805 l 284 805 q 204 831 234 805 q 173 901 173 856 l 173 901 q 204 968 173 943 q 284 993 234 993 l 284 993 q 365 968 334 993 q 395 901 395 943 l 395 901 q 365 831 395 856 q 284 805 334 805 m 594 805 l 594 805 q 514 831 544 805 q 483 901 483 856 l 483 901 q 514 968 483 943 q 594 993 544 993 l 594 993 q 675 968 644 993 q 705 901 705 943 l 705 901 q 675 831 705 856 q 594 805 644 805\"},\"\u0152\":{\"ha\":1334,\"x_min\":37,\"x_max\":1285,\"o\":\"m 1285 0 l 482 0 q 249 47 349 0 q 93 178 148 93 q 37 375 37 262 l 37 375 q 92 573 37 488 q 247 704 147 657 q 480 750 346 750 l 480 750 l 1280 750 l 1280 582 l 836 582 l 836 451 l 1251 451 l 1251 300 l 836 300 l 836 168 l 1285 168 l 1285 0 m 467 184 l 467 184 l 635 184 l 635 566 l 467 566 q 350 543 400 566 q 273 477 300 519 q 246 375 246 434 l 246 375 q 273 274 246 317 q 350 208 300 231 q 467 184 400 184\"},\"\u00c6\":{\"ha\":1259,\"x_min\":4,\"x_max\":1218,\"o\":\"m 1170 300 l 783 300 l 835 168 l 1218 168 l 1218 0 l 687 0 l 633 144 l 282 144 l 225 0 l 4 0 l 318 750 l 1199 750 l 1199 582 l 678 582 l 729 450 l 1170 450 l 1170 300 m 571 311 l 463 601 l 348 311 l 571 311\"},\"\u2019\":{\"ha\":297,\"x_min\":46,\"x_max\":273,\"o\":\"m 146 402 l 48 402 l 116 545 q 102 552 109 548 l 102 552 q 61 593 76 567 q 46 649 46 618 q 61 705 46 680 q 102 745 76 730 q 160 760 128 760 q 218 745 192 760 q 258 705 243 730 q 273 647 273 679 l 273 647 q 259 583 273 617 q 210 498 245 549 l 210 498 l 146 402\"},\"\u00ab\":{\"ha\":732,\"x_min\":40,\"x_max\":692,\"o\":\"m 40 309 l 187 549 l 395 549 l 243 310 l 395 70 l 187 70 l 40 309 m 337 309 l 484 549 l 692 549 l 540 310 l 692 70 l 484 70 l 337 309\"},\"\u00bb\":{\"ha\":732,\"x_min\":39,\"x_max\":692,\"o\":\"m 336 549 l 545 549 l 692 309 l 545 70 l 336 70 l 489 310 l 336 549 m 39 549 l 247 549 l 395 309 l 247 70 l 39 70 l 191 310 l 39 549\"},\"\u20ac\":{\"ha\":872,\"x_min\":55,\"x_max\":820,\"o\":\"m 55 405 l 55 516 l 165 516 q 196 579 178 549 l 196 579 q 350 717 251 667 q 580 766 448 766 l 580 766 q 714 754 652 766 q 820 722 776 741 l 820 722 l 820 565 q 716 599 773 588 q 608 609 659 609 l 608 609 q 467 582 525 609 l 467 582 q 388 516 416 558 l 388 516 l 661 516 l 661 405 l 351 405 q 350 374 350 390 l 350 374 q 351 345 350 359 l 351 345 l 661 345 l 661 234 l 386 234 q 467 166 415 190 l 467 166 q 608 139 525 139 l 608 139 q 716 150 659 139 q 820 182 773 161 l 820 182 l 820 25 q 714 -5 776 6 q 580 -17 652 -17 l 580 -17 q 349 32 448 -17 q 196 169 250 81 l 196 169 q 164 234 176 200 l 164 234 l 55 234 l 55 345 l 142 345 q 141 374 141 359 l 141 374 q 142 405 141 390 l 142 405 l 55 405\"},\"\u00b0\":{\"ha\":469,\"x_min\":45,\"x_max\":424,\"o\":\"m 235 446 l 235 446 q 136 466 179 446 q 69 522 93 486 q 45 603 45 557 l 45 603 q 69 685 45 649 q 136 740 93 720 q 235 759 179 759 l 235 759 q 333 740 291 759 q 400 685 375 720 q 424 603 424 649 l 424 603 q 400 522 424 557 q 333 466 375 486 q 235 446 291 446 m 235 529 l 235 529 q 291 548 271 529 q 310 603 310 567 l 310 603 q 291 658 310 639 q 235 677 271 677 l 235 677 q 179 658 198 677 q 159 603 159 639 l 159 603 q 179 548 159 567 q 235 529 198 529\"}},\"familyName\":\"unbounded\",\"ascender\":995,\"descender\":-245,\"underlinePosition\":-100,\"underlineThickness\":50,\"boundingBox\":{\"yMin\":-320,\"xMin\":-326,\"yMax\":1226,\"xMax\":1847},\"resolution\":1000,\"cssFontWeight\":\"normal\",\"cssFontStyle\":\"normal\"}};\n\/* Polices 3D : Unbounded, Inter, Montserrat, Archivo Black, Oswald, Playfair Display, Orbitron, Fredoka, Righteous, Pacifico \u2014 SIL Open Font License, via Fontsource. Les autres polices sont charg\u00e9es \u00e0 la demande depuis CONFIG.fontsPath. *\/\n\/* =====================================================================\n   CONFIG \u2014 r\u00e9glages modifiables\n   ===================================================================== *\/\nconst CONFIG = {\n  brand: \"OK3D\",\n  logoUrl: \"https:\/\/www.ok3d.fr\/wp-content\/uploads\/2026\/09\/ok3d_logo_arrondi_blanc.png\",                                   \/\/ logo blanc (version WordPress)\n  siteUrl: \"https:\/\/www.ok3d.fr\",\n  contactUrl: \"https:\/\/www.ok3d.fr\/#contact\",\n  allowDownload: true,                          \/\/ true sur WordPress : boutons \u00ab T\u00e9l\u00e9charger \u00bb\n  videoSeconds: 6,\n  defaultText: \"OK3D\",\n  fontsPath: \"\",                           \/\/ dossier des polices 3D (fichiers .json)\n  storageKey: \"okk-logolab-v1\"\n};\n\nconst LIGHTS={\n  studio:{name:\"Studio\",bg:\"#E9ECF1\",ex:1,l:[{az:35,el:38,d:7,i:1.1,t:5600},{az:-50,el:18,d:8,i:.5,t:6000},{az:165,el:45,d:7,i:1,t:6500}]},\n  nuit:{name:\"Nuit\",bg:\"#07090D\",ex:1.1,l:[{az:30,el:35,d:7,i:.75,t:6500},{az:-60,el:12,d:8,i:.12,t:6500},{az:170,el:30,d:6,i:1.6,t:7200}]},\n  neon:{name:\"N\u00e9on\",bg:\"#0A0B1A\",ex:1.05,l:[{az:70,el:15,d:6,i:1.2,gel:\"#FF2E88\"},{az:-70,el:15,d:6,i:1.1,gel:\"#22D3FF\"},{az:180,el:50,d:7,i:.8,gel:\"#7C5CFF\"}]},\n  golden:{name:\"Golden hour\",bg:\"#2A1E17\",ex:1.05,l:[{az:80,el:10,d:8,i:1.5,t:2800},{az:-60,el:25,d:8,i:.25,t:9200},{az:150,el:15,d:7,i:.7,t:3000}]},\n};\nconst MATS=[[\"chrome\",\"Chrome\"],[\"or\",\"Or\"],[\"verre\",\"Verre\"],[\"couleur\",\"Couleur\"],[\"neon\",\"N\u00e9on\"]];\nconst ANIMS=[[\"oscille\",\"Rotation\"],[\"reveal\",\"R\u00e9v\u00e9lation\"],[\"flotte\",\"Flottement\"],[\"fixe\",\"Fixe\"]];\nconst FMTS=[[\"16:9\",\"16:9 \u00b7 vid\u00e9o\"],[\"1:1\",\"1:1 \u00b7 post\"],[\"9:16\",\"9:16 \u00b7 story\"]];\nconst COLS=[\"#2E6BFF\",\"#FF2E88\",\"#22D3FF\",\"#FFB454\",\"#35E0A1\",\"#F2F2F2\"];\nconst BGS=[[\"#07090D\",\"Noir\"],[\"#E9ECF1\",\"Blanc\"],[\"#1A1F29\",\"Ardoise\"],[\"#0A0B1A\",\"Nuit\"],[\"#2A1E17\",\"Brun\"]];\nconst SAMPLE_SVG=`<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 100 100\"><g fill=\"#2E6BFF\">\n<rect x=\"42\" y=\"6\" width=\"16\" height=\"88\" rx=\"8\"\/><rect x=\"42\" y=\"6\" width=\"16\" height=\"88\" rx=\"8\" transform=\"rotate(45 50 50)\"\/>\n<rect x=\"42\" y=\"6\" width=\"16\" height=\"88\" rx=\"8\" transform=\"rotate(90 50 50)\"\/><rect x=\"42\" y=\"6\" width=\"16\" height=\"88\" rx=\"8\" transform=\"rotate(135 50 50)\"\/><\/g><\/svg>`;\n\nconst FONT_LIST=[[\"unbounded\",\"Signature\",\"Unbounded\",700],[\"inter\",\"Grotesque\",\"Inter\",800],[\"montserrat\",\"Moderne\",\"Montserrat\",800],[\"archivo\",\"Impact\",\"Archivo Black\",400],[\"oswald\",\"Condens\u00e9e\",\"Oswald\",700],\n  [\"playfair\",\"Luxe\",\"Playfair Display\",800],[\"orbitron\",\"Futuriste\",\"Orbitron\",800],[\"fredoka\",\"Ronde\",\"Fredoka\",600],[\"righteous\",\"R\u00e9tro\",\"Righteous\",400],[\"pacifico\",\"Script\",\"Pacifico\",400]];\nconst ST={src:\"text\",text:CONFIG.defaultText,font:\"unbounded\",track:.02,caps:false,svgText:null,svgName:\"\",keep:false,mat:\"chrome\",col:\"#2E6BFF\",depth:.35,bevel:.03,light:\"nuit\",bg:\"#07090D\",anim:\"oscille\",fmt:\"16:9\"};\nconst $=s=>OKK.querySelector(s);\nconst lerp=(a,b,t)=>a+(b-a)*t;\nfunction kelvin(k){ const t=k\/100; let r,g,b; if(t<=66){ r=255; g=99.4708025861*Math.log(t)-161.1195681661; b=t<=19?0:138.5177312231*Math.log(t-10)-305.0447927307 } else { r=329.698727446*Math.pow(t-60,-.1332047592); g=288.1221695283*Math.pow(t-60,-.0755148492); b=255 } const c=v=>Math.max(0,Math.min(255,v))\/255; return [c(r),c(g),c(b)] }\nconst hex2rgb=h=>[1,3,5].map(i=>parseInt(h.slice(i,i+2),16)\/255);\nfunction toast(t){ const d=document.createElement(\"div\"); d.className=\"toast\"; d.textContent=t; $(\"#okk\").appendChild(d); setTimeout(()=>d.remove(),2600) }\nfunction busy(on,t){ $(\"#busy\").hidden=!on; if(t) $(\"#busyt\").textContent=t }\n\n\/* =====================================================================\n   SCENE\n   ===================================================================== *\/\nconst vp=$(\"#vp\"); const TGT=new THREE.Vector3(0,1.15,0);\nlet R,scene,camera,controls,pmrem,envRT,envScene,envFloor,envBg=null,cyc,cycMat,spots=[],panels=[],glow,root,logoMesh=null,dirty=true,envDirty=true,lastEnv=0,t0=performance.now(),recording=null;\nconst lin=h=>new THREE.Color(h).convertSRGBToLinear();\nfunction initThree(){\n  R=new THREE.WebGLRenderer({antialias:true,preserveDrawingBuffer:false}); R.setPixelRatio(Math.min(devicePixelRatio||1,2)); R.outputEncoding=THREE.sRGBEncoding; R.toneMapping=THREE.ACESFilmicToneMapping;\n  R.shadowMap.enabled=true; R.shadowMap.type=THREE.PCFSoftShadowMap; vp.insertBefore(R.domElement,vp.firstChild);\n  scene=new THREE.Scene(); camera=new THREE.PerspectiveCamera(28,16\/9,.1,200);\n  controls=new THREE.OrbitControls(camera,R.domElement); controls.target.copy(TGT); controls.enableDamping=true; controls.enablePan=false; controls.enableZoom=false;\n  controls.minPolarAngle=1.05; controls.maxPolarAngle=1.62; controls.minAzimuthAngle=-.6; controls.maxAzimuthAngle=.6; controls.addEventListener(\"change\",()=>dirty=true);\n  const prof=[]; for(let z=16;z>=-4;z-=1) prof.push([0,z]); for(let i=1;i<=24;i++){ const a=-Math.PI\/2+i\/24*Math.PI\/2; prof.push([6+6*Math.sin(a),-4-6*Math.cos(a)]) } for(let y=8;y<=24;y+=2) prof.push([y,-10]);\n  const pos=[],idx=[]; prof.forEach(([y,z])=>pos.push(-30,y,z,30,y,z)); for(let i=0;i<prof.length-1;i++){ const a=i*2; idx.push(a,a+1,a+2,a+1,a+3,a+2) }\n  const g=new THREE.BufferGeometry(); g.setAttribute(\"position\",new THREE.Float32BufferAttribute(pos,3)); g.setIndex(idx); g.computeVertexNormals();\n  cycMat=new THREE.MeshStandardMaterial({color:lin(ST.bg),roughness:.9,envMapIntensity:.35}); cyc=new THREE.Mesh(g,cycMat); cyc.receiveShadow=true; scene.add(cyc);\n  for(let i=0;i<3;i++){ const s=new THREE.SpotLight(0xffffff,1,0,.7,.7,1); s.target.position.copy(TGT); if(i!==1){ s.castShadow=true; s.shadow.mapSize.set(1024,1024); s.shadow.bias=-.0004; s.shadow.normalBias=.02 } scene.add(s); scene.add(s.target); spots.push(s) }\n  glow=new THREE.PointLight(0xffffff,0,7,2); glow.position.set(0,.9,.9); scene.add(glow);\n  scene.add(new THREE.AmbientLight(0xffffff,.02));\n  pmrem=new THREE.PMREMGenerator(R); envScene=new THREE.Scene();\n  envFloor=new THREE.Mesh(new THREE.PlaneGeometry(80,80),new THREE.MeshBasicMaterial({color:0,side:THREE.DoubleSide})); envFloor.rotation.x=-Math.PI\/2; envFloor.position.y=-.01; envScene.add(envFloor);\n  for(let i=0;i<3;i++){ const m=new THREE.Mesh(new THREE.PlaneGeometry(1,1),new THREE.MeshBasicMaterial({color:0xffffff,side:THREE.DoubleSide})); envScene.add(m); panels.push(m) }\n  root=new THREE.Group(); root.position.copy(TGT); scene.add(root);\n  new ResizeObserver(resize).observe(vp); resize(); applyLight(); applyLook(); rebuild(); loop();\n}\nfunction frameCamera(){ const a=camera.aspect, vfov=camera.fov*Math.PI\/180; const needW=a<1?3.95:5.0, needH=2.9;\n  const dW=(needW\/2)\/(Math.tan(vfov\/2)*a), dH=(needH\/2)\/Math.tan(vfov\/2), d=Math.max(dW,dH);\n  const dir=new THREE.Vector3(0,.12,1).normalize(); camera.position.copy(TGT).add(dir.multiplyScalar(d)); controls.update(); dirty=true }\nfunction resize(){ if(!R) return; const w=vp.clientWidth,h=vp.clientHeight; if(!w||!h) return; R.setSize(w,h,false); camera.aspect=w\/h; camera.updateProjectionMatrix(); frameCamera() }\nfunction applyLight(sweep=0){ const L=LIGHTS[ST.light];\n  L.l.forEach((l,i)=>{ const az=(l.az+(i===0?sweep:0))*Math.PI\/180, el=l.el*Math.PI\/180, p=new THREE.Vector3(l.d*Math.cos(el)*Math.sin(az),TGT.y+l.d*Math.sin(el),l.d*Math.cos(el)*Math.cos(az));\n    const c=new THREE.Color(...(l.gel?hex2rgb(l.gel):kelvin(l.t))).convertSRGBToLinear(); const s=spots[i]; s.position.copy(p); s.color.copy(c); s.intensity=l.i*2.6*Math.pow(6.5\/l.d,2);\n    const pn=panels[i], dir=p.clone().sub(TGT).normalize(); pn.position.copy(dir.multiplyScalar(7)); pn.lookAt(0,1,0); pn.scale.set(3.2,4,1); pn.material.color.copy(c).multiplyScalar(l.i*3.2) });\n  envDirty=true; dirty=true }\nfunction applyLook(){ if(!R) return; cycMat.color.copy(lin(ST.bg)); envFloor.material.color.copy(lin(ST.bg)).multiplyScalar(.6); envBg=new THREE.Color(ST.bg).multiplyScalar(.85); R.toneMappingExposure=LIGHTS[ST.light].ex; envDirty=true; dirty=true }\nfunction updateEnv(force){ const n=performance.now(); if(!force&&n-lastEnv<90) return; lastEnv=n; envDirty=false; envScene.background=envBg.clone(); \/* r128 PMREM resets scene.background *\/\n  const rt=pmrem.fromScene(envScene,.035); if(envRT) envRT.dispose(); envRT=rt; scene.environment=rt.texture; dirty=true }\n\n\/* ---------- materials & geometry ---------- *\/\nfunction makeMat(kind,color){ const c=lin(color);\n  switch(kind){\n    case \"chrome\": return new THREE.MeshStandardMaterial({color:lin(\"#E9EDF3\"),metalness:1,roughness:.07});\n    case \"or\": return new THREE.MeshStandardMaterial({color:lin(\"#E8B558\"),metalness:1,roughness:.18});\n    case \"verre\": return new THREE.MeshPhysicalMaterial({color:c.clone().lerp(new THREE.Color(1,1,1),.65),metalness:0,roughness:.04,transmission:1,transparent:true,clearcoat:1,clearcoatRoughness:0,envMapIntensity:1.6,depthWrite:false});\n    case \"couleur\": return new THREE.MeshPhysicalMaterial({color:c,metalness:0,roughness:.32,clearcoat:1,clearcoatRoughness:.08});\n    case \"neon\": return new THREE.MeshStandardMaterial({color:lin(\"#101218\"),emissive:c,emissiveIntensity:1.5,roughness:.35,metalness:0});\n  } }\nconst fontCache={};\nfunction getFont(k){ if(!fontCache[k]) fontCache[k]=(FONTS[k]?Promise.resolve(FONTS[k]):(CONFIG.fontsPath?fetch(CONFIG.fontsPath+k+\".json\").then(r=>{ if(!r.ok) throw new Error(\"Police indisponible\"); return r.json() }):fontFromCDN(k)))\n  .then(d=>new THREE.FontLoader().parse(d)).catch(e=>{ delete fontCache[k]; throw e }); return fontCache[k] }\nlet buildId=0;\nlet svgLoaderP=null;\nfunction ensureSVG(){ return svgLoaderP||(svgLoaderP=new Promise((res,rej)=>{ if(THREE.SVGLoader) return res(); const s=document.createElement(\"script\"); s.src=SVGLOADER_URL; s.onload=res; s.onerror=()=>{ svgLoaderP=null; rej(new Error(\"Lecteur SVG indisponible\")) }; document.head.appendChild(s) })) }\nconst SVGLOADER_URL=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/loaders\/SVGLoader.js\";\nfunction disposeLogo(){ if(!logoMesh) return; root.remove(logoMesh); logoMesh.traverse(o=>{ if(o.geometry) o.geometry.dispose(); if(o.material) (Array.isArray(o.material)?o.material:[o.material]).forEach(m=>m.dispose()) }); logoMesh=null }\nfunction finish(group){ group.traverse(o=>{ if(o.isMesh){ o.castShadow=true; o.receiveShadow=true } });\n  const box=new THREE.Box3().setFromObject(group), c=box.getCenter(new THREE.Vector3()); const wrap=new THREE.Group(); group.position.sub(c); wrap.add(group);\n  disposeLogo(); logoMesh=wrap; root.add(wrap); glow.intensity=ST.mat===\"neon\"?2.2:0; glow.color.copy(lin(ST.col)); dirty=true; envDirty=true }\nasync function buildText(){ const my=++buildId; const raw=(ST.text||\"\").trim()||CONFIG.defaultText; const txt=ST.caps?raw.toLocaleUpperCase(\"fr-FR\"):raw;\n  if(!FONTS[ST.font]&&!fontCache[ST.font]) busy(true,\"Chargement de la police\u2026\");\n  let font; try{ font=await getFont(ST.font) } finally{ busy(false) } if(my!==buildId) return;\n  const res=font.data.resolution, G=font.data.glyphs; const lay=[]; let x=0;\n  for(const ch of txt){ const g=G[ch]||G[\"?\"]; const shapes=\/\\s\/.test(ch)?[]:font.generateShapes(ch,1); let bx=[Infinity,-Infinity,Infinity,-Infinity];\n    shapes.forEach(sh=>sh.getPoints(6).forEach(p=>{ bx[0]=Math.min(bx[0],p.x); bx[1]=Math.max(bx[1],p.x); bx[2]=Math.min(bx[2],p.y); bx[3]=Math.max(bx[3],p.y) }));\n    lay.push({x,shapes,bx}); x+=(g?g.ha:res*.4)\/res+ST.track }\n  let minX=Infinity,maxX=-Infinity,minY=Infinity,maxY=-Infinity; lay.forEach(l=>{ if(!l.shapes.length) return; minX=Math.min(minX,l.x+l.bx[0]); maxX=Math.max(maxX,l.x+l.bx[1]); minY=Math.min(minY,l.bx[2]); maxY=Math.max(maxY,l.bx[3]) });\n  if(!isFinite(minX)){ minX=0; maxX=1; minY=0; maxY=1 }\n  const s=Math.min(3.6\/Math.max(maxX-minX,.01),1.75\/Math.max(maxY-minY,.01)); const mat=makeMat(ST.mat,ST.col); const bev=ST.bevel;\n  const inner=new THREE.Group(); inner.scale.setScalar(s); const letters=[];\n  lay.forEach(l=>{ if(!l.shapes.length) return; const geo=new THREE.ExtrudeGeometry(l.shapes,{depth:ST.depth\/s,curveSegments:10,bevelEnabled:bev>.001,bevelThickness:bev\/s,bevelSize:bev*.7\/s,bevelSegments:4});\n    const cx=(l.bx[0]+l.bx[1])\/2, cy=(l.bx[2]+l.bx[3])\/2; const lg=new THREE.Group(); lg.position.set(l.x+cx,cy,0); const m=new THREE.Mesh(geo,mat); m.position.set(-cx,-cy,0); lg.add(m);\n    lg.userData.base=lg.position.clone(); inner.add(lg); letters.push(lg) });\n  const g=new THREE.Group(); g.add(inner); g.userData.letters=letters; g.userData.unit=1\/s; finish(g); logoMesh.userData.letters=letters; logoMesh.userData.unit=1\/s }\nasync function buildSVG(){ if(!ST.svgText){ ST.svgText=SAMPLE_SVG; ST.svgName=\"Exemple \u2733\" }\n  await ensureSVG(); const data=new THREE.SVGLoader().parse(ST.svgText);\n  const items=[]; let minX=Infinity,minY=Infinity,maxX=-Infinity,maxY=-Infinity;\n  data.paths.forEach(p=>{ const st=p.userData&&p.userData.style; if(st&&(st.fill===\"none\"||st.fill===\"transparent\")) return; const shapes=THREE.SVGLoader.createShapes(p); if(!shapes.length) return;\n    shapes.forEach(sh=>sh.getPoints(8).forEach(v=>{ minX=Math.min(minX,v.x); maxX=Math.max(maxX,v.x); minY=Math.min(minY,v.y); maxY=Math.max(maxY,v.y) })); items.push({shapes,color:p.color}) });\n  if(!items.length) throw new Error(\"Aucune forme pleine dans ce SVG\");\n  const w=maxX-minX, h=maxY-minY, k=Math.min(3.6\/Math.max(w,1e-6),1.9\/Math.max(h,1e-6));\n  const inner=new THREE.Group(); inner.scale.set(k,-k,-k); const shared=makeMat(ST.mat,ST.col);\n  items.forEach(it=>{ const geo=new THREE.ExtrudeGeometry(it.shapes,{depth:ST.depth\/k,curveSegments:18,bevelEnabled:ST.bevel>.001,bevelThickness:ST.bevel\/k,bevelSize:ST.bevel*.7\/k,bevelSegments:3});\n    let m=shared; if(ST.keep&&it.color){ m=new THREE.MeshPhysicalMaterial({color:it.color.clone().convertSRGBToLinear(),roughness:.3,clearcoat:1,clearcoatRoughness:.08}) } inner.add(new THREE.Mesh(geo,m)) });\n  const g=new THREE.Group(); g.add(inner); finish(g) }\nlet rbT=null;\nfunction rebuild(){ if(!R) return; clearTimeout(rbT); rbT=setTimeout(async()=>{ try{ if(ST.src===\"svg\"){ buildId++; await buildSVG() } else await buildText() }catch(e){ console.error(e); toast(e.message||\"Construction impossible\") } },60) }\n\n\/* ---------- animation ---------- *\/\nconst ease=t=>1-Math.pow(1-t,3), backOut=t=>{ const c=1.4; return 1+(c+1)*Math.pow(t-1,3)+c*Math.pow(t-1,2) };\nfunction animate(now){ if(!logoMesh) return 0; const t=((now-t0)\/1000)%CONFIG.videoSeconds; let sweep=0; const L=logoMesh;\n  L.position.set(0,0,0); L.rotation.set(0,0,0); L.scale.setScalar(1);\n  const LT=L.userData.letters||[], u=L.userData.unit||1; LT.forEach(l=>{ l.position.copy(l.userData.base); l.rotation.set(0,0,0); l.scale.setScalar(1) });\n  if(ST.anim===\"oscille\"){ L.rotation.y=Math.sin(t\/CONFIG.videoSeconds*Math.PI*2)*.55 }\n  else if(ST.anim===\"flotte\"){ L.position.y=Math.sin(t*1.3)*.06; L.rotation.y=Math.sin(t*.7)*.18; L.rotation.x=Math.sin(t*.9)*.05;\n    LT.forEach((l,i)=>{ l.position.y=l.userData.base.y+Math.sin(t*2.2-i*.55)*.07*u; l.rotation.x=Math.sin(t*2.2-i*.55)*.12 }) }\n  else if(ST.anim===\"reveal\"&&LT.length){ LT.forEach((l,i)=>{ const a=Math.max(0,Math.min(1,(t-i*.09)\/1.1)); l.position.y=l.userData.base.y+lerp(-1.4,0,ease(a))*u; l.rotation.x=lerp(-1.6,0,backOut(a)); l.scale.setScalar(Math.max(.001,lerp(.4,1,ease(a)))) });\n    const s=Math.max(0,Math.min(1,(t-(1.2+LT.length*.09))\/(CONFIG.videoSeconds-2.4))); sweep=lerp(-95,75,s) }\n  else if(ST.anim===\"reveal\"){ const a=Math.min(1,t\/1.5), e=backOut(a); L.position.y=lerp(-1.9,0,ease(a)); L.rotation.x=lerp(-1.25,0,e); L.rotation.y=lerp(.7,0,ease(a)); L.scale.setScalar(lerp(.75,1,ease(a)));\n    const s=Math.max(0,Math.min(1,(t-1.4)\/(CONFIG.videoSeconds-2.2))); sweep=lerp(-95,75,s) }\n  return sweep }\nlet lastSweep=null;\nfunction loop(){ requestAnimationFrame(loop); const now=performance.now();\n  if(ST.anim!==\"fixe\"||recording){ const sw=animate(now); if(ST.anim===\"reveal\"){ if(lastSweep===null||Math.abs(sw-lastSweep)>.2){ applyLight(sw); lastSweep=sw } } dirty=true }\n  if(controls.update()) dirty=true; if(envDirty) updateEnv(false);\n  if(dirty){ R.render(scene,camera); dirty=false } }\n\n\/* ---------- capture & video ---------- *\/\nfunction openShot(kind,url,ext){ const img=$(\"#shotimg\"), v=$(\"#shotvid\"); img.hidden=kind!==\"img\"; v.hidden=kind!==\"vid\";\n  if(kind===\"img\") img.src=url; else { v.src=url; v.play().catch(()=>{}) }\n  const dl=$(\"#shotdl\"); dl.hidden=!CONFIG.allowDownload; if(CONFIG.allowDownload){ dl.href=url; dl.download=`logo-3d-ok3d.${ext}` }\n  $(\"#shotp\").textContent=CONFIG.allowDownload?\"Ton rendu est pr\u00eat.\":kind===\"img\"?\"Clic droit ou appui long sur l'image pour l'enregistrer.\":\"Clic droit sur la vid\u00e9o, puis \u00ab Enregistrer la vid\u00e9o sous\u2026 \u00bb.\"; $(\"#shot\").hidden=false }\nfunction capture(){ if(!R) return; R.render(scene,camera); openShot(\"img\",R.domElement.toDataURL(\"image\/png\"),\"png\") }\nfunction recordVideo(){ if(!R||recording) return;\n  if(!window.MediaRecorder||!R.domElement.captureStream){ toast(\"La vid\u00e9o n'est pas disponible sur ce navigateur. Utilise la capture.\"); return }\n  const types=[\"video\/webm;codecs=vp9\",\"video\/webm;codecs=vp8\",\"video\/webm\",\"video\/mp4\"]; const type=types.find(t=>MediaRecorder.isTypeSupported&&MediaRecorder.isTypeSupported(t));\n  let rec; try{ rec=new MediaRecorder(R.domElement.captureStream(30),type?{mimeType:type,videoBitsPerSecond:8e6}:undefined) }catch(e){ toast(\"Enregistrement vid\u00e9o impossible ici.\"); return }\n  const chunks=[]; rec.ondataavailable=e=>e.data.size&&chunks.push(e.data);\n  rec.onstop=()=>{ recording=null; $(\"#rec\").hidden=true; $(\"#vid\").disabled=false; const blob=new Blob(chunks,{type:rec.mimeType||\"video\/webm\"}); openShot(\"vid\",URL.createObjectURL(blob),\/mp4\/.test(blob.type)?\"mp4\":\"webm\") };\n  recording=rec; t0=performance.now(); lastSweep=null; $(\"#rec\").hidden=false; $(\"#vid\").disabled=true; rec.start(250);\n  let left=CONFIG.videoSeconds; $(\"#rect\").textContent=left; const iv=setInterval(()=>{ left--; $(\"#rect\").textContent=Math.max(0,left); if(left<=0) clearInterval(iv) },1000);\n  setTimeout(()=>{ try{ rec.stop() }catch(e){} },CONFIG.videoSeconds*1000+120) }\n\n\/* =====================================================================\n   UI\n   ===================================================================== *\/\nfunction chipRow(sel,items,attr,on){ const box=$(sel); box.innerHTML=items.map(([v,l,sw])=>`<button type=\"button\" class=\"chip\" data-${attr}=\"${v}\">${sw?`<i style=\"background:${sw}\"><\/i>`:\"\"}${l}<\/button>`).join(\"\"); box.querySelectorAll(\".chip\").forEach(c=>c.onclick=()=>on(c.dataset[attr])) }\nfunction pressed(sel,attr,val){ OKK.querySelectorAll(sel+\" .chip\").forEach(c=>c.setAttribute(\"aria-pressed\",String(c.dataset[attr])===String(val))) }\nfunction setRange(id,v,txt){ const r=$(id); r.value=v; r.style.setProperty(\"--v\",((v-r.min)\/(r.max-r.min)*100)+\"%\"); $(\"#v-\"+id.slice(1)).textContent=txt }\nfunction sync(){ OKK.querySelectorAll(\".ft\").forEach(b=>b.setAttribute(\"aria-pressed\",b.dataset.font===ST.font)); setRange(\"#track\",ST.track,(ST.track>=0?\"+\":\"\")+Math.round(ST.track*1000)); $(\"#fname\").textContent=(FONT_LIST.find(f=>f[0]===ST.font)||[])[2]||\"\"; $(\"#caps\").checked=ST.caps; pressed(\"#mats\",\"m\",ST.mat); pressed(\"#cols\",\"c\",ST.col); pressed(\"#lights\",\"l\",ST.light); pressed(\"#bgs\",\"b\",ST.bg); pressed(\"#anims\",\"a\",ST.anim); pressed(\"#fmts\",\"f\",ST.fmt);\n  setRange(\"#depth\",ST.depth,ST.depth.toFixed(2)); setRange(\"#bevel\",ST.bevel,ST.bevel.toFixed(3)); $(\"#col\").value=ST.col; $(\"#bgc\").value=ST.bg; $(\"#keepc\").checked=ST.keep;\n  $(\"#colrow\").style.opacity=[\"chrome\",\"or\"].includes(ST.mat)?.4:1; $(\"#cnt\").textContent=`${(ST.text||\"\").length}\/16`;\n  $(\"#ftag\").textContent=`${ST.fmt} \u00b7 ${LIGHTS[ST.light].name}`; $(\"#sinfo\").textContent=ST.svgName?`Logo : ${ST.svgName}`:\"\" }\nfunction setSrc(src){ ST.src=src; OKK.querySelectorAll(\"[data-src]\").forEach(b=>b.setAttribute(\"aria-selected\",b.dataset.src===src)); $(\"#p-text\").hidden=src!==\"text\"; $(\"#p-svg\").hidden=src!==\"svg\"; rebuild(); sync() }\nasync function loadSVGFile(f){ if(!f) return; if(!\/svg\/i.test(f.type)&&!\/\\.svg$\/i.test(f.name)){ toast(\"D\u00e9pose un fichier .svg (formes vectorielles).\"); return }\n  if(f.size>5e6){ toast(\"SVG trop lourd (plus de 5 Mo).\"); return } busy(true,\"Lecture du SVG\u2026\");\n  try{ ST.svgText=await f.text(); ST.svgName=f.name; ST.keep=true; setSrc(\"svg\") } finally{ busy(false) } }\nfunction buildUI(){\n  $(\"#fonts\").innerHTML=FONT_LIST.map(([id,cat,fam,w])=>`<button type=\"button\" class=\"ft\" data-font=\"${id}\" title=\"${fam} \u00b7 ${cat}\"><b style=\"font-family:'${fam}',var(--f-body);font-weight:${w}\">Ag<\/b><small>${cat}<\/small><\/button>`).join(\"\");\n  OKK.querySelectorAll(\".ft\").forEach(b=>b.onclick=()=>{ ST.font=b.dataset.font; rebuild(); sync() });\n  $(\"#track\").oninput=e=>{ ST.track=+e.target.value; rebuild(); sync() }; $(\"#caps\").onchange=e=>{ ST.caps=e.target.checked; rebuild(); sync() };\n  chipRow(\"#mats\",MATS,\"m\",v=>{ ST.mat=v; rebuild(); sync() });\n  chipRow(\"#cols\",COLS.map(c=>[c,\"\",c]),\"c\",v=>{ ST.col=v; rebuild(); sync() });\n  chipRow(\"#lights\",Object.entries(LIGHTS).map(([k,l])=>[k,l.name]),\"l\",v=>{ ST.light=v; ST.bg=LIGHTS[v].bg; applyLight(); applyLook(); sync() });\n  chipRow(\"#bgs\",BGS.map(([c,l])=>[c,l,c]),\"b\",v=>{ ST.bg=v; applyLook(); sync() });\n  chipRow(\"#anims\",ANIMS,\"a\",v=>{ ST.anim=v; t0=performance.now(); lastSweep=null; if(R){ applyLight(); if(v===\"fixe\") animate(performance.now()) } dirty=true; sync() });\n  chipRow(\"#fmts\",FMTS,\"f\",v=>{ ST.fmt=v; vp.dataset.fmt=v; sync() });\n  $(\"#txt\").value=ST.text; $(\"#txt\").oninput=e=>{ ST.text=e.target.value; rebuild(); sync() };\n  $(\"#col\").oninput=e=>{ ST.col=e.target.value; rebuild(); sync() }; $(\"#bgc\").oninput=e=>{ ST.bg=e.target.value; applyLook(); sync() };\n  $(\"#depth\").oninput=e=>{ ST.depth=+e.target.value; rebuild(); sync() }; $(\"#bevel\").oninput=e=>{ ST.bevel=+e.target.value; rebuild(); sync() };\n  $(\"#keepc\").onchange=e=>{ ST.keep=e.target.checked; rebuild(); sync() };\n  OKK.querySelectorAll(\"[data-src]\").forEach(b=>b.onclick=()=>setSrc(b.dataset.src));\n  $(\"#sample\").onclick=()=>{ ST.svgText=SAMPLE_SVG; ST.svgName=\"Exemple \u2733\"; ST.keep=false; setSrc(\"svg\") };\n  $(\"#sfile\").onchange=e=>{ loadSVGFile(e.target.files[0]); e.target.value=\"\" };\n  const drop=$(\"#drop\"); [\"dragenter\",\"dragover\"].forEach(t=>drop.addEventListener(t,()=>drop.classList.add(\"over\"))); [\"dragleave\",\"drop\"].forEach(t=>drop.addEventListener(t,()=>drop.classList.remove(\"over\")));\n  let depth=0; const dz=$(\"#dz\"); vp.addEventListener(\"dragenter\",e=>{ e.preventDefault(); depth++; dz.hidden=false }); vp.addEventListener(\"dragover\",e=>e.preventDefault());\n  vp.addEventListener(\"dragleave\",()=>{ if(--depth<=0){ depth=0; dz.hidden=true } }); vp.addEventListener(\"drop\",e=>{ e.preventDefault(); depth=0; dz.hidden=true; loadSVGFile(e.dataTransfer.files[0]) });\n  $(\"#snap\").onclick=capture; $(\"#vid\").onclick=recordVideo; $(\"#shotx\").onclick=()=>{ $(\"#shot\").hidden=true; $(\"#shotvid\").pause() };\n  [\"#cta-mid\",\"#cta-bottom\"].forEach(s=>$(s).href=CONFIG.contactUrl);\n\n  sync();\n}\n\n\/* ---------- iframe auto-height (WordPress \/ Elementor) ---------- *\/\n(function(){ if(window.parent===window) return; let last=0; const send=()=>{ const h=Math.ceil($(\"#okk\").getBoundingClientRect().height); if(Math.abs(h-last)>2){ last=h; try{ parent.postMessage({type:\"ok3d-logolab:height\",height:h},\"*\") }catch(e){} } };\n  try{ new ResizeObserver(send).observe($(\"#okk\")) }catch(e){ setInterval(send,800) } })();\n\n\/* Pleine largeur, m\u00eame dans une colonne Elementor limit\u00e9e.\n   Aucune modification globale du th\u00e8me ou du d\u00e9filement de la page. *\/\n(function setupElementorScreen() {\n  let pending = 0;\n  const isFull = () => (document.fullscreenElement || document.webkitFullscreenElement) === OKK || OKK.classList.contains('is-app-screen');\n  const setVar = (name, value) => {\n    if (OKK.style.getPropertyValue(name) !== value) OKK.style.setProperty(name, value);\n  };\n  const measure = () => {\n    pending = 0;\n    if (!OKK.isConnected) { if (observer) observer.disconnect(); return; }\n    const full = isFull();\n    if (!full) {\n      const width = document.documentElement.clientWidth;\n      const shift = parseFloat(OKK.style.getPropertyValue('--okk-shift')) || 0;\n      const left = OKK.getBoundingClientRect().left;\n      setVar('--okk-width', width + 'px');\n      setVar('--okk-shift', (Math.round((shift - left) * 100) \/ 100) + 'px');\n    }\n    const admin = document.getElementById('wpadminbar');\n    const adminVisible = admin && getComputedStyle(admin).position === 'fixed';\n    setVar('--okk-admin-height', (!full && adminVisible ? admin.getBoundingClientRect().height : 0) + 'px');\n  };\n  const schedule = () => { if (!pending) pending = requestAnimationFrame(measure); };\n  const observer = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(schedule) : null;\n  if (observer) {\n    observer.observe(document.documentElement);\n    if (OKK.parentElement) observer.observe(OKK.parentElement);\n  }\n  window.addEventListener('resize', schedule);\n  window.addEventListener('orientationchange', schedule);\n  window.addEventListener('load', schedule, { once: true });\n  if (window.visualViewport) window.visualViewport.addEventListener('resize', schedule);\n  if (document.fonts && document.fonts.ready) document.fonts.ready.then(schedule);\n  (function setupOK3DFullscreen(root) {\n  const doc = root.ownerDocument;\n  const win = doc.defaultView;\n  let appState = null;\n  const nativeFull = () => (doc.fullscreenElement || doc.webkitFullscreenElement) === root;\n  const active = () => nativeFull() || root.classList.contains('is-app-screen');\n  const attribute = (node, name, value) => {\n    if (node.getAttribute(name) !== value) node.setAttribute(name, value);\n  };\n  const sync = () => {\n    const full = active();\n    root.querySelectorAll('[data-okk-fullscreen]').forEach(button => {\n      const label = full ? '\u2922 Quitter le plein \u00e9cran' : '\u26f6 Plein \u00e9cran';\n      if (button.textContent !== label) button.textContent = label;\n      button.hidden = false;\n      attribute(button, 'aria-pressed', String(full));\n      attribute(button, 'aria-label', full ? 'Quitter le plein \u00e9cran' : 'Afficher en plein \u00e9cran');\n      attribute(button, 'title', full ? 'Quitter le plein \u00e9cran (\u00c9chap)' : 'Afficher en plein \u00e9cran');\n    });\n  };\n  const changed = () => {\n    sync();\n    win.dispatchEvent(new Event('resize'));\n  };\n  const saveOverflow = node => [node.style.getPropertyValue('overflow'), node.style.getPropertyPriority('overflow')];\n  const restoreOverflow = (node, value) => {\n    if (value[0]) node.style.setProperty('overflow', value[0], value[1]);\n    else node.style.removeProperty('overflow');\n  };\n  const focusButton = () => {\n    const button = root.querySelector('[data-okk-fullscreen]');\n    if (button) button.focus({ preventScroll: true });\n  };\n  const enterApp = () => {\n    if (appState) return;\n    const marker = doc.createComment('OK3D \u2014 retour du mode app');\n    appState = {\n      marker, parent: root.parentNode, next: root.nextSibling,\n      bodyOverflow: saveOverflow(doc.body), htmlOverflow: saveOverflow(doc.documentElement),\n      x: win.scrollX, y: win.scrollY\n    };\n    root.before(marker);\n    \/\/ Sortir des conteneurs transform\u00e9s d'Elementor pour couvrir toute la fen\u00eatre.\n    doc.body.appendChild(root);\n    root.classList.add('is-app-screen');\n    doc.body.style.setProperty('overflow', 'hidden', 'important');\n    doc.documentElement.style.setProperty('overflow', 'hidden', 'important');\n    root.scrollTop = 0;\n    changed();\n    focusButton();\n  };\n  const leaveApp = () => {\n    if (!appState) return;\n    const saved = appState;\n    appState = null;\n    root.classList.remove('is-app-screen');\n    if (saved.marker.isConnected) saved.marker.replaceWith(root);\n    else if (saved.parent && saved.parent.isConnected) {\n      saved.parent.insertBefore(root, saved.next && saved.next.parentNode === saved.parent ? saved.next : null);\n    }\n    restoreOverflow(doc.body, saved.bodyOverflow);\n    restoreOverflow(doc.documentElement, saved.htmlOverflow);\n    changed();\n    win.scrollTo(saved.x, saved.y);\n    focusButton();\n  };\n  root.addEventListener('click', async event => {\n    const button = event.target.closest && event.target.closest('[data-okk-fullscreen]');\n    if (!button || !root.contains(button)) return;\n    event.preventDefault();\n    if (appState) { leaveApp(); return; }\n    if (nativeFull()) {\n      const exit = doc.exitFullscreen || doc.webkitExitFullscreen;\n      if (exit) {\n        try { await exit.call(doc); } catch (_) { attribute(button, 'title', 'Appuie sur \u00c9chap pour quitter le plein \u00e9cran'); }\n      }\n      return;\n    }\n    const request = root.requestFullscreen || root.webkitRequestFullscreen;\n    if (request) {\n      try { await request.call(root); sync(); return; } catch (_) { \/* Aper\u00e7u ou appareil sans API : mode app. *\/ }\n    }\n    enterApp();\n  });\n  doc.addEventListener('keydown', event => {\n    if (event.key === 'Escape' && appState) {\n      event.preventDefault();\n      event.stopPropagation();\n      leaveApp();\n      return;\n    }\n    if (event.key !== 'Tab' || !active()) return;\n    const items = Array.from(root.querySelectorAll('button:not(:disabled),a[href],input:not(:disabled),select:not(:disabled),textarea:not(:disabled),[tabindex=\"0\"]'))\n      .filter(node => !node.hidden && node.getClientRects().length);\n    if (!items.length) return;\n    const first = items[0], last = items[items.length - 1];\n    if (event.shiftKey && (doc.activeElement === first || !root.contains(doc.activeElement))) {\n      event.preventDefault(); last.focus();\n    } else if (!event.shiftKey && (doc.activeElement === last || !root.contains(doc.activeElement))) {\n      event.preventDefault(); first.focus();\n    }\n  }, true);\n  doc.addEventListener('fullscreenchange', changed);\n  doc.addEventListener('webkitfullscreenchange', changed);\n  \/\/ Les barres de jeu (Keystroke notamment) sont reconstruites apr\u00e8s chaque s\u00e9rie.\n  if (typeof MutationObserver !== 'undefined') new MutationObserver(sync).observe(root, { childList: true, subtree: true });\n  sync();\n  return { active };\n})(OKK);\n  measure();\n})();\n\n\nbuildUI();\nif(window.THREE&&THREE.OrbitControls){ try{ initThree() }catch(e){ console.error(e); vp.insertAdjacentHTML(\"beforeend\",'<div class=\"fallback\">Ton navigateur ne permet pas le rendu 3D (WebGL). Essaie avec une version r\u00e9cente de Chrome, Safari ou Firefox.<\/div>') } }\nelse vp.insertAdjacentHTML(\"beforeend\",'<div class=\"fallback\">Le moteur 3D n\\'a pas pu se charger. V\u00e9rifie ta connexion puis recharge la page.<\/div>');\n\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u26f6 Plein \u00e9cran OK3D Lab \u00b7 Logo 3D Ton logo en 3D.En dix secondes. Tape le nom de ta marque ou d\u00e9pose ton logo en SVG. Choisis une mati\u00e8re, une lumi\u00e8re, une animation, et repars avec une image ou une vid\u00e9o pr\u00eate pour tes r\u00e9seaux. Texte ou SVGRendu temps r\u00e9elVid\u00e9o 6 s16:9 \u00b7 1:1 \u00b7 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-15682","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ok3d.fr\/en\/wp-json\/wp\/v2\/pages\/15682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ok3d.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ok3d.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ok3d.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ok3d.fr\/en\/wp-json\/wp\/v2\/comments?post=15682"}],"version-history":[{"count":7,"href":"https:\/\/www.ok3d.fr\/en\/wp-json\/wp\/v2\/pages\/15682\/revisions"}],"predecessor-version":[{"id":15703,"href":"https:\/\/www.ok3d.fr\/en\/wp-json\/wp\/v2\/pages\/15682\/revisions\/15703"}],"wp:attachment":[{"href":"https:\/\/www.ok3d.fr\/en\/wp-json\/wp\/v2\/media?parent=15682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}