@layer reset{*,*:before,*:after{box-sizing:inherit}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box;scrollbar-gutter:stable}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin-block:0}body{margin:0;padding:0;min-height:100vh;line-height:1.25}h1,h2,h3,h4,button,input,label{line-height:1.1}p{margin-block:0;text-wrap:pretty}td,th{text-align:left;text-wrap:pretty;vertical-align:top}ul:not(.list-default),ol:not(.list-default){margin:0;padding:0;list-style:none}h1,h2,h3,h4{text-wrap:balance}a:not([class]){text-decoration-skip-ink:auto;color:currentColor}figure{margin-inline:0;display:block}img,picture{max-width:100%;display:block}input,button,textarea,select{font-family:inherit;font-size:inherit}textarea:not([rows]){min-height:10em}:target{scroll-margin-block:5ex}@media screen and (prefers-reduced-motion:reduce),(update:slow){*{background-attachment:initial!important;animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}}:root{--step--2: clamp(.7813rem, .7736rem + .0341vw, .8rem);--step--1: clamp(.9375rem, .9119rem + .1136vw, 1rem);--step-0: clamp(1.125rem, 1.0739rem + .2273vw, 1.25rem);--step-1: clamp(1.35rem, 1.2631rem + .3864vw, 1.5625rem);--step-2: clamp(1.62rem, 1.4837rem + .6057vw, 1.9531rem);--step-3: clamp(1.944rem, 1.7405rem + .9044vw, 2.4414rem);--step-4: clamp(2.3328rem, 2.0387rem + 1.3072vw, 3.0518rem);--step-5: clamp(2.7994rem, 2.384rem + 1.8461vw, 3.8147rem)}.text-label{font-size:var(--step--2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-justify{text-align:justify}:root{--color-primary: #434343;--color-primary-hover: #7c7c7c;--color-secondary: #353e4a;--color-secondary-hover: #ff3e78;--color-highlight: #36c253;--color-highlight-light: #a4e1ac;--color-instructional: #2563eb;--border-color: #e2e8f0;--border-radius: .375rem;--bg-color: #f8fafc;--text-color: #1e293b;--text-muted: #64748b;--success-color: #10b981;--error-color: #ef4444;--warning-color: #f8cb00;--warning-hover: #f8cb00;--button-tertiary: #efefef;--button-active-background: #36c253;--button-hover-background: rgba(67, 67, 67, .04);--scan-bulb-color: rgba(255, 255, 255, .95);--scan-bulb-glow: rgba(255, 255, 255, .6);--canvas-bg: #ffffff;--sidebar-width: 340px}*,*:before,*:after{box-sizing:inherit}html{box-sizing:border-box}body{font-size:16px;font-weight:400;line-height:1.5;color:var(--text-color);scrollbar-gutter:stable;background-color:var(--bg-color);font-family:IBM Plex Mono,monospace}body::-webkit-scrollbar-thumb{background:var(--color-primary)}@supports not selector(::-webkit-scrollbar){body{scrollbar-color:var(--color-primary) white}}input,button,select,textarea{appearance:none;color:var(--text-color)}input,textarea{font-size:16px}button,label.label-button{text-transform:lowercase}button:not(:disabled):active,label.label-button:active{transform:scale(.98)}ul.list-default{padding-inline-start:1em}a{&:hover,&:focus-visible{color:#fff;background-color:var(--color-primary)}}.icon{height:1em;width:auto;color:currentColor;display:inline-block;vertical-align:middle}.highlighted{border-radius:.25em;padding:.05em .25em;color:var(--color-primary);background-color:var(--color-highlight-light)}.privacy-notice{text-wrap:balance;margin-block-end:1em;font-size:var(--step--2)}.slitscanner{display:grid;grid-template-areas:"header" "instructions" "upload" "canvas" "controls";gap:1rem;padding:1rem;min-height:100vh}.sidebar{display:contents}.scanner-header{grid-area:header}.instructions-section{grid-area:instructions}.upload-section{grid-area:upload}.canvas-area{grid-area:canvas}.controls-panel{grid-area:controls}.logo{img{max-width:100%}}.scanner-header p{margin-block-start:1em;color:var(--text-muted)}.upload-section{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.file-input{display:none}.accordion-trigger{display:flex;width:100%;align-items:center;justify-content:space-between;gap:.5rem;padding:.75rem 1rem;cursor:pointer;color:var(--color-primary);border:1px solid var(--color-primary);border-radius:var(--border-radius);background:none;transition:background-color .2s,border-color .2s;font-weight:500;font-size:.9rem;font-family:inherit;&.accordion-trigger--secondary{border-color:var(--border-color)}}.accordion-trigger:hover{border-color:var(--color-primary);background-color:var(--button-hover-background)}.accordion-trigger:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.accordion-trigger[aria-expanded=true]{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-color:transparent}.accordion-label{display:inline-flex;align-items:center;gap:.5rem}.accordion-arrow{flex-shrink:0;transition:transform .25s ease}.accordion-trigger[aria-expanded=true] .accordion-arrow{transform:rotate(180deg)}#text-controls{display:flex;gap:.75rem;border-top:none;flex-basis:100%;margin-bottom:.25rem;flex-direction:column;margin-block-start:-1rem;padding:.75rem 1rem 1rem;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-left:1px solid var(--color-primary);border-right:1px solid var(--color-primary);border-bottom:1px solid var(--color-primary)}#text-controls[hidden]{display:none}#instructions-panel{display:flex;flex-direction:column;gap:.75rem;padding:.75rem 1rem 1rem;border:1px solid var(--border-color);border-top:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px}#instructions-panel[hidden]{display:none}#instructions-panel ol{font-size:.85rem;padding-left:1.25rem}#instructions-panel li{margin-bottom:.5rem}.text-area-input{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);font-family:inherit;resize:vertical;min-height:3rem}.text-area-input:hover{border-color:var(--color-primary)}.text-area-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #2563eb1a}.text-input-field{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);font-family:inherit}.text-input-field:hover{border-color:var(--color-primary)}.text-input-field:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #2563eb1a}.alignment-controls{display:flex;border:1px solid var(--border-color);border-radius:var(--border-radius);overflow:hidden}.alignment-btn{flex:1;padding:.4rem .5rem;font-size:.8rem;font-family:inherit;font-weight:500;cursor:pointer;background:none;border:none;border-right:1px solid var(--border-color);color:var(--text-color);transition:background-color .15s,color .15s}.alignment-btn:last-child{border-right:none}.alignment-btn:hover{background-color:var(--button-hover-background)}.alignment-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px}.alignment-btn.active{background-color:var(--color-primary);color:#fff}#download-section{display:none}.helper-text{font-size:.78rem;color:var(--text-muted);margin:0;line-height:1.4}.credits{margin-top:4rem;padding:.75rem 1rem;border-radius:var(--border-radius);font-size:var(--step--1);background-color:var(--border-color);h2{font-size:var(--step--1)}>*+*{margin-block-start:1rem}}.canvas-area{min-width:0}.canvas-wrapper{max-width:100%;position:relative;display:inline-block;&.quickstart-guide-shown{min-height:400px}}.quickstart-guide{top:50%;left:50%;z-index:10;padding:.5rem;max-width:360px;position:absolute;border-radius:var(--border-radius);width:calc(100% - 2rem);transform:translate(-50%,-50%);background-color:var(--bg-color);border:2px solid var(--color-primary);*{font-size:var(--step--1)}}.canvas-label{font-size:.9rem;font-weight:600;letter-spacing:.05em;color:var(--text-muted);text-transform:uppercase}.canvas-container{max-width:100%;max-height:85vh;overflow:hidden;width:max-content;position:relative;border:2px solid var(--border-color);box-shadow:0 2px 8px #00000014;background-color:#fff;background-image:linear-gradient(45deg,#e0e0e0 25%,transparent 25%),linear-gradient(-45deg,#e0e0e0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e0e0e0 75%),linear-gradient(-45deg,transparent 75%,#e0e0e0 75%);background-size:32px 32px;background-position:0 0,0 16px,16px -16px,-16px 0px}canvas{display:block;width:auto;height:auto;cursor:default;max-width:100%;max-height:85vh}.canvas-wrapper.drag-over{outline-offset:-3px}.canvas-wrapper.drag-over .quickstart-guide{display:none}.canvas-wrapper.drag-over .canvas-container:before{inset:0;content:"";z-index:1000;position:absolute;pointer-events:none;border:6px dashed var(--color-instructional);background:#00000059}.canvas-wrapper.drag-over .canvas-container:after{top:50%;left:50%;color:#fff;z-index:1001;font-weight:600;position:absolute;padding:1rem 2rem;font-size:1.25rem;pointer-events:none;content:"drop image here!";transform:translate(-50%,-50%);border-radius:var(--border-radius);background:var(--color-instructional)}.scan-bulb{display:none;position:absolute;left:0;right:0;height:10px;background:linear-gradient(to bottom,transparent,var(--scan-bulb-glow) 20%,var(--scan-bulb-color) 50%,var(--scan-bulb-glow) 80%,transparent);pointer-events:none;z-index:10;box-shadow:0 0 20px #fffc,0 0 40px #fff6;transition:top 16ms linear}.countdown-overlay{display:none;inset:0;gap:1rem;z-index:20;padding:.5rem;position:absolute;align-items:center;pointer-events:none;flex-direction:column;justify-content:center;background-color:#000000b3}#countdown-number{color:#fff;line-height:1;font-size:5rem;font-weight:700;text-shadow:0 4px 20px rgba(0,0,0,.5);animation:pulse 1s ease-in-out infinite}.scan-tip{color:#fff;max-width:56ch;text-align:center;font-size:var(--step-0);margin-block-start:.5em}@keyframes pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.9}}.scan-complete{display:none;top:50%;left:50%;z-index:20;color:#fff;padding:1rem;font-size:1rem;font-weight:600;text-align:center;position:absolute;pointer-events:none;border-radius:var(--border-radius);transform:translate(-50%,-50%);animation:slideDown .3s ease-out;box-shadow:0 8px 32px #10b98166;background-color:var(--button-active-background)}@keyframes slideDown{0%{transform:translate(-50%,-60%);opacity:0}to{transform:translate(-50%,-50%);opacity:1}}.controls-panel{gap:1.5rem;display:flex;padding:1rem;flex-direction:column;border-radius:var(--border-radius);background-color:#fff;border:1px solid var(--border-color)}.control-group{display:flex;flex-direction:column;gap:.75rem}.control-label{font-size:.9rem;font-weight:600;color:var(--text-color)}.select-input{width:100%;padding:.5rem;cursor:pointer;font-size:.9rem;font-family:inherit;border-radius:var(--border-radius);background-color:#fff;transition:border-color .2s;border:1px solid var(--border-color)}.select-input:hover{border-color:var(--color-primary)}.select-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #2563eb1a}.custom-ratio-inputs{display:flex;align-items:center;gap:.5rem}.number-input{width:4rem;padding:.4rem .5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);font-size:.9rem;font-family:inherit;text-align:center;transition:border-color .2s;-moz-appearance:textfield}.number-input::-webkit-inner-spin-button,.number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #2563eb1a}.ratio-separator{font-weight:600;font-size:.9rem;color:var(--text-color)}.btn{border:none;font-size:1rem;font-weight:600;cursor:pointer;text-align:center;transition:all .2s;font-family:inherit;border-radius:var(--border-radius);padding:.75rem 1.5rem}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background-color:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background-color:var(--color-primary-hover);box-shadow:0 4px 12px #2563eb4d}.btn-secondary{background-color:var(--color-secondary);color:#fff}.btn-active{color:#fff;background-color:var(--button-active-background);&:not(:disabled){&:hover,&:focus-visible{background-color:color-mix(in srgb,var(--button-active-background) 80%,transparent)}}}.btn-secondary:hover:not(:disabled){background-color:var(--color-secondary-hover);transform:translateY(-1px);box-shadow:0 4px 12px #64748b4d}.btn-warning{width:100%;vertical-align:middle;color:var(--color-primary);background-color:var(--button-tertiary)}.btn-warning:hover:not(:disabled){background-color:var(--warning-hover);transform:translateY(-1px);box-shadow:0 4px 12px #f59e0b4d}.btn-large{padding:1rem 2rem;font-size:1.1rem}.btn-small{padding:.5rem .75rem;font-size:.85rem;white-space:nowrap}.media-button{gap:.5rem;width:100%;font-size:1rem;cursor:pointer;font-weight:500;align-items:center;display:inline-flex;padding:.75rem 1rem;border-radius:var(--border-radius);justify-content:flex-start;color:var(--color-primary);background-color:transparent;transition:background-color .2s;border:2px dashed var(--color-primary)}.media-button:hover:not(:disabled){background-color:var(--button-hover-background)}.media-button:disabled{opacity:.5;cursor:not-allowed}.checkbox-label{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.85rem;font-weight:500;color:var(--color-primary);user-select:none;width:100%}.checkbox-label input[type=checkbox]{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.checkbox-indicator{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;flex-shrink:0;border:2px solid var(--color-primary);border-radius:.25rem;background-color:transparent;transition:background-color .15s,border-color .15s}.checkbox-indicator:after{content:"";display:block;width:.35rem;height:.6rem;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) translateY(-1px);opacity:0;transition:opacity .15s}.checkbox-label input[type=checkbox]:checked+.checkbox-indicator{background-color:var(--color-primary);border-color:var(--color-primary)}.checkbox-label input[type=checkbox]:checked+.checkbox-indicator:after{opacity:1}.checkbox-label input[type=checkbox]:focus-visible+.checkbox-indicator{outline:2px solid var(--color-primary);outline-offset:2px}.slider{width:100%;height:6px;border-radius:3px;background:var(--border-color);outline:none;-webkit-appearance:none}.slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:var(--color-primary);cursor:pointer;transition:all .2s}.slider::-webkit-slider-thumb:hover{transform:scale(1.2);box-shadow:0 0 0 8px #2563eb1a}.slider::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:var(--color-primary);cursor:pointer;border:none;transition:all .2s}.slider::-moz-range-thumb:hover{transform:scale(1.2);box-shadow:0 0 0 8px #2563eb1a}.speed-markers{display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-muted)}.color-picker-wrapper{display:flex;gap:.5rem;align-items:center}.color-input{height:40px;padding:.25rem;border:1px solid var(--border-color);border-radius:var(--border-radius);cursor:pointer;background-color:#fff;transition:border-color .2s}.color-input:hover{border-color:var(--color-primary)}.color-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #2563eb1a}.info-panel{padding:1rem;background-color:var(--bg-color);margin-top:1rem}.info-panel h3{font-size:.9rem;font-weight:600;margin-bottom:.75rem;color:var(--text-color)}.info-panel ol{padding-left:1.25rem;font-size:.85rem;color:var(--text-muted)}.info-panel li{margin-bottom:.5rem}.info-note{padding:.75rem;border-radius:4px;font-size:.85rem;color:var(--text-color);background-color:var(--border-color);border-left:3px solid var(--color-primary)}.status-message{display:none;max-width:100%;font-weight:500;margin-top:1rem;font-size:.9rem;width:max-content;padding:.75rem 1rem;border-radius:var(--border-radius)}.status-success{background-color:#10b9811a;color:var(--success-color);border:1px solid var(--success-color)}.status-error{background-color:#ef44441a;color:var(--error-color);border:1px solid var(--error-color)}.status-info{color:var(--color-primary);background-color:var(--border-color);border:1px solid var(--color-primary)}@media(min-width:768px){.slitscanner{grid-template-columns:var(--sidebar-width) 1fr;grid-template-rows:1fr;grid-template-areas:"sidebar canvas";gap:0;padding:0;height:100vh;overflow:hidden}.sidebar{display:flex;flex-direction:column;gap:1.5rem;grid-area:sidebar;padding:1rem;height:100vh;overflow-y:auto;border-right:1px solid var(--border-color);background-color:#fff}.canvas-area{padding:2rem;overflow-y:auto;grid-area:canvas}.controls-panel{border:none;border-radius:0;box-shadow:none;padding:0;background-color:transparent}.scanner-header{text-align:left}.media-button{width:100%}#countdown-number{font-size:8rem}}@media(max-width:480px){.btn-large{padding:.875rem 1.5rem;font-size:1rem}#countdown-number{font-size:4rem}}
