<iframe title="mc-qr-studio-disclaimer.html" style="display:block;width:100%;height:100dvh;border:0" srcdoc="<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Blockcode — Minecraft QR Studio Disclaimer</title>
<meta name="description" content="Turn any link into a pile of blocks you can scan. A Minecraft-themed QR code generator.">
<meta name="copyright" content="Blockcode — Minecraft QR Studio Disclaimer. © Mojang Synergies AB. Minecraft is a trademark of Mojang Synergies AB.">
<meta name="author" content="Mojang">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect width='16' height='16' fill='%23262423'/><path fill='%23d0c5c0' d='M0 0h5v1h-5zM6 0h1v1h-1zM8 0h1v1h-1zM10 0h6v1h-6zM0 1h1v1h-1zM4 1h3v1h-3zM9 1h3v1h-3zM15 1h1v1h-1zM0 2h1v1h-1zM2 2h1v1h-1zM4 2h1v1h-1zM6 2h3v1h-3zM11 2h1v1h-1zM13 2h1v1h-1zM15 2h1v1h-1zM0 3h1v1h-1zM4 3h8v1h-8zM15 3h1v1h-1zM0 4h16v1h-16zM1 5h1v1h-1zM3 5h2v1h-2zM7 5h2v1h-2zM11 5h2v1h-2zM15 5h1v1h-1zM0 6h5v1h-5zM7 6h2v1h-2zM11 6h4v1h-4zM1 7h6v1h-6zM9 7h7v1h-7zM0 8h6v1h-6zM10 8h3v1h-3zM14 8h2v1h-2zM3 9h3v1h-3zM10 9h5v1h-5zM0 10h6v1h-6zM7 10h2v1h-2zM10 10h6v1h-6zM0 11h12v1h-12zM15 11h1v1h-1zM0 12h1v1h-1zM4 12h8v1h-8zM13 12h1v1h-1zM15 12h1v1h-1zM0 13h1v1h-1zM2 13h1v1h-1zM4 13h1v1h-1zM6 13h3v1h-3zM10 13h2v1h-2zM15 13h1v1h-1zM0 14h1v1h-1zM4 14h2v1h-2zM7 14h3v1h-3zM11 14h5v1h-5zM0 15h6v1h-6zM7 15h2v1h-2zM10 15h3v1h-3zM14 15h2v1h-2z'/></svg>">
<style>@layer reset,tokens,base,layout,components,utilities;@layer reset{*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body,h1,h2,h3,h4,p,figure,ul,ol{margin:0;padding:0}ul,ol{list-style:none}img,canvas,svg{display:block;max-width:100%}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:var(--focus-w) solid var(--focus-ring);outline-offset:var(--focus-gap);box-shadow:var(--focus-inner)}.seg input:focus-visible,.check input:focus-visible{outline:none;box-shadow:none}}@layer tokens{:root{color-scheme:light;--n-0: #ffffff;--n-50: #fafafa;--n-100: #f4f4f5;--n-200: #e4e4e7;--n-300: #d4d4d8;--n-400: #a1a1aa;--n-500: #71717a;--n-600: #52525b;--n-700: #3f3f46;--n-800: #27272a;--n-900: #18181b;--surface-page: var(--n-100);--surface-card: var(--n-0);--surface-sunk: var(--n-200);--surface-inverse: var(--n-900);--line: var(--n-300);--line-control: #8b8b94;--line-strong: var(--line-control);--ink: var(--n-900);--ink-2: var(--n-600);--ink-3: var(--n-500);--ink-on-inverse: var(--n-50);--ink-3-on-inverse: var(--n-400);--accent: #2a641c;--accent-hover: #244d1a;--on-accent: var(--n-0);--ui-error: #dc2626;--ok-fill: #e8f5ec;--ok-ink: #166534;--ok-line: #7fbf95;--bad-fill: #fdeceb;--bad-ink: #991b1b;--bad-line: #e8a49e;--mc-grey-3: #aba09c;--mc-grey-4: #6b6562;--alpha-grid: conic-gradient( var(--mc-grey-3) 25%, var(--mc-grey-4) 0 50%, var(--mc-grey-3) 0 75%, var(--mc-grey-4) 0 );--u: 8px;--s-1: calc(var(--u) * 0.5);--s-2: var(--u);--s-3: calc(var(--u) * 2);--s-4: calc(var(--u) * 3);--s-5: calc(var(--u) * 4);--s-6: calc(var(--u) * 6);--s-7: calc(var(--u) * 8);--band-pad: clamp(var(--s-3), 4vw, var(--s-7));--font-ui: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--type-legend: 1.125rem;--type-body: 1rem;--type-small: 0.875rem;--type-label: 0.75rem;--leading-display: 1.25;--leading-subhead: 1.35;--leading-body: 1.5;--ctrl-xs: 28px;--ctrl-sm: 32px;--ctrl-md: 40px;--ctrl-lg: 44px;--edge: 1px;--edge-strong: 2px;--lift: 1px;--shadow-1: 0 1px 2px rgb(24 24 27 / 0.06), 0 1px 3px rgb(24 24 27 / 0.10);--shadow-2: 0 1px 2px rgb(24 24 27 / 0.05), 0 6px 16px rgb(24 24 27 / 0.09);--shadow-3: 0 2px 6px rgb(24 24 27 / 0.07), 0 18px 42px rgb(24 24 27 / 0.16);--radius: 6px;--radius-sm: 4px;--focus-ring: #2563eb;--focus-w: 2px;--focus-gap: 2px;--focus-inner: 0 0 0 var(--focus-gap) var(--n-0);--text-shadow-section: none;--ease-block: cubic-bezier(0.2, 0.9, 0.3, 1);--dur-tap: 90ms;--dur-ui: 160ms;--dur-panel: 240ms}@media(prefers-reduced-motion:reduce){:root{--dur-tap: 1ms;--dur-ui: 1ms;--dur-panel: 1ms}*,*::before,*::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;scroll-behavior:auto!important}#qr-canvas{animation:none!important}}}@layer base{body{background:var(--surface-page);color:var(--ink);font-family:var(--font-ui);font-size:var(--type-body);line-height:var(--leading-body)}h1,h2,h3{font-family:var(--font-ui);font-weight:600;line-height:var(--leading-display);letter-spacing:-0.006em;text-shadow:var(--text-shadow-section)}#studio:focus{outline:none;box-shadow:none}.readout{font-variant-numeric:tabular-nums}}@layer layout{.band{position:relative}.band__inner{max-inline-size:1120px;margin-inline:auto;padding-inline:var(--band-pad)}.band--workbench{background:var(--surface-page);padding-block:var(--s-5)}.studio{display:grid;grid-template-columns:minmax(320px,460px) minmax(380px,1fr);gap:var(--s-4);align-items:start}}@layer components{.panel{background:var(--surface-card);color:var(--ink);padding:var(--s-2) var(--s-4);border:var(--edge) solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-2)}.panel__legend{font-size:var(--type-legend);font-weight:600;line-height:var(--leading-subhead);letter-spacing:-0.008em;color:var(--ink);text-shadow:var(--text-shadow-section);margin-block:0 var(--s-2)}.panel>.panel__legend:not(:first-child),.panel>.panel__stephead:not(:first-child){margin-block-start:var(--s-2);padding-block-start:var(--s-2);border-block-start:var(--edge) solid var(--n-400)}.export-panel>.panel__legend{margin-block:0}.field{margin-block-end:var(--s-2)}.field{position:relative}.field:last-of-type{margin-block-end:0}.field__head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-2);margin-block-start:var(--s-1);margin-block-end:var(--s-1)}.field__head .field__label{margin-block-end:0}.field__head .field__label--sub{margin-block-start:0}.field__head .field__meta{margin-block-start:0}.field__head>.field__meta{flex:0 0 auto}.chips+.field__label{margin-block-start:var(--s-3)}.field__label{display:block;line-height:var(--leading-subhead);font-size:var(--type-label);font-weight:600;letter-spacing:0;text-transform:none;margin-block-end:var(--s-2);color:var(--ink-2)}.field__meta{display:flex;align-items:center;gap:var(--s-1);margin-block-start:var(--s-2);font-size:var(--type-small);color:var(--ink-2)}.field__meta:not(:has(>.field__count:not([hidden]))){margin-block-start:0}.field__count{display:flex;align-items:center;gap:var(--s-1)}.field__count.is-over{background:var(--surface-inverse);color:var(--ink-on-inverse);padding:2px var(--s-2);border-radius:var(--radius-sm)}.field__meta-sep{color:var(--ink-3)}.field__hint{font-size:var(--type-small);color:var(--ink-3)}.field__count.is-over .field__meta-sep,.field__count.is-over .field__hint{color:var(--ink-3-on-inverse)}.field__note{margin-block-start:var(--s-2);font-size:var(--type-small);line-height:var(--leading-subhead);color:var(--ink-2)}.field__note.is-bad{background:var(--surface-sunk);color:var(--ink);padding:var(--s-2);border-inline-start:3px solid var(--ink);border-radius:0 var(--radius-sm) var(--radius-sm) 0}.field__note:empty{margin-block-start:0;padding:0;border-inline-start-width:0}.input{inline-size:100%;background:var(--surface-card);color:var(--ink);border:var(--edge) solid var(--line-control);border-radius:var(--radius-sm);padding:var(--s-2) var(--s-3);font-size:var(--type-body);transition:border-color var(--dur-ui) var(--ease-block)}.input:hover{border-color:var(--n-600)}.input:focus-visible{box-shadow:var(--focus-inner)}.input--area{resize:vertical;min-block-size:4rem;line-height:var(--leading-subhead)}.input--grow{resize:none;overflow-y:auto;min-block-size:0;max-block-size:calc(3lh + var(--s-2) * 2 + var(--edge) * 2)}.swatches{display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--swatch-track, 104px),1fr));gap:var(--s-1)}.field__label--sub{display:block;margin-block-start:var(--s-3);font-weight:500;color:var(--ink-3)}.chips{display:flex;flex-wrap:wrap;gap:var(--s-1)}.chip{font-size:var(--type-label);min-block-size:var(--ctrl-xs);padding:0 var(--s-2);border:var(--edge) solid var(--line-strong);border-radius:var(--radius-sm);cursor:pointer;background:var(--surface-card);color:var(--ink-2);box-shadow:var(--shadow-1);transition:transform var(--dur-tap) var(--ease-block),box-shadow var(--dur-tap) var(--ease-block),border-color var(--dur-tap) var(--ease-block),color var(--dur-tap) var(--ease-block),background var(--dur-tap) var(--ease-block)}.chip:hover{background:var(--surface-sunk);border-color:var(--line-control);color:var(--ink)}#pattern .chip{display:inline-flex;align-items:center;gap:var(--s-1)}.chips--rail .chip{padding:0;gap:0}.chips--rail .chip__name{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;overflow:hidden;white-space:nowrap;clip-path:inset(50%);border:0}#pattern .chip__thumb{inline-size:36px;block-size:36px;image-rendering:pixelated;border:var(--edge) solid var(--line-strong);flex:none}@media(pointer:coarse){#pattern .chip__thumb{inline-size:48px;block-size:48px}}.chip:active{transform:translateY(var(--lift));box-shadow:none}.chip[aria-pressed=true],.chip[aria-checked=true]{background:var(--surface-card);border-color:var(--accent);color:var(--ink);box-shadow:inset 0 0 0 var(--edge) var(--accent),var(--shadow-1)}@media(any-pointer:coarse){.chip{min-block-size:var(--ctrl-lg);font-size:var(--type-small)}}.chip:focus-visible{outline:var(--focus-w) solid var(--focus-ring);outline-offset:var(--focus-gap);box-shadow:var(--focus-inner),var(--shadow-1)}.chip[aria-pressed=true]:focus-visible,.chip[aria-checked=true]:focus-visible{box-shadow:var(--focus-inner),inset 0 0 0 var(--edge) var(--accent),var(--shadow-1)}.swatch{position:relative;display:grid;grid-template-columns:28px 1fr;justify-items:start;align-items:center;gap:var(--s-2);padding:var(--s-1) var(--s-2);text-align:start;background:var(--surface-card);color:var(--ink);border:var(--edge) solid var(--line-strong);border-radius:var(--radius-sm);cursor:pointer;min-block-size:var(--ctrl-md);transition:transform var(--dur-tap) var(--ease-block),border-color var(--dur-tap) var(--ease-block),background var(--dur-tap) var(--ease-block),box-shadow var(--dur-tap) var(--ease-block);box-shadow:var(--shadow-1)}.swatch:active{transform:translateY(var(--lift));box-shadow:none}.swatch[aria-checked=true]{border-color:var(--accent);background:var(--surface-card);box-shadow:inset 0 0 0 var(--edge) var(--accent),var(--shadow-1)}.swatch:hover:not([aria-checked=true]){background:var(--surface-sunk);border-color:var(--line-control)}.seg input:not(:checked)+span:hover{background:var(--surface-sunk);color:var(--ink)}.btn--ghost:hover:not(:disabled){background:var(--surface-sunk);border-color:var(--line-control)}.swatch:focus-visible{box-shadow:var(--focus-inner),var(--shadow-1)}.swatch[aria-checked=true]:focus-visible{box-shadow:var(--focus-inner),inset 0 0 0 var(--edge) var(--accent),var(--shadow-1)}.swatch__chip{display:grid;grid-template-rows:12px 1fr;inline-size:100%;max-inline-size:28px;aspect-ratio:1;box-shadow:inset 0 0 0 var(--edge) rgb(24 24 27 / 0.22);forced-color-adjust:none;--t: transparent}.swatch__chip::before,.swatch__chip::after{content:""}.swatch__chip::before{background:linear-gradient(var(--t) 0 0) no-repeat center / 56% 34%,var(--a)}.swatch__chip::after{background:linear-gradient(var(--b) 0 0) no-repeat center / 38% 52%,var(--c)}.swatch__chip--alpha::after{background:linear-gradient(var(--b) 0 0) no-repeat center / 38% 52%,var(--alpha-grid) 0 0 / 8px 8px}.swatch__name{inline-size:auto;overflow-wrap:break-word;font-size:var(--type-label);line-height:1.25;text-align:start}.swatch__tag{justify-self:end;font-size:var(--type-small);line-height:1;color:var(--ink-3)}.swatch:has(.swatch__tag){grid-template-columns:28px 1fr auto}.segmented{display:grid;grid-template-columns:repeat(4,1fr);gap:2px;background:var(--surface-sunk);border:var(--edge) solid var(--line);border-radius:var(--radius-sm);padding:2px}.segmented--wide{grid-template-columns:repeat(3,1fr)}.seg{position:relative}.seg input{position:absolute;opacity:0;inset:0;inline-size:100%;block-size:100%;margin:0;cursor:pointer}.seg span{display:grid;place-items:center;min-block-size:var(--ctrl-md);font-size:var(--type-small);font-variant-numeric:tabular-nums;border-radius:3px;background:transparent;color:var(--ink-2);transition:background var(--dur-tap) var(--ease-block),color var(--dur-tap) var(--ease-block),box-shadow var(--dur-tap) var(--ease-block)}.seg input:checked+span{background:var(--surface-card);color:var(--ink);font-weight:600;box-shadow:var(--shadow-1)}.seg input:focus-visible+span{outline:var(--focus-w) solid var(--focus-ring);outline-offset:var(--focus-gap);box-shadow:var(--focus-inner)}.seg input:disabled+span{cursor:not-allowed}.field:has(+.check--row){margin-block-end:0}.check--row{margin-block-start:var(--s-1)}.check{position:relative;display:flex;align-items:center;gap:var(--s-2);min-block-size:var(--ctrl-sm);cursor:pointer}@media(any-pointer:coarse){.check{min-block-size:var(--ctrl-lg)}}.check input{position:absolute;opacity:0;inline-size:1px;block-size:1px}.check__box{position:relative;inline-size:20px;block-size:20px;flex:none;border-radius:var(--radius-sm);background:var(--surface-card);box-shadow:0 0 0 var(--edge) var(--line-control);transition:background var(--dur-tap) var(--ease-block),box-shadow var(--dur-tap) var(--ease-block)}.check__box::after{content:"";position:absolute;inset-block-start:3px;inset-inline-start:6px;inline-size:6px;block-size:11px;border:solid var(--on-accent);border-width:0 2px 2px 0;rotate:45deg;opacity:0}.check input:checked+.check__box{background:var(--accent);box-shadow:0 0 0 var(--edge) var(--accent)}.check input:checked+.check__box::after{opacity:1}.check input:focus-visible+.check__box{outline:var(--focus-w) solid var(--focus-ring);outline-offset:var(--focus-gap);box-shadow:0 0 0 var(--edge) var(--line-control),var(--focus-inner)}.check input:checked:focus-visible+.check__box{box-shadow:0 0 0 var(--edge) var(--accent),var(--focus-inner)}.check__text{font-size:var(--type-small);color:var(--ink)}.colour-row{display:flex;align-items:end;gap:var(--s-2);flex-wrap:wrap}.colour{display:grid;gap:4px}.colour__name{font-size:var(--type-label);color:var(--ink-2)}.colour input[type=color]{inline-size:56px;block-size:44px;padding:0;border:var(--edge) solid var(--line-control);border-radius:var(--radius-sm);background:var(--surface-card);cursor:pointer;forced-color-adjust:none}.btn{font-size:var(--type-small);font-weight:600;letter-spacing:0;padding:var(--s-2) var(--s-4);min-block-size:var(--ctrl-lg);border:var(--edge) solid var(--line-strong);border-radius:var(--radius-sm);cursor:pointer;box-shadow:var(--shadow-1);transition:transform var(--dur-tap) var(--ease-block),background var(--dur-tap) var(--ease-block),border-color var(--dur-tap) var(--ease-block),box-shadow var(--dur-tap) var(--ease-block)}.btn:active:not(:disabled){transform:translateY(var(--lift));box-shadow:none}.btn:focus-visible{box-shadow:var(--focus-inner),var(--shadow-1)}.btn:active:not(:disabled):focus-visible{box-shadow:var(--focus-inner)}.btn:disabled{cursor:not-allowed;background:var(--surface-sunk);color:var(--ink-3);border-color:var(--line);box-shadow:none;transform:translateY(var(--lift))}.btn--primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn--primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn--secondary{background:var(--surface-card);color:var(--ink)}.btn--secondary:hover:not(:disabled){background:var(--surface-sunk);border-color:var(--line-control)}.btn--ghost{background:var(--surface-card);color:var(--ink-2)}#start-over[data-armed="1"]{border-color:var(--bad-ink);background:var(--bad-fill);color:var(--bad-ink)}.btn--tiny{font-size:var(--type-label);font-weight:500;padding:var(--s-1) var(--s-2);min-block-size:var(--ctrl-sm)}@media(any-pointer:coarse){.btn{min-block-size:var(--ctrl-lg)}.btn--tiny{min-block-size:var(--ctrl-lg)}}.stage-col{display:grid;align-content:start;min-inline-size:0}.stage-col>*+*{margin-block-start:var(--s-4)}@media(min-width:960px)and (min-height:900px){.stage-col{position:sticky;inset-block-start:var(--s-5)}}.stage{display:grid;align-content:start;min-inline-size:0;position:relative}.stage>*+*{margin-block-start:var(--s-3)}.export-panel{display:grid;align-content:start;gap:var(--s-2);padding-block-start:var(--s-3);border-block-start:var(--edge) solid var(--line)}.export>.field{margin-block-end:0}.export__size{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2) var(--s-3)}.export__size .field__label{margin-block-end:0;flex:0 0 auto}.export__size .segmented{flex:1 1 200px;min-inline-size:0}.gui{display:grid;gap:var(--s-3);justify-items:center;inline-size:fit-content;margin-block:0;margin-inline:auto;max-inline-size:100%;padding:var(--s-3);background:var(--surface-card);border:var(--edge) solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-3)}@media(min-width:960px){.gui{margin-inline:0}}.gui.is-broken{border-color:var(--ui-error)}.gui__face{background:var(--alpha-grid) 0 0 / var(--alpha-cell, 8px) var(--alpha-cell, 8px)}.gui.is-broken #qr-canvas{opacity:0.3}.gui__face{display:grid;place-items:center;inline-size:100%}#qr-canvas{image-rendering:pixelated;inline-size:auto;max-inline-size:100%;block-size:auto;animation:chunk-in var(--dur-panel) steps(8,end)}@keyframes chunk-in{from{clip-path:polygon(0 0,0 0,0 0)}to{clip-path:polygon(0 0,200% 0,0 200%)}}.gui__empty{display:grid;place-items:center;align-content:center;gap:var(--s-1);padding:var(--s-6) var(--s-4);text-align:center;background:var(--surface-card);border-radius:var(--radius-sm);color:var(--ink-2);min-inline-size:260px;min-block-size:320px}.gui__empty>*{max-inline-size:28ch;font-family:"Minecraft Seven",var(--font-ui);font-size:1.125rem;letter-spacing:0.02em;line-height:var(--leading-subhead)}.stage__error{background:var(--bad-fill);color:var(--bad-ink);padding:var(--s-2) var(--s-3);border-inline-start:3px solid var(--ui-error);border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:var(--type-small);line-height:var(--leading-subhead)}.stage__error:empty{margin-block-start:0;padding:0;border-inline-start-width:0}.stage__meta{font-size:var(--type-small);line-height:var(--leading-body);color:var(--ink-2)}.export{display:grid;gap:var(--s-3)}.export__actions{display:flex;gap:var(--s-3);flex-wrap:wrap}.export__actions .btn{flex:1 1 140px}.toast{position:fixed;inset-block-start:var(--s-4);inset-inline-end:var(--s-4);max-inline-size:calc(100vw - var(--s-6));translate:0 -8px;z-index:30;pointer-events:none;background:var(--surface-inverse);color:var(--ink-on-inverse);padding:var(--s-2) var(--s-3);border:var(--edge) solid var(--surface-inverse);border-radius:var(--radius-sm);box-shadow:var(--shadow-2);font-size:var(--type-small);opacity:0;transition:translate var(--dur-ui) var(--ease-block),opacity var(--dur-ui) var(--ease-block)}.toast:empty{padding:0;border-width:0}.toast.is-up{translate:0 0;opacity:1}}@layer utilities{[data-embed] .band--workbench{padding-block:var(--s-2);border:var(--edge) solid var(--line)}[data-embed]{--band-pad: var(--s-3)}[data-embed] .band__inner{max-inline-size:100%}[data-embed] .stage{position:relative}[data-embed] .stage-col>*+*{margin-block-start:var(--s-3)}[data-embed] .panel{padding:var(--s-3)}[hidden]{display:none!important}.vh{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(max-width:959px){.studio{display:flex;flex-direction:column;align-items:stretch;gap:var(--s-5)}.stage-col{display:contents}.stage{order:-1;position:sticky;inset-block-start:0;z-index:2;padding-block:var(--s-2)}:root{scroll-padding-block-start:calc(var(--pinned-h, calc(30vh + 130px)) + var(--s-2))}.stage::before{content:"";position:absolute;inset-block:0;inset-inline:calc(var(--band-pad) * -1);background:var(--surface-page);border-block-end:var(--edge) solid var(--line);z-index:-1}.stage .panel__legend{font-size:var(--type-body);margin-block-end:var(--s-2)}.stage .gui{padding:var(--s-3);gap:var(--s-2);inline-size:fit-content;margin-inline:auto}.stage__error{order:-1}.export-panel{order:1}}@media(max-width:760px){.band--workbench{padding-block:var(--s-4) var(--s-6)}.panel{padding:var(--s-3)}}@media(max-width:760px){.verify__target{inline-size:0;block-size:0;overflow:hidden;display:inline-block;vertical-align:bottom}.verify__line{flex:0 1 auto}}@media(max-width:760px),(max-height:899px){.export__actions{position:fixed;inset-inline:0;inset-block-end:0;z-index:25;margin:0;padding:var(--s-3);padding-block-end:max(var(--s-3),env(safe-area-inset-bottom));background:var(--surface-card);border-block-start:var(--edge) solid var(--line-strong);box-shadow:0 -2px 16px rgb(24 24 27 / 0.12)}body{padding-block-end:calc(var(--dock-reserve, 110px))}:root{scroll-padding-block-end:calc(var(--dock-h, 110px) + var(--s-2))}.export::after{content:"";display:block;block-size:4px}}@media(min-width:761px)and (max-height:899px){.export__actions{padding-inline:max(var(--band-pad),calc((100% - 1120px) / 2 + var(--band-pad)));justify-content:flex-end}.export__actions .btn{flex:0 1 200px}}@media(forced-colors:active){:focus-visible,.seg input:focus-visible+span,.check input:focus-visible+.check__box{outline:var(--edge) solid Highlight;outline-offset:3px}.seg input:focus-visible,.check input:focus-visible,#studio:focus{outline:none}.chip{border:1px solid CanvasText}.panel__step{border:1px solid CanvasText}.chip[aria-pressed=true],.chip[aria-checked=true]{background:Highlight;color:HighlightText;border-color:Highlight}.swatch{border-color:CanvasText}.swatch[aria-checked=true]{border-color:Highlight;box-shadow:none}.seg span{border:1px solid CanvasText}.seg input:checked+span{background:Highlight;color:HighlightText;border-color:Highlight}.check__box{border:2px solid CanvasText;box-shadow:none}.check__box::after{border-color:HighlightText}.check input:checked+.check__box{background:Highlight;border-color:Highlight}.stage__error:not(:empty),.field__count.is-over,.field__note.is-bad{border:1px solid CanvasText}}}@layer components{.panel__stephead{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:var(--s-2) var(--s-3)}.panel__stephead .panel__legend{margin-block:0}.panel__stephead--split>.btn{margin-inline-start:auto}#cta-field,#splash-field{padding-inline-start:var(--s-3);border-inline-start:var(--edge) solid var(--line-strong)}.panel__step{display:inline-grid;place-items:center;inline-size:1.5em;block-size:1.5em;margin-inline-end:0.55em;border-radius:var(--radius-sm);background:var(--n-200);color:var(--n-700);font-size:0.8em;font-weight:600;font-variant-numeric:tabular-nums;vertical-align:0.12em}.swatches--pair{--swatch-track: 168px}.swatches--pair .swatch__chip{grid-template-rows:1fr}.swatches--pair .swatch__chip::before{display:none}.swatches--palette{--swatch-track: 104px}.swatches--palette .swatch__chip{grid-template-rows:2fr 1fr}.swatches--palette .swatch__chip::after{background:var(--c)}.swatches--palette .swatch__chip--alpha::after{background:var(--alpha-grid) 0 0 / 4px 4px}@media(any-pointer:coarse){.swatch{min-block-size:var(--ctrl-lg)}}.colour-row{display:grid;grid-template-columns:1fr auto;gap:var(--s-2);margin-block-start:var(--s-2)}.colour-row>.colour{grid-column:1}.colour-row>.btn{grid-column:2;grid-row:1 / span 2;align-self:end}.tweak{margin-block-start:var(--s-1)}.tweak__summary{display:inline-flex;align-items:center;gap:var(--s-1);min-block-size:var(--ctrl-xs);padding-inline:2px;cursor:pointer;font-size:var(--type-label);color:var(--ink-2);list-style:none}.tweak__summary:hover{color:var(--ink)}.tweak__summary::-webkit-details-marker{display:none}.tweak__summary::before{content:"\25b8";font-size:var(--type-label)}.tweak[open] .tweak__summary::before{content:"\25be"}.tweak__summary:focus-visible{outline:var(--focus-w) solid var(--focus-ring);outline-offset:var(--focus-gap);border-radius:2px}.colour{display:grid;grid-template-columns:4.2em var(--ctrl-md) 1fr;align-items:center;gap:var(--s-2)}.colour__name{font-size:var(--type-label);color:var(--ink-2)}.colour__well{display:block;inline-size:var(--ctrl-md);block-size:var(--ctrl-md);padding:3px;border-radius:var(--radius-sm);background:var(--surface-card);box-shadow:inset 0 0 0 var(--edge) var(--line-control)}.colour__well input[type=color]{display:block;inline-size:100%;block-size:100%;padding:0;border:0;background:none;cursor:pointer}.colour__well input[type=color]::-webkit-color-swatch-wrapper{padding:0}.colour__well input[type=color]::-webkit-color-swatch{border:0}.colour__well input[type=color]::-moz-color-swatch{border:0}.colour__hex{inline-size:100%;min-inline-size:0;min-block-size:var(--ctrl-md);padding:var(--s-1) var(--s-2);background:var(--surface-card);color:var(--ink);border:0;border-radius:var(--radius-sm);box-shadow:inset 0 0 0 var(--edge) var(--line-control);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--type-label);text-transform:lowercase}.colour__hex:focus-visible{outline:var(--focus-w) solid var(--focus-ring);outline-offset:var(--focus-gap)}.colour__hex.is-bad{box-shadow:inset 0 0 0 var(--edge-strong) var(--ui-error);padding-inline-start:18px;background-image:linear-gradient(var(--ui-error) 0 0);background-repeat:no-repeat;background-size:3px 12px;background-position:7px center}@media(forced-colors:active){.colour__hex.is-bad{outline:2px dashed CanvasText;outline-offset:-3px}}.verify{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2) var(--s-3);margin-block-start:var(--s-3);min-inline-size:0}.verify__line{display:flex;flex-wrap:nowrap;align-items:baseline;gap:var(--s-2);margin:0;flex:1 1 0;min-inline-size:0}.verify__chip{padding:3px var(--s-2);border:var(--edge) solid var(--line);border-radius:999px;background:var(--surface-sunk);color:var(--ink-2);font-size:var(--type-label);font-weight:500;white-space:nowrap}.verify__chip::before{margin-inline-end:0.4em;font-weight:700}.verify__chip[data-state=ok]{background:var(--ok-fill);border-color:var(--ok-line);color:var(--ok-ink)}.verify__chip[data-state=ok]::before{content:"\2713"}.verify__chip[data-state=bad]{background:var(--bad-fill);border-color:var(--bad-line);color:var(--bad-ink)}.verify__chip[data-state=bad]::before{content:"\2715"}.verify__chip[data-state=busy]::before{content:"\22ef"}.verify__target{min-inline-size:0;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--type-label);color:var(--ink-2)}.verify__open{margin-inline-start:auto}.field__fix{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2);margin-block-start:var(--s-2);padding:var(--s-2) var(--s-3);background:var(--surface-sunk);border:var(--edge) solid var(--line);border-radius:var(--radius-sm);font-size:var(--type-label);line-height:var(--leading-body);color:var(--ink-2)}.field__fix code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:var(--surface-card);border:var(--edge) solid var(--line);border-radius:3px;padding:1px 4px;color:var(--ink)}}
</style><script>(function(){if(typeof FontFace!=="function"||!document.fonts)return;var K="7c1ea9f4d3b8206551af9e7d0c34bb62e8175a9036fd4c81";var P=[{"f":"Minecraft Ten","d":"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"},{"f":"Minecraft Seven","d":"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"}];for(var i=0;i<P.length;i++){try{var raw=atob(P[i].d);var b=new Uint8Array(raw.length);for(var j=0;j<raw.length;j++)b[j]=raw.charCodeAt(j)^K.charCodeAt(j%K.length)^j&255;var face=new FontFace(P[i].f,b.buffer,{display:"swap"});document.fonts.add(face);face.load()}catch(e){}}})();
</script>
<script>(function(){var q=new URLSearchParams(location.search);if(q.has("embed")||window.self!==window.top)document.documentElement.dataset.embed="";if(q.has("text"))document.documentElement.dataset.seed=q.get("text")})();
</script>
</head>
<body>
<h1 class="vh">Blockcode — Minecraft QR Studio Disclaimer</h1>
<main class="band band--workbench">
<div class="band__inner studio" id="studio" tabindex="-1">
<form class="panel" id="controls" autocomplete="off" aria-label="Poster settings">
<div class="panel__stephead panel__stephead--split">
<h2 class="panel__legend"><span class="panel__step" aria-hidden="true">1</span> Your link</h2>
<button type="button" class="btn btn--ghost btn--tiny" id="start-over" data-armed="0">Start over</button>
</div>
<div class="field">
<label class="field__label vh" for="qr-text">Text or link</label>
<textarea id="qr-text" class="input input--area" rows="2" spellcheck="false"
aria-describedby="char-help"
placeholder="https://minecraft.net">https://minecraft.net</textarea>
<p class="stage__error" id="error-msg" role="alert"></p>
<p class="field__fix" id="scheme-fix" hidden>
<span>That looks like a link. Add <code>https://</code> so phone cameras open it.</span>
<button type="button" class="btn btn--ghost btn--tiny" id="scheme-add">Add it</button>
</p>
<p class="field__meta">
<span class="field__count" id="char-help" hidden>
<span id="char-count" class="readout">21</span>
<span class="field__meta-sep" aria-hidden="true">/</span>
<span class="vh">of</span>
<span id="char-max" class="readout">1000</span>
<span class="field__hint">bytes</span>
</span>
</p>
</div>
<div class="panel__stephead">
<h2 class="panel__legend"><span class="panel__step" aria-hidden="true">2</span> Your message</h2>
<label class="check">
<input type="checkbox" id="cta-on" checked>
<span class="check__box" aria-hidden="true"></span>
<span class="check__text">Put a sign above the code</span>
</label>
</div>
<div class="field" id="cta-field">
<span class="field__label field__label--sub" id="cta-preset-label">Suggested</span>
<div class="chips" id="cta-presets" role="group" aria-labelledby="cta-preset-label"></div>
<div class="field__head">
<label class="field__label" for="cta-text">Sign text</label>
<p class="field__meta">
<span class="field__count" id="cta-count">
<span id="cta-len" class="readout">15</span>
<span class="field__meta-sep" aria-hidden="true">/</span>
<span class="vh">of</span>
<span class="readout" id="cta-max">48</span>
<span class="field__hint">characters</span>
</span>
</p>
</div>
<textarea id="cta-text" class="input input--area input--grow" rows="1" maxlength="48"
aria-describedby="cta-count">Scan to Support</textarea>
<p class="vh" id="cta-limit" role="status" aria-live="polite" aria-atomic="true"></p>
<span class="field__label field__label--sub" id="sign-label">Sign colour</span>
<div class="swatches swatches--palette" role="radiogroup" aria-labelledby="sign-label" id="sign-picker"></div>
<details class="tweak">
<summary class="tweak__summary">Custom sign colours</summary>
<div class="colour-row" role="group" aria-label="Custom sign colours">
<label class="colour">
<span class="colour__name">Sign</span>
<span class="colour__well"><input type="color" id="colour-banner" value="#52a535"></span>
<input type="text" class="colour__hex" id="hex-banner" value="#52a535" maxlength="7"
spellcheck="false" aria-label="Sign background hex">
</label>
<label class="colour">
<span class="colour__name">Text</span>
<span class="colour__well"><input type="color" id="colour-banner-text" value="#ffffff"></span>
<input type="text" class="colour__hex" id="hex-banner-text" value="#ffffff" maxlength="7"
spellcheck="false" aria-label="Sign text hex">
</label>
<button type="button" class="btn btn--ghost btn--tiny" id="sign-colour-reset">Reset<span class="vh"> sign colours to the preset</span></button>
</div>
</details>
<p class="field__note" id="sign-contrast-note" aria-live="polite" aria-atomic="true"></p>
</div>
<label class="check check--row">
<input type="checkbox" id="splash-on">
<span class="check__box" aria-hidden="true"></span>
<span class="check__text">Add a splash text</span>
</label>
<div class="field" id="splash-field" hidden>
<span class="field__label field__label--sub" id="splash-preset-label">Suggested</span>
<div class="chips" id="splash-presets" role="group" aria-labelledby="splash-preset-label"></div>
<label class="field__label" for="splash-text">Splash</label>
<input type="text" id="splash-text" class="input" maxlength="28" spellcheck="false"
aria-describedby="splash-count" value="Scan me!">
<p class="field__meta">
<span class="field__count" id="splash-count">
<span id="splash-len" class="readout">8</span>
<span class="field__meta-sep" aria-hidden="true">/</span>
<span class="vh">of</span>
<span class="readout">28</span>
<span class="field__hint">characters</span>
</span>
</p>
<span class="field__label field__label--sub" id="splash-place-label">Placement</span>
<div class="chips" role="radiogroup" aria-labelledby="splash-place-label" id="splash-place"></div>
</div>
<h2 class="panel__legend"><span class="panel__step" aria-hidden="true">3</span> The code</h2>
<div class="field">
<div class="field__head">
<span class="field__label field__label--sub" id="code-label">Which way round</span>
<span class="field__hint" aria-hidden="true">⚠ = test before posting</span>
</div>
<div class="swatches swatches--pair" role="radiogroup" aria-labelledby="code-label" id="code-picker"></div>
<p class="field__note" id="code-note" aria-live="polite" aria-atomic="true"></p>
<div class="field__head">
<span class="field__label field__label--sub" id="pattern-label">Texture</span>
<span class="field__hint" id="pattern-name"></span>
</div>
<div class="chips chips--rail" role="radiogroup" aria-labelledby="pattern-label" id="pattern"></div>
<details class="tweak">
<summary class="tweak__summary">Custom code colours</summary>
<div class="colour-row" role="group" aria-label="Custom code colours">
<label class="colour">
<span class="colour__name">Blocks</span>
<span class="colour__well"><input type="color" id="colour-dark" value="#3d3938"></span>
<input type="text" class="colour__hex" id="hex-dark" value="#3d3938" maxlength="7"
spellcheck="false" aria-label="Block colour hex">
</label>
<label class="colour">
<span class="colour__name">Ground</span>
<span class="colour__well"><input type="color" id="colour-light" value="#d0c5c0"></span>
<input type="text" class="colour__hex" id="hex-light" value="#d0c5c0" maxlength="7"
spellcheck="false" aria-label="Ground colour hex">
</label>
<button type="button" class="btn btn--ghost btn--tiny" id="colour-reset">Reset<span class="vh"> code colours to the preset</span></button>
</div>
</details>
<p class="field__note" id="contrast-note" aria-live="polite" aria-atomic="true"></p>
</div>
</form>
<div class="stage-col">
<section class="stage" aria-labelledby="preview-heading">
<h2 class="vh" id="preview-heading">Your poster</h2>
<figure class="gui" id="gui-frame">
<div class="gui__face">
<canvas id="qr-canvas" width="420" height="420" role="img"
aria-label="QR code preview"></canvas>
<p class="gui__empty" id="empty-state" hidden>Nothing to scan yet — write something and watch it build.</p>
</div>
</figure>
<div class="verify" id="verify">
<p class="verify__line">
<span class="verify__chip" id="verify-chip" data-state="idle"
role="status" aria-live="polite" aria-atomic="true">Checking…</span>
<span class="verify__target" id="verify-target"></span>
</p>
<a class="btn btn--ghost btn--tiny verify__open" id="test-link" href="#" target="_blank" rel="noopener noreferrer" hidden>Test link <span aria-hidden="true">↗</span><span class="vh"> (opens in a new tab)</span></a>
</div>
</section>
<section class="export-panel" aria-labelledby="export-heading">
<h2 class="panel__legend" id="export-heading">Download</h2>
<div class="export">
<div class="field export__size">
<span class="field__label" id="size-label">PNG size</span>
<div class="segmented segmented--wide" role="radiogroup" aria-labelledby="size-label"
aria-describedby="export-meta" id="size-picker">
<label class="seg"><input type="radio" name="size" value="512"><span>512</span></label>
<label class="seg"><input type="radio" name="size" value="1024" checked><span>1024</span></label>
<label class="seg"><input type="radio" name="size" value="2048"><span>2048</span></label>
</div>
</div>
<div class="export__actions">
<button type="button" class="btn btn--primary" id="dl-png">Download PNG</button>
<button type="button" class="btn btn--secondary" id="dl-svg">Download SVG</button>
<button type="button" class="btn btn--secondary" id="dl-share" hidden>Share</button>
</div>
<p class="stage__meta" id="export-meta">
<span id="export-meta-ready">PNG comes out <span id="export-meta-num" class="readout">1024 × 1024</span> px. SVG is vector — any size.</span>
<span id="export-meta-idle" hidden>Nothing to export yet — write something first.</span>
</p>
</div>
</section>
</div>
</div>
</main>
<div class="toast" id="toast" role="status"></div>
<footer class="vh">
<p>© Mojang Synergies AB. Minecraft is a trademark of Mojang Synergies AB.</p>
</footer>
<script>(function(root){"use strict";const ECC_LEVELS=["L","M","Q","H"];const ECC_FORMAT_BITS={L:1,M:0,Q:3,H:2};const ECC_CODEWORDS_PER_BLOCK=[[0,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[0,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[0,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[0,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]];const NUM_ERROR_CORRECTION_BLOCKS=[[0,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[0,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[0,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[0,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]];const ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";const MODE_NUMERIC={name:"numeric",indicator:1,ccBits:[10,12,14]};const MODE_ALPHANUMERIC={name:"alphanumeric",indicator:2,ccBits:[9,11,13]};const MODE_BYTE={name:"byte",indicator:4,ccBits:[8,16,16]};const PENALTY_N1=3;const PENALTY_N2=3;const PENALTY_N3=40;const PENALTY_N4=10;function eccIndex(ecc){const i=ECC_LEVELS.indexOf(ecc);if(i<0)throw new Error("Invalid ECC level: "+ecc+" (expected 'L', 'M', 'Q' or 'H')");return i}function assertVersion(version){if(!Number.isInteger(version)||version<1||version>40){throw new Error("Invalid QR version: "+version+" (expected an integer 1..40)")}}function getBit(value,i){return(value>>>i&1)!==0}function charCountBits(mode,version){const group=version<=9?0:version<=26?1:2;return mode.ccBits[group]}function rawDataModules(version){let result=(16*version+128)*version+64;if(version>=2){const numAlign=Math.floor(version/7)+2;result-=(25*numAlign-10)*numAlign-55;if(version>=7)result-=36}return result}function totalCodewords(version){return Math.floor(rawDataModules(version)/8)}function dataCodewords(version,ecc){const e=eccIndex(ecc);return totalCodewords(version)-ECC_CODEWORDS_PER_BLOCK[e][version]*NUM_ERROR_CORRECTION_BLOCKS[e][version]}const NUMERIC_RE=/^[0-9]*$/;const isAlphanumeric=text=>[...text].every(c=>ALPHANUMERIC_CHARSET.includes(c));function selectMode(text){if(NUMERIC_RE.test(text))return MODE_NUMERIC;if(isAlphanumeric(text))return MODE_ALPHANUMERIC;return MODE_BYTE}const UTF8=new TextEncoder;function charCount(mode,text,bytes){return mode===MODE_BYTE?bytes.length:text.length}function payloadBitLength(mode,text,bytes){if(mode===MODE_NUMERIC){const n=text.length;const rem=n%3;return 10*Math.floor(n/3)+(rem===1?4:rem===2?7:0)}if(mode===MODE_ALPHANUMERIC){const n=text.length;return 11*Math.floor(n/2)+6*(n%2)}return 8*bytes.length}function pushBits(bits,value,length){for(let i=length-1;i>=0;i--)bits.push(value>>>i&1)}function encodeSegment(mode,text,bytes,version){const bits=[];pushBits(bits,mode.indicator,4);pushBits(bits,charCount(mode,text,bytes),charCountBits(mode,version));if(mode===MODE_NUMERIC){for(let i=0;i<text.length;){const n=Math.min(3,text.length-i);pushBits(bits,parseInt(text.substr(i,n),10),n*3+1);i+=n}}else if(mode===MODE_ALPHANUMERIC){for(let i=0;i<text.length;){if(i+1<text.length){const pair=ALPHANUMERIC_CHARSET.indexOf(text.charAt(i))*45+ALPHANUMERIC_CHARSET.indexOf(text.charAt(i+1));pushBits(bits,pair,11);i+=2}else{pushBits(bits,ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)),6);i+=1}}}else{for(let i=0;i<bytes.length;i++)pushBits(bits,bytes[i],8)}return bits}function padToCapacity(bits,capacityCodewords){const capacityBits=capacityCodewords*8;pushBits(bits,0,Math.min(4,capacityBits-bits.length));pushBits(bits,0,(8-bits.length%8)%8);const out=new Uint8Array(capacityCodewords);for(let i=0;i<bits.length;i++){out[i>>>3]|=bits[i]<<7-(i&7)}for(let i=bits.length/8,pad=236;i<capacityCodewords;i++){out[i]=pad;pad=pad===236?17:236}return out}const GF_EXP=new Uint8Array(512);const GF_LOG=new Uint8Array(256);(function buildGaloisTables(){let x=1;for(let i=0;i<255;i++){GF_EXP[i]=x;GF_LOG[x]=i;x<<=1;if(x&256)x^=285}for(let i=255;i<512;i++)GF_EXP[i]=GF_EXP[i-255]})();function gfMul(a,b){if(a===0||b===0)return 0;return GF_EXP[GF_LOG[a]+GF_LOG[b]]}const generatorCache=new Map;function reedSolomonGenerator(degree){const cached=generatorCache.get(degree);if(cached)return cached;let result=new Uint8Array(degree);result[degree-1]=1;let root2=1;for(let i=0;i<degree;i++){for(let j=0;j<degree;j++){result[j]=gfMul(result[j],root2);if(j+1<degree)result[j]^=result[j+1]}root2=gfMul(root2,2)}generatorCache.set(degree,result);return result}function reedSolomonRemainder(data,degree){const gen=reedSolomonGenerator(degree);const result=new Uint8Array(degree);for(let i=0;i<data.length;i++){const factor=data[i]^result[0];result.copyWithin(0,1);result[degree-1]=0;for(let j=0;j<degree;j++)result[j]^=gfMul(gen[j],factor)}return result}function addEccAndInterleave(data,version,ecc){const e=eccIndex(ecc);const numBlocks=NUM_ERROR_CORRECTION_BLOCKS[e][version];const blockEccLen=ECC_CODEWORDS_PER_BLOCK[e][version];const rawCodewords=totalCodewords(version);const numShortBlocks=numBlocks-rawCodewords%numBlocks;const shortBlockDataLen=Math.floor(rawCodewords/numBlocks)-blockEccLen;const blocks=[];for(let i=0,k=0;i<numBlocks;i++){const len=shortBlockDataLen+(i<numShortBlocks?0:1);const dat=data.slice(k,k+len);k+=len;blocks.push({data:dat,ecc:reedSolomonRemainder(dat,blockEccLen)})}const result=new Uint8Array(rawCodewords);let pos=0;for(let i=0;i<=shortBlockDataLen;i++){for(let b=0;b<numBlocks;b++){if(i<shortBlockDataLen||b>=numShortBlocks)result[pos++]=blocks[b].data[i]}}for(let i=0;i<blockEccLen;i++){for(let b=0;b<numBlocks;b++)result[pos++]=blocks[b].ecc[i]}return result}function alignmentPatternPositions(version){if(version===1)return[];const numAlign=Math.floor(version/7)+2;const step=version===32?26:Math.ceil((version*4+4)/(numAlign*2-2))*2;const result=[6];for(let pos=version*4+10;result.length<numAlign;pos-=step){result.splice(1,0,pos)}return result}function Symbol_(version,ecc){this.version=version;this.ecc=ecc;this.size=version*4+17;this.modules=[];this.isFunction=[];for(let y=0;y<this.size;y++){this.modules.push(new Array(this.size).fill(false));this.isFunction.push(new Array(this.size).fill(false))}}Symbol_.prototype.setFunctionModule=function(x,y,isDark){this.modules[y][x]=isDark;this.isFunction[y][x]=true};Symbol_.prototype.drawFinderPattern=function(cx,cy){for(let dy=-4;dy<=4;dy++){for(let dx=-4;dx<=4;dx++){const x=cx+dx;const y=cy+dy;if(x<0||x>=this.size||y<0||y>=this.size)continue;const dist=Math.max(Math.abs(dx),Math.abs(dy));this.setFunctionModule(x,y,dist!==2&&dist!==4)}}};Symbol_.prototype.drawAlignmentPattern=function(cx,cy){for(let dy=-2;dy<=2;dy++){for(let dx=-2;dx<=2;dx++){this.setFunctionModule(cx+dx,cy+dy,Math.max(Math.abs(dx),Math.abs(dy))!==1)}}};Symbol_.prototype.drawFunctionPatterns=function(){const size=this.size;for(let i=0;i<size;i++){this.setFunctionModule(6,i,i%2===0);this.setFunctionModule(i,6,i%2===0)}this.drawFinderPattern(3,3);this.drawFinderPattern(size-4,3);this.drawFinderPattern(3,size-4);const align=alignmentPatternPositions(this.version);const n=align.length;for(let i=0;i<n;i++){for(let j=0;j<n;j++){const corner=i===0&&j===0||i===0&&j===n-1||i===n-1&&j===0;if(!corner)this.drawAlignmentPattern(align[i],align[j])}}this.drawFormatBits(0);this.drawVersionBits()};Symbol_.prototype.drawFormatBits=function(mask){const size=this.size;const data=ECC_FORMAT_BITS[this.ecc]<<3|mask;let rem=data;for(let i=0;i<10;i++)rem=rem<<1^(rem>>>9)*1335;const bits=((data<<10|rem)^21522)>>>0;for(let i=0;i<=5;i++)this.setFunctionModule(8,i,getBit(bits,i));this.setFunctionModule(8,7,getBit(bits,6));this.setFunctionModule(8,8,getBit(bits,7));this.setFunctionModule(7,8,getBit(bits,8));for(let i=9;i<15;i++)this.setFunctionModule(14-i,8,getBit(bits,i));for(let i=0;i<8;i++)this.setFunctionModule(size-1-i,8,getBit(bits,i));for(let i=8;i<15;i++)this.setFunctionModule(8,size-15+i,getBit(bits,i));this.setFunctionModule(8,size-8,true)};Symbol_.prototype.drawVersionBits=function(){if(this.version<7)return;let rem=this.version;for(let i=0;i<12;i++)rem=rem<<1^(rem>>>11)*7973;const bits=(this.version<<12|rem)>>>0;for(let i=0;i<18;i++){const bit=getBit(bits,i);const a=this.size-11+i%3;const b=Math.floor(i/3);this.setFunctionModule(a,b,bit);this.setFunctionModule(b,a,bit)}};Symbol_.prototype.drawCodewords=function(data){const size=this.size;let i=0;for(let right=size-1;right>=1;right-=2){if(right===6)right=5;for(let vert=0;vert<size;vert++){for(let j=0;j<2;j++){const x=right-j;const upward=(right+1&2)===0;const y=upward?size-1-vert:vert;if(!this.isFunction[y][x]&&i<data.length*8){this.modules[y][x]=getBit(data[i>>>3],7-(i&7));i++}}}}};Symbol_.prototype.applyMask=function(mask){for(let y=0;y<this.size;y++){for(let x=0;x<this.size;x++){if(this.isFunction[y][x])continue;let invert;switch(mask){case 0:invert=(x+y)%2===0;break;case 1:invert=y%2===0;break;case 2:invert=x%3===0;break;case 3:invert=(x+y)%3===0;break;case 4:invert=(Math.floor(x/3)+Math.floor(y/2))%2===0;break;case 5:invert=x*y%2+x*y%3===0;break;case 6:invert=(x*y%2+x*y%3)%2===0;break;case 7:invert=((x+y)%2+x*y%3)%2===0;break;default:throw new Error("Invalid mask: "+mask)}if(invert)this.modules[y][x]=!this.modules[y][x]}}};const FINDER_SEQUENCE=[true,false,true,true,true,false,true];Symbol_.prototype.penaltyScore=function(){const size=this.size;const m=this.modules;let score=0;for(let y=0;y<size;y++){let run=1;for(let x=1;x<size;x++){if(m[y][x]===m[y][x-1]){run++;if(run===5)score+=PENALTY_N1;else if(run>5)score+=1}else run=1}}for(let x=0;x<size;x++){let run=1;for(let y=1;y<size;y++){if(m[y][x]===m[y-1][x]){run++;if(run===5)score+=PENALTY_N1;else if(run>5)score+=1}else run=1}}for(let y=0;y<size-1;y++){for(let x=0;x<size-1;x++){const c=m[y][x];if(c===m[y][x+1]&&c===m[y+1][x]&&c===m[y+1][x+1])score+=PENALTY_N2}}const light=(x,y)=>x<0||x>=size||y<0||y>=size||!m[y][x];for(let y=0;y<size;y++){for(let x=0;x<=size-7;x++){let hit=true;for(let k2=0;k2<7;k2++){if(m[y][x+k2]!==FINDER_SEQUENCE[k2]){hit=false;break}}if(!hit)continue;let before=true;for(let k2=1;k2<=4;k2++)if(!light(x-k2,y)){before=false;break}let after=true;for(let k2=0;k2<4;k2++)if(!light(x+7+k2,y)){after=false;break}if(before||after)score+=PENALTY_N3}}for(let x=0;x<size;x++){for(let y=0;y<=size-7;y++){let hit=true;for(let k2=0;k2<7;k2++){if(m[y+k2][x]!==FINDER_SEQUENCE[k2]){hit=false;break}}if(!hit)continue;let before=true;for(let k2=1;k2<=4;k2++)if(!light(x,y-k2)){before=false;break}let after=true;for(let k2=0;k2<4;k2++)if(!light(x,y+7+k2)){after=false;break}if(before||after)score+=PENALTY_N3}}let dark=0;for(let y=0;y<size;y++){for(let x=0;x<size;x++)if(m[y][x])dark++}const total=size*size;const k=Math.floor(Math.abs(dark*2-total)*10/total);score+=k*PENALTY_N4;return score};function capacityForVersion(version,ecc){assertVersion(version);const bits=dataCodewords(version,ecc)*8-4-charCountBits(MODE_BYTE,version);return Math.max(0,Math.floor(bits/8))}function MAX_CAPACITY(ecc){return capacityForVersion(40,ecc)}function encode(text,opts){if(text===null||text===void 0)text="";text=String(text);const options=opts||{};let ecc=options.ecc===void 0?"M":options.ecc;eccIndex(ecc);const minVersion=options.minVersion===void 0?1:options.minVersion;const maxVersion=options.maxVersion===void 0?40:options.maxVersion;assertVersion(minVersion);assertVersion(maxVersion);if(minVersion>maxVersion){throw new Error("minVersion ("+minVersion+") exceeds maxVersion ("+maxVersion+")")}const maskOption=options.mask===void 0?"auto":options.mask;if(maskOption!=="auto"&&!(Number.isInteger(maskOption)&&maskOption>=0&&maskOption<=7)){throw new Error("Invalid mask: "+maskOption+" (expected 0..7 or 'auto')")}const boostEcc=options.boostEcc===void 0?true:!!options.boostEcc;const mode=selectMode(text);const bytes=mode===MODE_BYTE?UTF8.encode(text):[];const payloadBits=payloadBitLength(mode,text,bytes);let version=-1;for(let v=minVersion;v<=maxVersion;v++){if(4+charCountBits(mode,v)+payloadBits<=dataCodewords(v,ecc)*8){version=v;break}}if(version===-1){throw new Error("Text too long for QR version "+maxVersion+" at ECC level "+ecc)}if(boostEcc){const need=4+charCountBits(mode,version)+payloadBits;for(let i=eccIndex(ecc)+1;i<ECC_LEVELS.length;i++){if(need<=dataCodewords(version,ECC_LEVELS[i])*8)ecc=ECC_LEVELS[i]}}const bb=encodeSegment(mode,text,bytes,version);const dataBytes=padToCapacity(bb,dataCodewords(version,ecc));const allCodewords=addEccAndInterleave(dataBytes,version,ecc);const symbol=new Symbol_(version,ecc);symbol.drawFunctionPatterns();symbol.drawCodewords(allCodewords);let mask=maskOption;if(mask==="auto"){let best=Infinity;for(let m=0;m<8;m++){symbol.applyMask(m);symbol.drawFormatBits(m);const score=symbol.penaltyScore();if(score<best){best=score;mask=m}symbol.applyMask(m)}}symbol.applyMask(mask);symbol.drawFormatBits(mask);return{size:symbol.size,modules:symbol.modules,version,ecc,mask,mode:mode.name}}const QR={encode,MAX_CAPACITY,capacityForVersion};root.QR=QR;if(typeof module!=="undefined"&&module.exports)module.exports=QR})(typeof globalThis!=="undefined"?globalThis:this);
</script>
<script>(function(){"use strict";function hexToRgb(hex){const h=hex.replace("#","");const n=h.length===3?h.split("").map(c=>c+c).join(""):h;return[parseInt(n.slice(0,2),16),parseInt(n.slice(2,4),16),parseInt(n.slice(4,6),16)]}function channelLum(c){const s=c/255;return s<=.04045?s/12.92:Math.pow((s+.055)/1.055,2.4)}function luminance(hex){const[r,g,b]=hexToRgb(hex);return .2126*channelLum(r)+.7152*channelLum(g)+.0722*channelLum(b)}function contrast(a,b){const la=luminance(a);const lb=luminance(b);const hi=Math.max(la,lb);const lo=Math.min(la,lb);return(hi+.05)/(lo+.05)}const FIELD="#d0c5c0";const OFF_WHITE="#fcf5f1";const GREY_6="#262423";const DISCLAIMER_LINES=["If you use this code, we may earn","an affiliate commission."];const DISCLAIMER_TEXT=DISCLAIMER_LINES.join(" ");const DISCLAIMER_BAND=4;const DISCLAIMER_PAD=1;const VOID="#171615";const CODES=[{id:"light",name:"Dark on light",blurb:"Dark blocks on a light ground. Scans on anything.",dark:GREY_6,light:FIELD,inverted:false,swatch:[FIELD,GREY_6,FIELD],risky:false},{id:"dark",name:"Light on dark",blurb:"Light blocks on near-black. For dark layouts and overlays.",dark:FIELD,light:GREY_6,inverted:true,swatch:[GREY_6,FIELD,GREY_6],risky:true,riskNote:"Inverted codes trip up some older scanners \u2014 test yours before you post it."},{id:"black-alpha",name:"Black, no ground",blurb:"Flat black blocks, transparent behind. Drop onto your own art.",dark:"#000000",light:"#ffffff",inverted:false,transparent:true,swatch:[FIELD,"#000000",FIELD],risky:true,riskNote:"No ground means no quiet zone \u2014 put it on a plain light area or it will not scan."},{id:"white-alpha",name:"White, no ground",blurb:"Flat white blocks, transparent behind. For dark art.",dark:"#ffffff",light:VOID,inverted:true,transparent:true,swatch:[VOID,"#ffffff",VOID],risky:true,riskNote:"No ground means no quiet zone \u2014 put it on a plain dark area or it will not scan."}];const SIGNS=[{id:"grass",name:"Grass",blurb:"Overworld green. The brand's own CTA fill.",banner:"#52a535",bannerText:OFF_WHITE},{id:"water",name:"Water",blurb:"Deep water blue. Bright without going neon.",banner:"#0855db",bannerText:OFF_WHITE},{id:"dirt",name:"Dirt",blurb:"Packed earth. Warm and unshouty.",banner:"#805539",bannerText:OFF_WHITE},{id:"dark-grey",name:"Black",blurb:"Off Black. The quiet option.",banner:VOID,bannerText:FIELD},{id:"light-grey",name:"Light Grey",blurb:"Warm stone. The light sign \u2014 dark text, quiet against bright footage.",banner:"#aba09c",bannerText:GREY_6,bannerShadow:FIELD}];function mix(hex,target,amount){const a=hexToRgb(hex);const b=hexToRgb(target);return"#"+a.map((c,i)=>Math.round(c*(1-amount)+b[i]*amount)).map(c=>c.toString(16).padStart(2,"0")).join("")}function raisedAgainst(mark,ground){return luminance(mark)>luminance(ground)}function shadowFor(text,behind){if(!raisedAgainst(text,behind))return mix(text,"#ffffff",.75);return"#"+hexToRgb(text).map(c=>((c&252)>>2).toString(16).padStart(2,"0")).join("")}const LIT=23;const SHADE=23;const RELIEF_SPAN=LIT+SHADE;
const TOWARD=SHADE;const AWAY=LIT;function offset(hex,delta){const rgb=hexToRgb(hex);const room=delta>0?Math.min(delta,255-Math.max(...rgb)):Math.max(delta,-Math.min(...rgb));return"#"+rgb.map(c=>(c+room).toString(16).padStart(2,"0")).join("")}function bevelFor(module,field){const plate=luminance(module)>luminance(field)?module:field;return{hi:offset(plate,LIT),lo:offset(plate,-SHADE)}}const SVG_SCALE=16;const BEVEL_MIN_MODULE=8;const RELIEF_DIVISOR=8;function bevelStep(s){return s>=BEVEL_MIN_MODULE?Math.max(1,Math.round(s/RELIEF_DIVISOR)):0}const TOP=0,LEFT=1,BOTTOM=2,RIGHT=3;function bevelEdges(modules,size){const top=[];const bottom=[];const on=(x,y)=>x>=0&&y>=0&&x<size&&y<size&&Boolean(modules[y][x]);for(let y=0;y<size;y++){for(let x=0;x<size;x++){if(!modules[y][x])continue;if(!on(x,y-1))top.push([x,y,TOP]);if(!on(x,y+1))bottom.push([x,y,BOTTOM])}}return{top,bottom}}function edgeRect(edge,s,t,out){const x=edge[0]*s;const y=edge[1]*s;if(edge[2]===TOP)return[x,out?y-t:y,s,t];if(edge[2]===LEFT)return[out?x-t:x,y,t,s];if(edge[2]===BOTTOM)return[x,out?y+s:y+s-t,s,t];return[out?x+s:x+s-t,y,t,s]}function codeById(id){return CODES.find(c=>c.id===id)||CODES[0]}function signById(id){return SIGNS.find(c=>c.id===id)||SIGNS[0]}const SAFE_HEX=/^#[0-9a-f]{6}$/i;function safeColour(value,fallback){return SAFE_HEX.test(String(value))?String(value):fallback}function resolveColours(opt){const o=opt||{};const code=codeById(o.codeId);const sign=signById(o.signId);const codeOn=Boolean(o.codeOverride&&o.dark&&o.light);const signOn=Boolean(o.signOverride&&o.banner&&o.bannerText);const dark=codeOn?safeColour(o.dark,code.dark||VOID):code.dark||VOID;const light=codeOn?safeColour(o.light,code.light||FIELD):code.light||FIELD;const banner=signOn?safeColour(o.banner,sign.banner):sign.banner;const bannerText=signOn?safeColour(o.bannerText,sign.bannerText||OFF_WHITE):sign.bannerText||OFF_WHITE;const relief=bevelFor(dark,light);return{dark,light,transparent:!codeOn&&Boolean(code.transparent),hi:relief.hi,lo:relief.lo,inverted:luminance(dark)>luminance(light),banner,bannerText,bannerShadow:signOn?shadowFor(bannerText,banner):sign.bannerShadow||shadowFor(bannerText,banner),splashInk:SPLASH_INK,splashBox:SPLASH_BOX}}const CREEPER_FACE=["........",".##..##.",".##..##.","...##...","..####..","..####..","..#..#..","........"];const FACE_CELLS=CREEPER_FACE.length;const FACE_RING=1;const BOX_CELLS=FACE_CELLS+FACE_RING*2;function faceFeature(row,col){const r=row-FACE_RING;const c=col-FACE_RING;if(r<0||c<0||r>=FACE_CELLS||c>=FACE_CELLS)return false;return CREEPER_FACE[r][c]==="#"}function faceScale(size){const byArea=Math.floor(size*.036);const room=Math.floor((size-15)/BOX_CELLS);return Math.max(1,Math.min(Math.max(byArea,1),room))}function faceRect(size){const cell=faceScale(size);const side=cell*BOX_CELLS;if(side>size-15)return null;const start=Math.floor((size-side)/2);return{x:start,y:start,side,cell}}function withFace(qr,lightModules){const size=qr.size;const rect=faceRect(size);if(!rect)return qr;const modules=qr.modules.map(row=>row.slice());for(let r=0;r<BOX_CELLS;r++){for(let c=0;c<BOX_CELLS;c++){const feature=faceFeature(r,c);const on=lightModules?!feature:feature;for(let dy=0;dy<rect.cell;dy++){for(let dx=0;dx<rect.cell;dx++){modules[rect.y+r*rect.cell+dy][rect.x+c*rect.cell+dx]=on}}}}return{size,modules,version:qr.version,ecc:qr.ecc,mask:qr.mask,mode:qr.mode}}function isFinder(x,y,size){return x<7&&y<7||x>=size-7&&y<7||x<7&&y>=size-7}function paintFlat(ctx,x,y,s,colour){ctx.fillStyle=colour;ctx.fillRect(x,y,s,s)}const BANNER_BAND=10;const BANNER_CAP=2.3;const BANNER_CAP_MAX=3.4;const BANNER_PITCH=2.767;const BANNER_PAD=2;const BANNER_MAX_LINES=3;const BANNER_LEADING=BANNER_PITCH/BANNER_CAP;function bandNeedForCap(cap,lineCount){return BANNER_PAD*2+cap*(1+(lineCount-1)*BANNER_LEADING)}function capForBand(band,lineCount){return(band-BANNER_PAD*2)/(1+(lineCount-1)*BANNER_LEADING)}const BANNER_BAND_MAX=Math.ceil(bandNeedForCap(BANNER_CAP_MAX,BANNER_MAX_LINES));const BANNER_FONT='"Minecraft Ten", "Minecraft Seven", "Arial Black", "Trebuchet MS", sans-serif';const SPLASH_FONT='"Minecraft Seven", "Minecraft Ten", "Arial Black", "Trebuchet MS", sans-serif';function bannerBandPx(opt,totalModules){return Math.round(bannerBandModules(opt,totalModules)*opt.moduleSize)}function shadowDrop(px){return Math.max(1,Math.round(px/RELIEF_DIVISOR))}let measureCtx=null;function emWidth(text,font){if(!measureCtx){const c=typeof document!=="undefined"&&document.createElement("canvas");measureCtx=c&&c.getContext?c.getContext("2d"):null}if(!measureCtx)return text.length*.6;const probe=100;measureCtx.font=probe+"px "+(font||BANNER_FONT);return measureCtx.measureText(text).width/probe}function wrapBanner(text,totalModules){const words=String(text).trim().toUpperCase().split(/\s+/).filter(Boolean);if(!words.length)return[];const total=totalModules||BANNER_FIT_MODULES;let best=[words.join(" ")];let bestCap=capForWrap(best,total);for(let n=2;n<=Math.min(BANNER_MAX_LINES,words.length);n++){const cand=balanceLines(words,n);const cap=capForWrap(cand,total);if(cap>bestCap){bestCap=cap;best=cand}}return best}function balanceLines(words,parts){if(parts===1)return[words.join(" ")];let best=null;let bestW=Infinity;for(let i=1;i<=words.length-(parts-1);i++){const head=words.slice(0,i).join(" ");const tail=balanceLines(words.slice(i),parts-1);const w=Math.max(emWidth(head),...tail.map(emWidth));if(w<bestW){bestW=w;best=[head].concat(tail)}}return best}function capForWrap(lines,totalModules){const room=totalModules-BANNER_PAD*2;const widest=Math.max(...lines.map(emWidth));const byWidth=room/widest*CAP_PER_EM;const byBand=lines.length>1?BANNER_CAP:Math.min(BANNER_CAP_MAX,BANNER_BAND-BANNER_PAD*2);return Math.min(byWidth,byBand)}function fittedCap(lines,totalModules){if(!lines.length)return 0;const room=totalModules-BANNER_PAD*2;const widest=Math.max(...lines.map(emWidth));return Math.min(BANNER_CAP_MAX,room/widest*CAP_PER_EM)}function bannerBandModules(opt,totalModules){const text=opt&&String(opt.cta||"").trim();if(!text)return 0;const total=totalModules||BANNER_FIT_MODULES;const lines=wrapBanner(text,total);if(!lines.length)return 0;const need=bandNeedForCap(fittedCap(lines,total),lines.length);return Math.min(BANNER_BAND_MAX,Math.max(BANNER_BAND,Math.ceil(need)))}const BANNER_FIT_MODULES=37;function bannerBaselineOffset(capPx,dropPx){return(capPx-dropPx)/2}function bannerCapModules(lines,totalModules,bandModules){if(!lines.length)return 0;const band=bandModules||BANNER_BAND;const byBand=capForBand(band,lines.length);return Math.max(.6,Math.min(fittedCap(lines,totalModules),byBand))}const CAP_PER_EM=.7;function escapeXml(t){return String(t).replace(/[<>&"']/g,c=>({"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&apos;"})[c])}const SPLASH_INK="#ffff00";const SPLASH_BOX="#000000";const SPLASH_CAP=1.8;const SPLASH_PAD=.65;const SPLASH_MAX_CHARS=28;const SPLASH_PLACES=["top","middle","bottom"];function splashText(opt){const t=String(opt&&opt.splash||"").trim();return t?t.slice(0,SPLASH_MAX_CHARS):""}function splashPlace(opt){const p=String(opt&&opt.splashPlace||"");return SPLASH_PLACES.indexOf(p)>=0?p:SPLASH_PLACES[0]}function splashCapModules(text,roomModules){if(!text)return 0;const w=emWidth(String(text).toUpperCase(),SPLASH_FONT);if(!(w>0))return SPLASH_CAP;return Math.min(SPLASH_CAP,roomModules/w*CAP_PER_EM)}function splashBandModules(opt,totalModules){if(!splashText(opt))return 0;const total=totalModules||BANNER_FIT_MODULES;const cap=splashCapModules(splashText(opt),total-SPLASH_PAD*4);return Math.ceil(cap+SPLASH_PAD*2)}function frameOf(opt,total){const band=bannerBandModules(opt,total);const bar=splashBandModules(opt,total);const place=splashPlace(opt);const barTop=bar&&place==="top"?bar:0;const barMid=bar&&place==="middle"?bar:0;const barBottom=bar&&place==="bottom"?bar:0;const oy=barTop;const disclaimerTop=barTop+band+barMid+total+barBottom;return{band,barTop,barMid,barBottom,total,disclaimer:DISCLAIMER_BAND,disclaimerTop,width:total,height:disclaimerTop+DISCLAIMER_BAND,ox:0,oy,codeTop:oy+band+barMid}}function bannerPlank(ctx,col,ox,oy,widthPx,band){ctx.fillStyle=col.banner;ctx.fillRect(ox,oy,widthPx,band)}function drawBanner(ctx,opt,widthPx,col,ox,oy){const text=String(opt.cta||"").trim();if(!text)return;const s=opt.moduleSize;const total=widthPx/s;const band=bannerBandPx(opt,total);ox=ox||0;oy=oy||0;const lines=wrapBanner(text,total);const cap=bannerCapModules(lines,total,band/s);const fontPx=cap/CAP_PER_EM*s;const pitch=lines.length>1?cap*BANNER_LEADING*s:0;const drop=shadowDrop(s);ctx.font=fontPx+"px "+BANNER_FONT;ctx.textAlign="center";ctx.textBaseline="alphabetic";const cx=ox+widthPx/2;const first=oy+band/2-pitch*(lines.length-1)/2;lines.forEach((line,i)=>{const cy=first+pitch*i;const baseY=cy+bannerBaselineOffset(cap*s,drop);ctx.fillStyle=col.bannerShadow;ctx.fillText(line,cx,baseY+drop);ctx.fillStyle=col.bannerText;ctx.fillText(line,cx,baseY)})}function drawSplash(ctx,opt,col,frame,s){const text=splashText(opt);if(!text)return;const shout=text.toUpperCase();const place=splashPlace(opt);const bar=Math.round((place==="top"?frame.barTop:place==="middle"?frame.barMid:frame.barBottom)*s);if(!bar)return;const barY=place==="top"?0:place==="middle"?Math.round((frame.oy+frame.band)*s):Math.round((frame.codeTop+frame.total)*s);const barX=Math.round(frame.ox*s);const barW=Math.round(frame.total*s);ctx.fillStyle=col.splashBox;ctx.fillRect(barX,barY,barW,bar);const cap=splashCapModules(text,frame.total-SPLASH_PAD*4);ctx.save();ctx.translate(barX+barW/2,barY+bar/2);ctx.font=cap/CAP_PER_EM*s+"px "+SPLASH_FONT;ctx.textAlign="center";ctx.textBaseline="alphabetic";const baseY=bannerBaselineOffset(cap*s,0);ctx.fillStyle=col.splashInk;ctx.fillText(shout,0,baseY);ctx.restore()}function disclaimerFontModules(total){const widest=Math.max(...DISCLAIMER_LINES.map(line=>emWidth(line,SPLASH_FONT)));return Math.min(1.35,(total-DISCLAIMER_PAD*2)/widest)}function disclaimerColours(col){return{background:col.transparent?null:col.dark,ink:col.transparent?col.dark:col.light}}function drawDisclaimer(ctx,frame,s,col){const y=Math.round(frame.disclaimerTop*s);const height=Math.round(frame.disclaimer*s);const width=Math.round(frame.width*s);const fontSize=disclaimerFontModules(frame.total)*s;const linePitch=fontSize*1.05;const firstY=y+height/2-linePitch/2;const colours=disclaimerColours(col);ctx.save();if(colours.background){ctx.fillStyle=colours.background;ctx.fillRect(0,y,width,height)}ctx.fillStyle=colours.ink;ctx.font=fontSize+"px "+SPLASH_FONT;ctx.textAlign="center";ctx.textBaseline="middle";DISCLAIMER_LINES.forEach((line,index)=>{ctx.fillText(line,width/2,firstY+linePitch*index,width-DISCLAIMER_PAD*s*2)});ctx.restore()}function draw(ctx,qr,opt){const col=resolveColours(opt);const s=opt.moduleSize;const quiet=opt.quiet;const size=qr.size;const total=size+quiet*2;const modules=withFace(qr,luminance(col.dark)>=luminance(col.light)).modules;const band=bannerBandPx(opt,total);const widthPx=total*s;const frame=frameOf(opt,total);const ox=Math.round(frame.ox*s);const oy=Math.round(frame.oy*s);const mid=Math.round(frame.barMid*s);const codeTop=Math.round(frame.codeTop*s);ctx.canvas.width=Math.round(frame.width*s);ctx.canvas.height=Math.round(frame.height*s);ctx.imageSmoothingEnabled=false;if(!col.transparent){ctx.fillStyle=col.light;ctx.fillRect(ox,oy,widthPx,band+mid+total*s)}ctx.fillStyle=col.dark;for(let y=0;y<size;y++){for(let x=0;x<size;x++){if(!modules[y][x])continue;ctx.fillRect(ox+(x+quiet)*s,codeTop+(y+quiet)*s,s,s)}}const t=col.transparent?0:bevelStep(s);if(t){const edges=bevelEdges(modules,size);const rx=ox+quiet*s;const ry=codeTop+quiet*s;const up=raisedAgainst(col.dark,col.light);const out=!up;const paint=(list,fill)=>{ctx.fillStyle=fill;for(const e of list){const r=edgeRect(e,s,t,out);ctx.fillRect(rx+r[0],ry+r[1],r[2],r[3])}};paint(edges.top,up?col.hi:col.lo);paint(edges.bottom,up?col.lo:col.hi)}if(band){bannerPlank(ctx,col,ox,oy,widthPx,band);drawBanner(ctx,opt,widthPx,col,ox,oy)}drawSplash(ctx,opt,col,frame,s);drawDisclaimer(ctx,frame,s,col);return{total,pixel:widthPx,height:Math.round(frame.height*s),width:Math.round(frame.width*s),band,codeTop,originX:ox,originY:oy,frame,face:faceRect(size)}}function toSVG(qr,opt){const col=resolveColours(opt);const quiet=opt.quiet;const size=qr.size;const total=size+quiet*2;const modules=withFace(qr,luminance(col.dark)>=luminance(col.light)).modules;const text=opt.cta?String(opt.cta).trim():"";const band=bannerBandModules(opt,total);const frame=frameOf(opt,total);const height=frame.height;const width=frame.width;const codeTop=band+frame.barMid;let path="";for(let y=0;y<size;y++){for(let x=0;x<size;x++){if(!modules[y][x])continue;path+="M"+(x+quiet)+" "+(codeTop+y+quiet)+"h1v1h-1z"}}const edges=bevelEdges(modules,size);const t=col.transparent?0:bevelStep(SVG_SCALE)/SVG_SCALE;const up=raisedAgainst(col.dark,col.light);const strip=list=>list.map(e=>{const r=edgeRect([e[0]+quiet,e[1]+quiet+codeTop,e[2]],1,t,!up);return"M"+r[0].toFixed(4)+" "+r[1].toFixed(4)+"h"+r[2].toFixed(4)+"v"+r[3].toFixed(4)+"h-"+r[2].toFixed(4)+"z"}).join("");let banner="";if(text){const lines=wrapBanner(text,total);const cap=bannerCapModules(lines,total,band);const fontModules=cap/CAP_PER_EM;const tDrop=1/RELIEF_DIVISOR;const pitch=lines.length>1?cap*BANNER_LEADING:0;const first=band/2-pitch*(lines.length-1)/2;const runs=lines.map((line,i)=>{const cy=first+pitch*i;const baseY=cy+bannerBaselineOffset(cap,tDrop);const len=(emWidth(line)*fontModules).toFixed(4);const fit=' textLength="'+len+'" lengthAdjust="spacingAndGlyphs"';return'<text x="'+(total/2).toFixed(3)+'" y="'+(baseY+tDrop).toFixed(3)+'" fill="'+col.bannerShadow+'"'+fit+">"+escapeXml(line)+'</text><text x="'+(total/2).toFixed(3)+'" y="'+baseY.toFixed(3)+'" fill="'+col.bannerText+'"'+fit+">"+escapeXml(line)+"</text>"}).join("");banner='<rect width="'+frame.total+'" height="'+band+'" fill="'+col.banner+'"/><g font-family="'+escapeXml(BANNER_FONT)+'" font-size="'+fontModules.toFixed(3)+'" text-anchor="middle">'+runs+"</g>"}let splash="";const sText=splashText(opt);if(sText){const shout=escapeXml(sText.toUpperCase());const raw=sText.toUpperCase();const place=splashPlace(opt);const bar=place==="top"?frame.barTop:place==="middle"?frame.barMid:frame.barBottom;const barY=place==="top"?0:place==="middle"?frame.oy+frame.band:frame.codeTop+frame.total;const cap=splashCapModules(sText,frame.total-SPLASH_PAD*4);const fontModules=cap/CAP_PER_EM;const baseY=bannerBaselineOffset(cap,0);const len=(emWidth(raw,SPLASH_FONT)*fontModules).toFixed(4);const fit=' textLength="'+len+'" lengthAdjust="spacingAndGlyphs"';splash='<rect x="'+frame.ox.toFixed(4)+'" y="'+barY.toFixed(4)+'" width="'+frame.total+'" height="'+bar.toFixed(4)+'" fill="'+col.splashBox+'"/><g transform="translate('+(frame.ox+frame.total/2).toFixed(4)+" "+(barY+bar/2).toFixed(4)+')" font-family="'+escapeXml(SPLASH_FONT)+'" font-size="'+fontModules.toFixed(4)+'" text-anchor="middle"><text y="'+baseY.toFixed(4)+'" fill="'+col.splashInk+'"'+fit+">"+shout+"</text></g>"}const disclaimerFont=disclaimerFontModules(frame.total);const disclaimerPitch=disclaimerFont*1.05;const disclaimerFirstY=frame.disclaimerTop+frame.disclaimer/2-disclaimerPitch/2;const disclaimerColoursResolved=disclaimerColours(col);const disclaimer=(disclaimerColoursResolved.background?'<rect y="'+frame.disclaimerTop+'" width="'+frame.width+'" height="'+frame.disclaimer+'" fill="'+disclaimerColoursResolved.background+'"/>':"")+'<g fill="'+disclaimerColoursResolved.ink+'" font-family="'+escapeXml(SPLASH_FONT)+'" font-size="'+disclaimerFont.toFixed(4)+'" text-anchor="middle" dominant-baseline="middle">'+DISCLAIMER_LINES.map((line,index)=>'<text x="'+(frame.width/2).toFixed(4)+'" y="'+(disclaimerFirstY+disclaimerPitch*index).toFixed(4)+'" textLength="'+(emWidth(line,SPLASH_FONT)*disclaimerFont).toFixed(4)+'" lengthAdjust="spacingAndGlyphs">'+escapeXml(line)+"</text>").join("")+"</g>";const label="QR code"+(text?", captioned "+escapeXml(text):"")+(sText?", splash "+escapeXml(sText):"")+". "+escapeXml(DISCLAIMER_TEXT);return'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 '+width+" "+height+'" width="'+width*SVG_SCALE+'" height="'+height*SVG_SCALE+'" shape-rendering="crispEdges" role="img" aria-label="'+label+'">'+(col.transparent?"":'<rect x="'+frame.ox.toFixed(4)+'" y="'+frame.oy.toFixed(4)+'" width="'+frame.total+'" height="'+(band+frame.barMid+frame.total)+'" fill="'+col.light+'"/>')+(frame.ox||frame.oy?'<g transform="translate('+frame.ox.toFixed(4)+" "+frame.oy.toFixed(4)+')">':"")+'<path fill="'+col.dark+'" d="'+path+'"/>'+(t?'<path fill="'+(up?col.hi:col.lo)+'" d="'+strip(edges.top)+'"/><path fill="'+(up?col.lo:col.hi)+'" d="'+strip(edges.bottom)+'"/>':"")+banner+(frame.ox||frame.oy?"</g>":"")+splash+disclaimer+"</svg>"}globalThis.QRRender={CODES,SIGNS,codeById,signById,BANNER_BAND,BANNER_BAND_MAX,BANNER_MAX_LINES,bannerBandModules,wrapBanner,bannerCapModules,resolveColours,bevelFor,TOWARD,AWAY,bevelStep,bevelEdges,edgeRect,raisedAgainst,BEVEL_MIN_MODULE,RELIEF_DIVISOR,SPLASH_INK,SPLASH_BOX,SPLASH_CAP,SPLASH_MAX_CHARS,SPLASH_PLACES,BANNER_FONT,SPLASH_FONT,DISCLAIMER_TEXT,DISCLAIMER_BAND,CAP_PER_EM,emWidth,splashText,splashPlace,splashCapModules,splashBandModules,frameOf,shadowFor,shadowDrop,draw,toSVG,withFace,faceRect,contrast,luminance}})();
</script>
<script>(function(){"use strict";const $=id=>document.getElementById(id);function setText(node,str){const s=str==null?"":String(str);if(node.textContent!==s)node.textContent=s}function setAttr(node,name,value){if(node.getAttribute(name)!==value)node.setAttribute(name,value)}function hideRegion(node,hide,fallback){if(hide&&!node.hidden&&node.contains(document.activeElement)&&fallback){fallback.focus()}node.hidden=hide}const EMBEDDED=document.documentElement.hasAttribute("data-embed");function stackedFit(){return STACKED.matches&&!EMBEDDED}const STACKED=globalThis.matchMedia?globalThis.matchMedia("(max-width: 959px)"):{matches:false};const el={text:$("qr-text"),charCount:$("char-count"),charMax:$("char-max"),codePicker:$("code-picker"),codeNote:$("code-note"),signPicker:$("sign-picker"),ctaOn:$("cta-on"),ctaField:$("cta-field"),ctaText:$("cta-text"),ctaLen:$("cta-len"),ctaCount:$("cta-count"),ctaLimit:$("cta-limit"),ctaMax:$("cta-max"),ctaPresets:$("cta-presets"),splashOn:$("splash-on"),splashField:$("splash-field"),splashText:$("splash-text"),splashLen:$("splash-len"),splashPresets:$("splash-presets"),splashPlace:$("splash-place"),pattern:$("pattern"),patternName:$("pattern-name"),colourDark:$("colour-dark"),colourLight:$("colour-light"),colourReset:$("colour-reset"),hexDark:$("hex-dark"),hexLight:$("hex-light"),contrastNote:$("contrast-note"),colourBanner:$("colour-banner"),colourBannerText:$("colour-banner-text"),signColourReset:$("sign-colour-reset"),hexBanner:$("hex-banner"),hexBannerText:$("hex-banner-text"),signContrastNote:$("sign-contrast-note"),canvas:$("qr-canvas"),gui:$("gui-frame"),empty:$("empty-state"),error:$("error-msg"),dlPng:$("dl-png"),dlSvg:$("dl-svg"),dlShare:$("dl-share"),verify:$("verify"),verifyChip:$("verify-chip"),verifyTarget:$("verify-target"),testLink:$("test-link"),schemeFix:$("scheme-fix"),schemeAdd:$("scheme-add"),startOver:$("start-over"),charHelp:$("char-help"),sizePicker:$("size-picker"),exportMeta:$("export-meta-num"),exportReady:$("export-meta-ready"),exportIdle:$("export-meta-idle"),toast:$("toast")};const EXPORT_SIZES=[512,1024,2048];const PATTERNS=[{id:"auto",label:"Auto",hint:"the default; the encoder picks for you"},{id:"0",label:"Gravel",hint:"a fine, evenly scattered grain"},{id:"1",label:"Sandstone",hint:"horizontal beds and layers"},{id:"2",label:"Fence",hint:"upright, regularly spaced posts"},{id:"3",label:"Vines",hint:"a diagonal, trailing grain"},{id:"4",label:"Bricks",hint:"staggered, brick-tiled slabs"},{id:"5",label:"Bars",hint:"a crafted, open lattice"},{id:"6",label:"Ore",hint:"scattered specks in stone"},{id:"7",label:"Cobble",hint:"tumbled, irregular stone"}];function patternMask(id){return PATTERNS.some(p=>p.id===id)&&id!=="auto"?Number(id):"auto"}const state={codeId:"light",signId:"grass",cta:"",splash:"",splashPlace:"bottom",pattern:"auto",codeOverride:false,dark:"#262423",light:"#d0c5c0",signOverride:false,banner:"#52a535",bannerText:"#fcf5f1",exportSize:1024,fittedModule:12,pendingCode:null,pendingSign:null,qr:null};const ECC="H";const MIN_VERSION=3;const QUIET=4;const MODULE_MIN=4;const MODULE_FLOOR=2;const MODULE_MAX=24;const encoder=new TextEncoder;function byteLength(text){return encoder.encode(text).length}function charLimit(){return QR.MAX_CAPACITY(ECC)}function buildRadioGroup(host,items,current,onPick){host.innerHTML="";items.forEach(item=>{const btn=document.createElement("button");btn.type="button";btn.className="swatch";btn.setAttribute("role","radio");btn.setAttribute("aria-checked",String(item.id===current));btn.tabIndex=item.id===current?0:-1;btn.dataset.id=item.id;if(item.blurb&&item.blurb!==item.name)btn.title=item.blurb;const chip=document.createElement("span");chip.className="swatch__chip";chip.setAttribute("aria-hidden","true");if(item.swatch){chip.style.setProperty("--a",item.swatch[0]);chip.style.setProperty("--b",item.swatch[1]);chip.style.setProperty("--c",item.swatch[2]||item.swatch[0])}if(item.transparent)chip.classList.add("swatch__chip--alpha");btn.appendChild(chip);const label=document.createElement("span");label.className="swatch__name";label.textContent=item.name;btn.appendChild(label);if(item.risky){const tag=document.createElement("span");tag.className="swatch__tag";tag.textContent="\u26A0";tag.setAttribute("aria-hidden","true");btn.appendChild(tag);const warn=document.createElement("span");warn.className="vh";warn.textContent=" \u2014 may not scan on older readers";btn.appendChild(warn)}btn.addEventListener("click",()=>choose(item.id));host.appendChild(btn)});function choose(id){markRadios(host,id);onPick(id)}bindRadioKeys(host,choose)}function markRadios(host,current){host.querySelectorAll('[role="radio"]').forEach(b=>{const on=b.dataset.id===current;b.setAttribute("aria-checked",String(on));b.tabIndex=on?0:-1})}function bindRadioKeys(host,choose){host.onkeydown=e=>{const keys=["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"];if(!keys.includes(e.key))return;const btns=[...host.querySelectorAll('[role="radio"]')];const i=btns.indexOf(document.activeElement);if(!btns.length||i<0)return;e.preventDefault();let next;if(e.key==="Home")next=0;else if(e.key==="End")next=btns.length-1;else if(e.key==="ArrowRight"||e.key==="ArrowDown")next=(i+1)%btns.length;else next=(i-1+btns.length)%btns.length;choose(btns[next].dataset.id);btns[next].focus()}}function activeCode(){return QRRender.codeById(state.codeId)}function activeSign(){return QRRender.signById(state.signId)}function adoptCodeColours(){const c=activeCode();state.codeOverride=false;state.dark=c.dark;state.light=c.light;el.colourDark.value=state.dark;el.colourLight.value=state.light}function adoptSignColours(){const g=activeSign();state.signOverride=false;state.banner=g.banner;state.bannerText=g.bannerText;el.colourBanner.value=state.banner;el.colourBannerText.value=state.bannerText}function refreshSignChips(){el.signPicker.querySelectorAll(".swatch").forEach(btn=>{const chip=btn.querySelector(".swatch__chip");if(!chip||!QRRender.signById(btn.dataset.id))return;const c=QRRender.resolveColours({...drawOptions(state.fittedModule,state.codeOverride),signId:btn.dataset.id,signOverride:false});chip.style.setProperty("--a",c.banner);chip.style.setProperty("--t",c.bannerText);chip.style.setProperty("--b",c.dark);chip.style.setProperty("--c",c.light);chip.classList.toggle("swatch__chip--alpha",Boolean(c.transparent))})}function syncStyleUi(){const code=activeCode();markRadios(el.codePicker,state.codeId);markRadios(el.signPicker,state.signId);refreshSignChips();const notes=[];if(state.codeOverride)notes.push("Your own colours.");else if(code.risky)notes.push(code.riskNote);setText(el.codeNote,notes.join(" "))}const CONTRAST_FLOOR=4.5;function usableCodeOverride(){return state.codeOverride&&QRRender.contrast(state.dark,state.light)>=CONTRAST_FLOOR}function checkContrast(){if(!state.codeOverride){setText(el.contrastNote,"");el.contrastNote.classList.remove("is-bad");return true}const ratio=QRRender.contrast(state.dark,state.light);const ok=ratio>=CONTRAST_FLOOR;setText(el.contrastNote,ratio.toFixed(1)+":1 \u2014 "+(ok?"plenty of contrast.":"too close. Scanners will choke."));el.contrastNote.classList.toggle("is-bad",!ok);return ok}function checkSignContrast(){if(!state.signOverride){setText(el.signContrastNote,mergeNote());el.signContrastNote.classList.remove("is-bad");return true}const ratio=QRRender.contrast(state.bannerText,state.banner);const ok=ratio>=4.5;setText(el.signContrastNote,ratio.toFixed(1)+":1 \u2014 "+(ok?"easy to read.":"too close. The text will disappear."));el.signContrastNote.classList.toggle("is-bad",!ok);return ok}const MERGE_FLOOR=1.5;function mergeNote(){const col=QRRender.resolveColours(drawOptions(1,usableCodeOverride()));const ratio=QRRender.contrast(col.banner,col.light);if(ratio>=MERGE_FLOOR)return"";return"This sign is nearly the same tone as the code's ground ("+ratio.toFixed(2)+":1), so the band will not read as a separate panel. The caption stays legible; the poster just reads as one block."}let timer=null;function scheduleRender(){clearTimeout(timer);timer=setTimeout(render,150)}function showError(msg){setText(el.error,msg||"");el.gui.classList.toggle("is-broken",Boolean(msg))}function inlineChrome(node){const cs=getComputedStyle(node);return(parseFloat(cs.paddingLeft)||0)+(parseFloat(cs.paddingRight)||0)+(parseFloat(cs.borderLeftWidth)||0)+(parseFloat(cs.borderRightWidth)||0)}function previewBox(){const face=el.canvas.parentElement;const gui=face&&face.parentElement;const stage=gui&&gui.parentElement;if(!face||!gui||!stage)return 0;const cs=getComputedStyle(stage);const width=stage.clientWidth-(parseFloat(cs.paddingLeft)||0)-(parseFloat(cs.paddingRight)||0)-inlineChrome(gui)-inlineChrome(face);return width}const PREVIEW_CHROME=430;function previewHeightBox(){const h=window.innerHeight||0;if(!(h>0))return 0;if(stackedFit())return Math.round(h*.3);return Math.max(160,h-PREVIEW_CHROME)}function previewSupersample(){const dpr=window.devicePixelRatio||1;return Number.isInteger(dpr)&&dpr>=2?Math.min(dpr,3):1}function fittedModuleSize(total,extent){const box=previewBox();const hBox=previewHeightBox();const byHeight=hBox>0?Math.floor(hBox/(extent||total)):Infinity;if(!(box>0))return 12;const byWidth=Math.max(MODULE_MIN,Math.min(MODULE_MAX,Math.floor(box/total)));const fitted=Math.max(MODULE_FLOOR,Math.min(byWidth,byHeight));state.fittedModule=fitted;return fitted}function render(){const text=el.text.value;const used=byteLength(text);const limit=charLimit();setText(el.charCount,String(used));setText(el.charMax,String(limit));el.charHelp.hidden=used<limit*.75;el.charCount.parentElement.classList.toggle("is-over",used>limit);paintPatternThumbs();if(!text.trim()){state.qr=null;idleReason="empty";holdFrame();el.empty.hidden=false;el.canvas.hidden=true;setVerify("idle","","");showError("");setExportEnabled(false);updateExportMeta();return}if(used>limit){showError("That's too much to carve into blocks. A code holds "+limit+" bytes at the correction level this studio uses \u2014 trim "+(used-limit)+" to fit.");setVerify("idle","","");state.qr=null;idleReason="over";setExportEnabled(false);updateExportMeta();return}let qr;try{qr=QR.encode(text,{ecc:ECC,minVersion:MIN_VERSION,boostEcc:false,mask:patternMask(state.pattern)})}catch(err){if(typeof console!=="undefined")console.error(err);showError("Couldn't build a code from that. Check for unusual characters, or try shorter text.");state.qr=null;idleReason="fail";setExportEnabled(false);updateExportMeta();return}showError("");state.qr=qr;el.empty.hidden=true;el.canvas.hidden=false;const usableOverride=state.codeOverride&&checkContrast();const total=qr.size+QUIET*2;const bandModules=QRRender.bannerBandModules({cta:state.cta},total);const fitted=fittedModuleSize(total,total+bandModules+QRRender.DISCLAIMER_BAND);const k=previewSupersample();const opt=drawOptions(fitted*k,usableOverride);const ctx=el.canvas.getContext("2d");const out=QRRender.draw(ctx,qr,opt);el.canvas.style.inlineSize=out.pixel/k+"px";const ALPHA_CELL_MIN=6;const ALPHA_CELL_MAX=10;el.gui.style.setProperty("--alpha-cell",Math.min(ALPHA_CELL_MAX,Math.max(ALPHA_CELL_MIN,Math.round(fitted)))+"px");syncStyleUi();updateExportMeta();setExportEnabled(true);updateTestLink(text);verifyScan(text,qr);saveState();const encoded=text.trim().replace(/\s+/g," ");const shown=encoded.length>48?encoded.slice(0,48)+"\u2026":encoded;setAttr(el.canvas,"aria-label","QR code for "+shown+". Version "+qr.version+", "+qr.ecc+" error correction, "+activeCode().name+" code, creeper face cut into the centre."+(state.cta?" Sign reads: "+state.cta+".":"")+" Affiliate disclosure: "+QRRender.DISCLAIMER_TEXT)}function drawOptions(moduleSize,override){return{moduleSize,quiet:QUIET,codeId:state.codeId,signId:state.signId,codeOverride:state.codeOverride&&Boolean(override),dark:state.dark,light:state.light,signOverride:state.signOverride,banner:state.banner,bannerText:state.bannerText,cta:state.cta,splash:state.splash,splashPlace:state.splashPlace}}function setExportEnabled(on){el.dlPng.disabled=!on;el.dlSvg.disabled=!on}function exportScale(){if(!state.qr)return{scale:1,px:0,total:0};const total=state.qr.size+QUIET*2;const scale=Math.max(1,Math.floor(state.exportSize/total));return{scale,px:scale*total,total}}function exportDims(){const{px,scale,total}=exportScale();const band=Math.round(QRRender.bannerBandModules({cta:state.cta},total)*scale);return{w:px,h:px+band+QRRender.DISCLAIMER_BAND*scale}}let idleReason="empty";const EXPORT_IDLE={empty:"Nothing to export yet \u2014 write something first.",over:"Nothing to export yet \u2014 trim the text until it fits.",fail:"Nothing to export yet \u2014 that text won't encode."};function updateExportMeta(){const has=Boolean(state.qr);el.exportReady.hidden=!has;el.exportIdle.hidden=has;if(!has)setText(el.exportIdle,EXPORT_IDLE[idleReason]||EXPORT_IDLE.empty);if(!has)return;const d=exportDims();setText(el.exportMeta,d.w+" \xD7 "+d.h)}function fileStem(){const text=el.text.value.trim();let label="";const m=text.match(/^https?:\/\/([^/?#]+)/i);if(m)label=m[1].replace(/^www\./i,"");else label=text;label=label.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").toLowerCase().slice(0,32);const stamp=new Date().toLocaleDateString("en-CA");return"blockcode-"+(label||"qr")+"-"+stamp}function saveBlob(blob,name){const url=URL.createObjectURL(blob);const a=document.createElement("a");a.href=url;a.download=name;document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(url),1e3)}function toast(msg){clearTimeout(toast._t);clearTimeout(toast._c);setText(el.toast,msg);el.toast.classList.add("is-up");toast._t=setTimeout(()=>{el.toast.classList.remove("is-up");toast._c=setTimeout(()=>setText(el.toast,""),400)},2600)}function withPngBlob(btn,busyLabel,done){if(!state.qr)return;const was=btn.textContent;btn.disabled=true;setText(btn,busyLabel);const restore2=()=>{btn.disabled=false;setText(btn,was)};const{scale}=exportScale();const c=document.createElement("canvas");const ctx=c.getContext("2d");QRRender.draw(ctx,state.qr,drawOptions(scale,state.codeOverride&&checkContrast()));c.toBlob(blob=>{restore2();if(!blob)return toast("Couldn't build that PNG.");done(blob,c.width)},"image/png")}el.dlPng.addEventListener("click",()=>{withPngBlob(el.dlPng,"Saving\u2026",(blob,w)=>{saveBlob(blob,fileStem()+"-"+w+".png");toast("PNG saved \u2014 "+w+"px")})});if(typeof navigator!=="undefined"&&navigator.canShare&&navigator.share){el.dlShare.hidden=false;el.dlShare.addEventListener("click",()=>{withPngBlob(el.dlShare,"Sharing\u2026",(blob,w)=>{const file=new File([blob],fileStem()+"-"+w+".png",{type:"image/png"});if(!navigator.canShare({files:[file]})){saveBlob(blob,file.name);return toast("PNG saved \u2014 "+w+"px")}navigator.share({files:[file]}).then(()=>toast("Shared"),()=>{})})})}el.dlSvg.addEventListener("click",()=>{if(!state.qr)return;const svg=QRRender.toSVG(state.qr,drawOptions(16,state.codeOverride&&checkContrast()));saveBlob(new Blob([svg],{type:"image/svg+xml"}),fileStem()+".svg");toast("SVG saved \u2014 flat colours for max scannability")});const HEX=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;function normaliseHex(raw){const m=String(raw).trim().match(HEX);if(!m)return null;const h=m[1].toLowerCase();return"#"+(h.length===3?h.split("").map(c=>c+c).join(""):h)}const HEX_ERROR="Not a hex colour. Use six digits, like #52a535.";function bindHex(field,well,apply){const note=document.createElement("span");note.className="vh";note.id=field.id+"-err";note.setAttribute("role","status");note.setAttribute("aria-live","polite");field.insertAdjacentElement("afterend",note);const described=(field.getAttribute("aria-describedby")||"").split(/\s+/).filter(Boolean);described.push(note.id);field.setAttribute("aria-describedby",described.join(" "));function mark(bad){field.classList.toggle("is-bad",bad);field.setAttribute("aria-invalid",String(bad));setText(note,bad?HEX_ERROR:"")}field.addEventListener("input",()=>{const hex=normaliseHex(field.value);mark(!hex&&field.value.trim()!=="");if(!hex)return;well.value=hex;apply()});field.addEventListener("blur",()=>{field.value=well.value;mark(false)});well.addEventListener("input",()=>{field.value=well.value;mark(false)})}function syncHexFields(){el.hexDark.value=el.colourDark.value;el.hexLight.value=el.colourLight.value;el.hexBanner.value=el.colourBanner.value;el.hexBannerText.value=el.colourBannerText.value}let detector=null;if(typeof BarcodeDetector==="function"&&BarcodeDetector.getSupportedFormats){BarcodeDetector.getSupportedFormats().then(formats=>{if(!formats.includes("qr_code"))return;try{detector=new BarcodeDetector({formats:["qr_code"]});if(restored)render()}catch(e){}},()=>{})}let verifySeq=0;function densityNote(qr,suffix,unbacked){if(!qr)return"";if(unbacked&&suffix){if(qr.version<=6)return"Code checks out \u2014 background is yours";if(qr.version<=14)return"Code checks out \u2014 fine at poster size";return"Code checks out \u2014 very dense, post it big"}if(qr.version<=6)return suffix?"Scans":"Easy scan";if(qr.version<=14)return suffix?"Scans \u2014 fine at poster size":"Fine at poster size";return suffix?"Scans \u2014 very dense, post it big":"Very dense \u2014 post it big"}function holdFrame(){const r=el.canvas.hidden?null:el.canvas.getBoundingClientRect();const w=r&&r.width?r.width:0;const h=r&&r.height?r.height:0;if(w>0&&h>0){el.empty.style.inlineSize=Math.round(w)+"px";el.empty.style.blockSize=Math.round(h)+"px"}}function setVerify(stateName,label,target){el.verifyChip.dataset.state=stateName;setText(el.verifyChip,label);setText(el.verifyTarget,target);el.verify.hidden=!label}function looksLikeUrl(text){return/^https?:\/\//i.test(text.trim())}function updateTestLink(text){const ok=looksLikeUrl(text);el.testLink.hidden=!ok;if(ok)el.testLink.href=text.trim()}function verifyScan(text,qr){const seq=++verifySeq;const code=activeCode();const unbacked=Boolean(code.transparent)&&!state.codeOverride;const opens=looksLikeUrl(text)?"Opens "+text.trim():"";setVerify("info",densityNote(qr,false,unbacked),opens);if(!detector)return;detector.detect(unbacked?proofCanvas(el.canvas,code.light):el.canvas).then(found=>{if(seq!==verifySeq)return;if(found.some(f=>f.rawValue===text)){setVerify("ok",densityNote(qr,true,unbacked),opens)}else{setVerify("bad","Couldn't read it back","Try more contrast between your two code colours.")}}).catch(()=>{})}function proofCanvas(src,fill){const c=document.createElement("canvas");c.width=src.width;c.height=src.height;const x=c.getContext("2d");x.fillStyle=fill;x.fillRect(0,0,c.width,c.height);x.drawImage(src,0,0);return c}const BARE_DOMAIN=/^[\w-]+(\.[\w-]+)+(\/|$)/;function syncSchemeFix(text){const t=text.trim();el.schemeFix.hidden=!(t&&!looksLikeUrl(t)&&BARE_DOMAIN.test(t))}const STORE="blockcode-disclaimer.v1";let restored=false;function saveState(){if(!restored)return;try{localStorage.setItem(STORE,JSON.stringify({text:el.text.value,codeId:state.codeId,signId:state.signId,codeOverride:state.codeOverride,dark:state.dark,light:state.light,signOverride:state.signOverride,banner:state.banner,bannerText:state.bannerText,ctaOn:el.ctaOn.checked,ctaText:el.ctaText.value,splashOn:el.splashOn.checked,splashText:el.splashText.value,splashPlace:state.splashPlace,pattern:state.pattern,exportSize:state.exportSize}))}catch(e){}}function loadState(){try{const raw=localStorage.getItem(STORE);if(!raw)return null;return JSON.parse(raw)}catch(e){return null}}const DEMO_TEXT="https://minecraft.net";let demoUntouched=false;el.text.addEventListener("focus",()=>{if(demoUntouched&&el.text.value===DEMO_TEXT)el.text.select()});el.text.addEventListener("input",()=>{demoUntouched=false;syncSchemeFix(el.text.value);scheduleRender()});el.schemeAdd.addEventListener("click",()=>{el.text.value="https://"+el.text.value.trim();el.schemeFix.hidden=true;el.text.focus();render()});bindHex(el.hexDark,el.colourDark,()=>{state.codeOverride=true;state.dark=el.colourDark.value;state.light=el.colourLight.value;checkSignContrast();syncStyleUi();scheduleRender()});bindHex(el.hexLight,el.colourLight,()=>{state.codeOverride=true;state.dark=el.colourDark.value;state.light=el.colourLight.value;checkSignContrast();syncStyleUi();scheduleRender()});bindHex(el.hexBanner,el.colourBanner,()=>{state.signOverride=true;state.banner=el.colourBanner.value;state.bannerText=el.colourBannerText.value;checkSignContrast();scheduleRender()});bindHex(el.hexBannerText,el.colourBannerText,()=>{state.signOverride=true;state.banner=el.colourBanner.value;state.bannerText=el.colourBannerText.value;checkSignContrast();scheduleRender()});let armTimer=0;function disarmReset(){clearTimeout(armTimer);armTimer=0;el.startOver.dataset.armed="0";setText(el.startOver,"Start over")}let ctaEdited=false;function resetAll(){try{localStorage.removeItem(STORE)}catch(e){}ctaEdited=false;state.codeId="light";state.signId="grass";state.exportSize=1024;el.text.value=DEMO_TEXT;demoUntouched=true;el.ctaOn.checked=true;el.ctaText.value="Scan to Support";state.cta="Scan to Support";hideRegion(el.ctaField,false,el.ctaOn);el.splashOn.checked=false;el.splashText.value="Scan me!";state.splash="";state.splashPlace="bottom";state.pattern="auto";buildPatterns();buildSplashControls();hideRegion(el.splashField,true,el.splashOn);const size=el.sizePicker.querySelector('input[value="1024"]');if(size)size.checked=true;adoptCodeColours();adoptSignColours();syncHexFields();syncCtaUi();syncSplashUi();syncStyleUi();checkContrast();checkSignContrast();syncSchemeFix(el.text.value);render();toast("Back to defaults")}el.startOver.addEventListener("click",()=>{if(el.startOver.dataset.armed!=="1"){el.startOver.dataset.armed="1";setText(el.startOver,"Clear everything?");clearTimeout(armTimer);armTimer=setTimeout(disarmReset,4e3);return}disarmReset();resetAll()});el.startOver.addEventListener("blur",disarmReset);el.sizePicker.addEventListener("change",e=>{const px=Number(e.target.value);if(!EXPORT_SIZES.includes(px))return;state.exportSize=px;updateExportMeta();saveState()});el.ctaOn.addEventLis
tener("change",()=>{const on=el.ctaOn.checked;hideRegion(el.ctaField,!on,el.ctaOn);state.cta=on?el.ctaText.value.trim():"";syncCtaUi();scheduleRender()});el.ctaText.addEventListener("input",()=>{ctaEdited=true;state.cta=el.ctaOn.checked?el.ctaText.value.trim():"";syncCtaUi();scheduleRender()});el.ctaText.addEventListener("beforeinput",e=>{if(e.inputType!=="insertLineBreak"&&e.inputType!=="insertParagraph")return;e.preventDefault();const box=el.ctaText;if(box.value.length>=box.maxLength&&box.selectionStart===box.selectionEnd)return;box.setRangeText(" ",box.selectionStart,box.selectionEnd,"end");box.dispatchEvent(new Event("input",{bubbles:true}))});el.splashOn.addEventListener("change",()=>{const on=el.splashOn.checked;hideRegion(el.splashField,!on,el.splashOn);state.splash=on?el.splashText.value.trim():"";syncSplashUi();scheduleRender();saveState()});el.splashText.addEventListener("input",()=>{state.splash=el.splashOn.checked?el.splashText.value.trim():"";syncSplashUi();scheduleRender();saveState()});[el.colourDark,el.colourLight].forEach(input=>input.addEventListener("input",()=>{state.codeOverride=true;state.dark=el.colourDark.value;state.light=el.colourLight.value;checkSignContrast();syncStyleUi();scheduleRender()}));el.colourReset.addEventListener("click",()=>{adoptCodeColours();syncHexFields();checkContrast();checkSignContrast();syncStyleUi();scheduleRender()});[el.colourBanner,el.colourBannerText].forEach(input=>input.addEventListener("input",()=>{state.signOverride=true;state.banner=el.colourBanner.value;state.bannerText=el.colourBannerText.value;checkSignContrast();syncStyleUi();scheduleRender()}));el.signColourReset.addEventListener("click",()=>{adoptSignColours();syncHexFields();checkSignContrast();syncStyleUi();scheduleRender()});let lastBox=0;function maybeRefit(){const box=Math.round(previewBox())*1e4+Math.round(previewHeightBox());if(box===lastBox)return;lastBox=box;if(state.qr)scheduleRender()}function syncOverlayInsets(){const stacked=STACKED.matches;const stage=el.canvas.closest(".stage");const dock=document.querySelector(".export__actions");const pinned=stacked&&stage?Math.ceil(stage.getBoundingClientRect().height):0;const docked=dock&&getComputedStyle(dock).position==="fixed"?Math.ceil(dock.getBoundingClientRect().height):0;const root=document.documentElement.style;root.setProperty("--pinned-h",pinned+"px");root.setProperty("--dock-h",docked+"px");root.setProperty("--dock-reserve",(docked?docked+8:0)+"px")}function onLayoutChange(){maybeRefit();syncOverlayInsets();growCta()}if(typeof ResizeObserver==="function"){new ResizeObserver(onLayoutChange).observe(el.canvas.parentElement);const dock=document.querySelector(".export__actions");if(dock)new ResizeObserver(syncOverlayInsets).observe(dock)}globalThis.addEventListener("resize",onLayoutChange);const CTA_PRESETS=["Scan to Support","Support My Content","Check Out My Minecraft Picks","Minecraft Recommendations","Scan for Minecraft Finds","Support Me"];function syncCtaUi(){if(el.ctaText.value.includes("\n")){const box=el.ctaText;const at=box.selectionStart;const head=box.value.slice(0,at).replace(/\n+/g," ").length;box.value=box.value.replace(/\n+/g," ");box.setSelectionRange(head,head)}const used=el.ctaText.value.length;setText(el.ctaLen,String(used));growCta();el.ctaCount.hidden=used<el.ctaText.maxLength*.75;const full=used>=el.ctaText.maxLength;el.ctaCount.classList.toggle("is-over",full);setText(el.ctaLimit,ctaEdited&&full?"Sign text is full at "+el.ctaText.maxLength+" characters. Delete some to type more.":"");setText(el.ctaMax,String(el.ctaText.maxLength));markPresets(el.ctaPresets,el.ctaText.value)}function growCta(){const box=el.ctaText;if(!box.offsetParent)return;box.style.height="auto";box.style.height=box.scrollHeight+(box.offsetHeight-box.clientHeight)+"px"}function buildPresets(host,copies,onPick){host.innerHTML="";copies.forEach(copy=>{const b=document.createElement("button");b.type="button";b.className="chip";b.textContent=copy;b.setAttribute("aria-pressed","false");b.addEventListener("click",()=>onPick(copy));host.appendChild(b)})}function markPresets(host,value){host.querySelectorAll(".chip").forEach(c=>{c.setAttribute("aria-pressed",String(c.textContent===value.trim()))})}function buildCtaPresets(){buildPresets(el.ctaPresets,CTA_PRESETS,copy=>{el.ctaText.value=copy;state.cta=el.ctaOn.checked?copy:"";syncCtaUi();scheduleRender()})}const SPLASH_PRESETS=["Scan me!","100% blocky!","Also try Redstone!","It works!","No creepers were harmed!","Point your phone here!"];function syncSplashUi(){setText(el.splashLen,String(el.splashText.value.length));markPresets(el.splashPresets,el.splashText.value);markRadios(el.splashPlace,QRRender.splashPlace(state))}function buildSplashPresets(){buildPresets(el.splashPresets,SPLASH_PRESETS,copy=>{el.splashText.value=copy;state.splash=el.splashOn.checked?copy:"";syncSplashUi();scheduleRender();saveState()})}function buildChipRadios(host,items,current,onPick){host.innerHTML="";const choose=id=>{markRadios(host,id);onPick(id)};items.forEach(item=>{const b=document.createElement("button");b.type="button";b.className="chip";b.setAttribute("role","radio");b.dataset.id=item.id;b.textContent=item.label;b.addEventListener("click",()=>choose(item.id));host.appendChild(b)});markRadios(host,current);bindRadioKeys(host,choose)}const SPLASH_PLACE_LABELS={top:"Top",middle:"Middle",bottom:"Bottom"};function buildSplashPlaces(){buildChipRadios(el.splashPlace,QRRender.SPLASH_PLACES.map(id=>({id,label:SPLASH_PLACE_LABELS[id]||id})),QRRender.splashPlace(state),id=>{state.splashPlace=id;scheduleRender();saveState()})}function buildPatterns(){buildChipRadios(el.pattern,PATTERNS,state.pattern,id=>{state.pattern=id;syncPatternName();scheduleRender();saveState()});PATTERNS.forEach(p=>{const btn=el.pattern.querySelector('[data-id="'+p.id+'"]');if(!btn)return;btn.textContent="";btn.title=p.label;const name=document.createElement("span");name.className="chip__name";name.textContent=p.label;btn.appendChild(name);const say=document.createElement("span");say.className="vh";say.textContent=" \u2014 "+p.hint+".";btn.appendChild(say)});syncPatternName();thumbKey="";paintPatternThumbs()}function syncPatternName(){const hit=PATTERNS.find(p=>p.id===state.pattern);setText(el.patternName,hit?hit.label:"")}function foldRailForEmbed(){if(!EMBEDDED)return;const head=el.patternName.closest(".field__head");const tweak=el.pattern.nextElementSibling;const summary=tweak&&tweak.querySelector(".tweak__summary");if(!head||!summary)return;summary.after(head,el.pattern);setText(summary,"Pattern and custom colours")}const THUMB_MODULES=12;let thumbKey="";function paintPatternThumbs(){if(!el.pattern)return;const text=el.text.value.trim()||DEMO_TEXT;const col=QRRender.resolveColours(drawOptions(1,state.codeOverride&&checkContrast()));const key=text+"|"+col.dark+"|"+col.light;if(key===thumbKey)return;thumbKey=key;PATTERNS.forEach(p=>{const btn=el.pattern.querySelector('[data-id="'+p.id+'"]');if(!btn)return;let cv=btn.querySelector(".chip__thumb");if(!cv){cv=document.createElement("canvas");cv.className="chip__thumb";cv.setAttribute("aria-hidden","true");btn.insertBefore(cv,btn.firstChild)}let qr;try{qr=QR.encode(text,{ecc:ECC,minVersion:MIN_VERSION,boostEcc:false,mask:patternMask(p.id)})}catch(e){cv.hidden=true;return}cv.hidden=false;cv.width=THUMB_MODULES;cv.height=THUMB_MODULES;const x=cv.getContext("2d");x.fillStyle=col.light;x.fillRect(0,0,THUMB_MODULES,THUMB_MODULES);x.fillStyle=col.dark;const off=Math.floor((qr.size-THUMB_MODULES)/2);for(let r=0;r<THUMB_MODULES;r++)for(let c=0;c<THUMB_MODULES;c++)if(qr.modules[off+r][off+c])x.fillRect(c,r,1,1)})}function buildSplashControls(){buildSplashPresets();buildSplashPlaces()}function restore(){const saved=loadState();if(!saved)return;if(typeof saved.text==="string"&&saved.text)el.text.value=saved.text;if(QRRender.CODES.some(c=>c.id===saved.codeId))state.codeId=saved.codeId;if(QRRender.SIGNS.some(c=>c.id===saved.signId))state.signId=saved.signId;if(typeof saved.ctaText==="string")el.ctaText.value=saved.ctaText.slice(0,el.ctaText.maxLength);if(typeof saved.ctaOn==="boolean")el.ctaOn.checked=saved.ctaOn;if(typeof saved.splashText==="string")el.splashText.value=saved.splashText.slice(0,QRRender.SPLASH_MAX_CHARS);if(typeof saved.splashOn==="boolean")el.splashOn.checked=saved.splashOn;if(QRRender.SPLASH_PLACES.indexOf(saved.splashPlace)>=0)state.splashPlace=saved.splashPlace;if(PATTERNS.some(p=>p.id===saved.pattern))state.pattern=saved.pattern;if(EXPORT_SIZES.includes(saved.exportSize)){state.exportSize=saved.exportSize;const pick=el.sizePicker.querySelector('input[value="'+saved.exportSize+'"]');if(pick)pick.checked=true}const code=validColourPair(saved.dark,saved.light,"dark","light");const sign=validColourPair(saved.banner,saved.bannerText,"banner","bannerText");state.pendingCode=saved.codeOverride&&code?code:null;state.pendingSign=saved.signOverride&&sign?sign:null}function validColourPair(a,b,keyA,keyB){const x=normaliseHex(a);const y=normaliseHex(b);if(!x||!y)return null;const out={};out[keyA]=x;out[keyB]=y;return out}function loadPosterFonts(){if(!document.fonts||!document.fonts.load)return;Promise.all([document.fonts.load('16px "Minecraft Ten"'),document.fonts.load('16px "Minecraft Seven"')]).then(()=>render()).catch(()=>{})}function init(){setText(el.charMax,String(charLimit()));restore();restored=true;const seed=document.documentElement.dataset.seed;if(typeof seed==="string"&&seed.trim()&&seed.length<=charLimit()){el.text.value=seed}demoUntouched=el.text.value===DEMO_TEXT;buildRadioGroup(el.codePicker,QRRender.CODES,state.codeId,id=>{state.codeId=id;adoptCodeColours();syncHexFields();checkContrast();checkSignContrast();syncStyleUi();scheduleRender()});buildRadioGroup(el.signPicker,QRRender.SIGNS,state.signId,id=>{state.signId=id;adoptSignColours();syncHexFields();checkSignContrast();syncStyleUi();scheduleRender()});buildCtaPresets();buildSplashControls();buildPatterns();foldRailForEmbed();adoptCodeColours();adoptSignColours();if(state.pendingCode){state.codeOverride=true;state.dark=state.pendingCode.dark;state.light=state.pendingCode.light;el.colourDark.value=state.dark;el.colourLight.value=state.light}if(state.pendingSign){state.signOverride=true;state.banner=state.pendingSign.banner;state.bannerText=state.pendingSign.bannerText;el.colourBanner.value=state.banner;el.colourBannerText.value=state.bannerText}state.cta=el.ctaOn.checked?el.ctaText.value.trim():"";hideRegion(el.ctaField,!el.ctaOn.checked,el.ctaOn);state.splash=el.splashOn.checked?el.splashText.value.trim():"";hideRegion(el.splashField,!el.splashOn.checked,el.splashOn);syncHexFields();syncCtaUi();syncSplashUi();syncStyleUi();checkContrast();checkSignContrast();syncSchemeFix(el.text.value);render();loadPosterFonts();syncOverlayInsets()}if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",init)}else{init()}})();
</script>
</body>
</html>
"></iframe>