:root{--color-primary:#2c47d6;--color-primary-hover:#1f36b3;--color-primary-light:#2c47d6;--color-on-primary:#fff;--color-accent:#e8442a;--color-bg-app:#eceef6;--color-bg-card:#f8f9fd;--color-bg-input:#fff;--color-line:#c4c9e3;--color-text:#14183a;--color-text-secondary:#353b6a;--color-text-muted:#4d537e;--color-success:#0a7a5e;--color-danger:#bf3119;--color-warn:#8a5a00;--color-on-status:#fff;--radius-card:3px;--radius-input:3px;--radius-btn:3px;--shadow:4px 4px 0 var(--color-text);--shadow-card:5px 5px 0 var(--color-primary);--font-display:"Bricolage Grotesque", "Avenir Next", "Segoe UI", sans-serif;--font-body:"Instrument Sans", "Segoe UI", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, Consolas, monospace;--font-size-base:16px;--font-size-sm:14px;--font-size-lg:18px;--font-size-xl:22px;--spacing-xs:8px;--spacing-sm:12px;--spacing-md:16px;--spacing-lg:24px;--spacing-xl:32px;--bottom-bar-height:64px;--sidebar-width-collapsed:56px;--sidebar-width-open:232px;--i-wall:#dde2f5;--i-floor:#c3cae6;--i-line:#14183a;--i-body:#14183a;--i-screen:#f8f9fd;--i-sky:#a9b8ff;--i-night:#1a2160;--i-blue:#2c47d6;--i-coral:#ff5a3c;--i-good:#14a37f;--i-amber:#ffb81f}@media (prefers-color-scheme:dark){:root{--color-primary:#7f93ff;--color-primary-hover:#a3b1ff;--color-primary-light:#a3b1ff;--color-on-primary:#0c102b;--color-accent:#ff7a5c;--color-bg-app:#0c102b;--color-bg-card:#151a42;--color-bg-input:#0c102b;--color-line:#2b3270;--color-text:#e8ebfb;--color-text-secondary:#c9d0ff;--color-text-muted:#a3abdc;--color-success:#4fd1a8;--color-danger:#ff8c72;--color-warn:#e8b84a;--color-on-status:#0c102b;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--i-wall:#1a2050;--i-floor:#131843;--i-line:#c9d0ff;--i-body:#3a4496;--i-screen:#0c102b;--i-sky:#33408f;--i-night:#080b22;--i-blue:#6f86ff;--i-coral:#ff7a5c;--i-good:#4fd1a8;--i-amber:#e8b84a}}@keyframes toastIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes toastOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(20px)}}*{box-sizing:border-box}body{background-color:var(--color-bg-app);color:var(--color-text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;line-height:1.5}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.01em}code{font-family:var(--font-mono)}:focus-visible{outline:3px solid var(--color-accent);outline-offset:3px}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.App{background-color:var(--color-bg-app);color:var(--color-text);min-height:100vh;font-size:var(--font-size-base);flex-direction:column;display:flex}.App-content{padding:var(--spacing-md);padding-bottom:calc(var(--bottom-bar-height) + var(--spacing-md));flex-direction:column;align-items:center;display:flex}.card{background-color:var(--color-bg-card);border-radius:var(--radius-card);border:2.5px solid var(--color-text);box-shadow:var(--shadow-card);margin:var(--spacing-xs) 0 var(--spacing-md);padding:var(--spacing-lg);box-sizing:border-box;width:100%}.card-content h1,.card-content h2{font-size:var(--font-size-xl);text-align:center}.card-content p{font-size:var(--font-size-base);color:var(--color-text-secondary)}.card-footer{font-size:var(--font-size-sm);text-align:right;color:var(--color-text-muted)}.card-footer a{color:var(--color-primary);font-weight:700;text-decoration:none}.card-footer a:hover{color:var(--color-primary-hover)}.input{border-radius:var(--radius-input);width:100%;height:48px;box-shadow:3px 3px 0 var(--color-primary);text-align:center;font-size:var(--font-size-base);background-color:var(--color-bg-input);color:var(--color-text);border:2px solid var(--color-text);box-sizing:border-box;padding:0 var(--spacing-sm)}textarea{border-radius:var(--radius-input);width:100%;height:200px;box-shadow:3px 3px 0 var(--color-primary);text-align:left;font-size:var(--font-size-base);background-color:var(--color-bg-input);color:var(--color-text);border:2px solid var(--color-text);box-sizing:border-box;padding:var(--spacing-sm);resize:vertical}button:not(.btn-raw),.btn{border-radius:var(--radius-btn);width:100%;height:48px;box-shadow:var(--shadow);text-align:center;font-size:var(--font-size-base);cursor:pointer;background-color:var(--color-primary);color:var(--color-on-primary);font-family:var(--font-display);margin-top:var(--spacing-sm);border:2.5px solid var(--color-text);box-sizing:border-box;font-weight:700;text-decoration:none;transition:transform .12s,box-shadow .12s}button:not(.btn-raw):hover,.btn:hover{box-shadow:6px 6px 0 var(--color-text);transform:translate(-2px,-2px)}button:not(.btn-raw):active,.btn:active{box-shadow:1px 1px 0 var(--color-text);transform:translate(2px,2px)}.success{color:var(--color-success);font-weight:700}.danger{color:var(--color-danger);font-weight:700}.alert-success{background-color:var(--color-success);color:var(--color-on-status);border:2.5px solid var(--color-text);border-radius:var(--radius-card);box-shadow:var(--shadow);margin:var(--spacing-xs) 0;padding:var(--spacing-sm) var(--spacing-md);text-align:center;font-weight:700;font-size:var(--font-size-base)}.alert-danger{background-color:var(--color-danger);color:var(--color-on-status);border:2.5px solid var(--color-text);border-radius:var(--radius-card);box-shadow:var(--shadow);margin:var(--spacing-xs) 0;padding:var(--spacing-sm) var(--spacing-md);text-align:center;font-weight:700;font-size:var(--font-size-base)}.result{color:var(--color-primary-light);font-size:var(--font-size-xl);white-space:pre-wrap;word-break:break-all;font-weight:700;overflow:auto}a{color:var(--color-primary);font-size:var(--font-size-base);font-weight:600;text-decoration:none}a:hover{color:var(--color-primary-hover)}.pointer{cursor:pointer}.textAlign-center{text-align:center}.list-checkbox{margin-left:var(--spacing-sm)}input[type=checkbox]{width:20px;height:20px;margin-right:var(--spacing-xs)}.footer{text-align:center;padding:var(--spacing-md);color:var(--color-text-muted);font-size:var(--font-size-sm)}.footer a{color:var(--color-text-muted);width:auto;height:auto;text-decoration:none}.home-head{width:100%;max-width:960px;margin-bottom:var(--spacing-lg)}.home-kicker{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-muted);margin:0;font-size:12px;font-weight:700}.home-title{letter-spacing:-.02em;margin:var(--spacing-sm) 0 0;text-wrap:balance;font-size:clamp(34px,6vw,58px);font-weight:800;line-height:1.02}.home-title .hl{background:linear-gradient(transparent 62%, var(--color-accent) 62% 92%, transparent 92%);padding:0 .06em}.home-lead{max-width:56ch;color:var(--color-text-muted);font-size:var(--font-size-lg);margin:14px 0 0}.home-section{width:100%;max-width:960px}.home-section h2{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-muted);border-bottom:2px solid var(--color-line);margin:0;padding-bottom:10px;font-size:13px;font-weight:700}.home-grid{grid-template-columns:1fr;gap:20px 18px;width:100%;margin-top:18px;display:grid}.home-card{background-color:var(--color-bg-card);border:2.5px solid var(--color-text);border-radius:var(--radius-card);box-shadow:5px 5px 0 var(--color-text);color:inherit;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:4px 16px;padding:18px;text-decoration:none;transition:transform .12s,box-shadow .12s;display:grid}.home-card:hover{box-shadow:8px 8px 0 var(--color-accent);color:inherit;transform:translate(-2px,-2px)}.home-card-icon{background-color:var(--color-primary);width:48px;height:48px;color:var(--color-on-primary);border:2.5px solid var(--color-text);grid-row:span 2;place-items:center;font-size:1.4rem;display:grid}.home-card-title{font-family:var(--font-display);color:var(--color-text);text-wrap:balance;margin:0;font-size:20px;font-weight:800;line-height:1.15}.home-card-desc{color:var(--color-text-muted);grid-column:2;margin:0;font-size:15px;line-height:1.4}@media (width>=640px){.home-grid{grid-template-columns:1fr 1fr}}@media (width>=768px){.App-content{margin-left:var(--sidebar-width-open);padding:var(--spacing-xl) var(--spacing-xl) var(--spacing-xl)}.card,.input,textarea,button:not(.btn-raw),.btn{max-width:480px}}.menu{min-height:var(--bottom-bar-height);background-color:var(--color-bg-card);border-top:2.5px solid var(--color-text);padding:6px max(8px, env(safe-area-inset-right,0px)) calc(6px + env(safe-area-inset-bottom,0px)) max(8px, env(safe-area-inset-left,0px));z-index:100;box-sizing:border-box;flex-direction:row;justify-content:space-around;align-items:center;gap:2px;display:flex;position:fixed;bottom:0;left:0;right:0;overflow:auto hidden}.menu-brand{display:none}.menu a{color:var(--color-text-muted);border-radius:3px;flex-direction:column;flex:1;justify-content:center;align-items:center;min-width:0;height:48px;text-decoration:none;transition:background-color .15s;display:flex}.menu a:hover{color:var(--color-text)}.menu a.active{color:var(--color-on-primary);background-color:var(--color-primary)}.menu-icon{font-size:1.3rem}.menu-title{display:none}@media (width>=768px){.menu{width:var(--sidebar-width-open);border-top:0;border-right:2.5px solid var(--color-text);flex-direction:column;justify-content:flex-start;align-items:stretch;gap:4px;padding:20px 14px;inset:0 auto 0 0;overflow:hidden auto}.menu-brand{font-family:var(--font-display);letter-spacing:-.01em;color:var(--color-text);padding:4px 10px 22px;font-size:22px;font-weight:800;display:block}.menu-brand b{color:var(--color-accent)}.menu a{flex-direction:row;flex:none;justify-content:flex-start;gap:12px;height:44px;padding:0 10px;font-weight:600}.menu a:not(.active):hover{background-color:var(--color-line)}.menu-icon{text-align:center;width:24px;font-size:1.1rem}.menu-title{font-size:var(--font-size-sm);white-space:nowrap;display:inline}}.Loading{background-color:var(--color-bg-app);color:var(--color-text);flex-direction:column;justify-content:center;align-items:center;min-height:100vh;font-size:calc(10px + 2vmin);display:flex}.loader{border:3px solid var(--color-text);box-sizing:border-box;border-radius:50%;width:48px;height:48px;margin:20px auto;animation:2s linear infinite animloader;display:block;position:relative}.loader:after{content:"";box-sizing:border-box;background:var(--color-text);width:6px;height:24px;position:absolute;bottom:-20px;left:46px;transform:rotate(-45deg)}@keyframes animloader{0%{transform:translate(-10px,-10px)}25%{transform:translate(-10px,10px)}50%{transform:translate(10px,10px)}75%{transform:translate(10px,-10px)}to{transform:translate(-10px,-10px)}}
