*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-text-size-adjust:100%}body{line-height:var(--line-height-normal);font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,video,svg{display:block;max-width:100%}button,input,textarea,select{font:inherit}a{color:inherit;text-decoration:none}ul,ol{list-style:none}h1,h2,h3,h4,h5,h6{font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight)}button{cursor:pointer;border:none;background:none}input,textarea,select{border:none;outline:none;background:none}fieldset{border:none}:root{--color-bg: #ffffff;--color-surface: #f8f9fa;--color-surface2: #f1f3f5;--color-surface3: #e9ecef;--color-border: #dee2e6;--color-border-light: #e9ecef;--color-text: #212529;--color-text-secondary: #495057;--color-text-muted: #868e96;--color-text-inverse: #ffffff;--color-accent: #228be6;--color-accent-hover: #1c7ed6;--color-accent-light: #d0ebff;--color-accent-text: #ffffff;--color-success: #2f9e44;--color-success-light: #d3f9d8;--color-warning: #f08c00;--color-warning-light: #fff3bf;--color-error: #e03131;--color-error-light: #ffe0e0;--color-info: #1c7ed6;--color-info-light: #d0ebff;--font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-family-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-md: 1rem;--font-size-lg: 1.25rem;--font-size-xl: 1.5rem;--font-size-2xl: 2rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--space-16: 4rem;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px rgba(0, 0, 0, .07);--shadow-lg: 0 10px 15px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px rgba(0, 0, 0, .15);--transition-fast: .15s ease;--transition-normal: .25s ease;--transition-slow: .4s ease;--sidebar-width: 240px;--header-height: 56px;--tool-card-min-w: 240px;--tool-card-max-w: 320px}[data-theme=dark]{--color-bg: #1a1b1e;--color-surface: #25262b;--color-surface2: #2c2e33;--color-surface3: #373a40;--color-border: #373a40;--color-border-light: #2c2e33;--color-text: #e9ecef;--color-text-secondary: #ced4da;--color-text-muted: #868e96;--color-text-inverse: #1a1b1e;--color-accent: #4dabf7;--color-accent-hover: #74c0fc;--color-accent-light: #1b3a5c;--color-accent-text: #1a1b1e;--color-success: #51cf66;--color-success-light: #1b3a2a;--color-warning: #fcc419;--color-warning-light: #3a3520;--color-error: #ff6b6b;--color-error-light: #3a1b1b;--color-info: #4dabf7;--color-info-light: #1b3a5c;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .2);--shadow-md: 0 4px 6px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px rgba(0, 0, 0, .5)}body{background-color:var(--color-bg);color:var(--color-text);font-family:var(--font-family);font-size:var(--font-size-md);min-height:100vh;transition:background-color var(--transition-normal),color var(--transition-normal)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-muted)}::selection{background:var(--color-accent-light);color:var(--color-text)}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}:focus:not(:focus-visible){outline:none}html{scroll-behavior:smooth}#app{display:flex;flex-direction:column;min-height:100vh}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:var(--line-height-tight);cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),opacity var(--transition-fast);white-space:nowrap;user-select:none;border:1px solid transparent}.btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-primary{background-color:var(--color-accent);color:var(--color-accent-text);border-color:var(--color-accent)}.btn-primary:hover:not(:disabled){background-color:var(--color-accent-hover);border-color:var(--color-accent-hover)}.btn-secondary{background-color:var(--color-surface2);color:var(--color-text);border-color:var(--color-border)}.btn-secondary:hover:not(:disabled){background-color:var(--color-surface3)}.btn-ghost{background-color:transparent;color:var(--color-text-secondary);border-color:transparent}.btn-ghost:hover:not(:disabled){background-color:var(--color-surface2);color:var(--color-text)}.btn-danger{background-color:var(--color-error);color:#fff;border-color:var(--color-error)}.btn-danger:hover:not(:disabled){opacity:.85}.btn-lg{padding:var(--space-3) var(--space-6);font-size:var(--font-size-md);border-radius:var(--radius-lg)}.btn-sm{padding:var(--space-1) var(--space-3);font-size:var(--font-size-xs);border-radius:var(--radius-sm)}.btn-icon{padding:var(--space-2);border-radius:var(--radius-md);aspect-ratio:1}.form-group{display:flex;flex-direction:column;gap:var(--space-1)}.form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.form-input,.form-select,.form-textarea{width:100%;padding:var(--space-2) var(--space-3);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--color-text);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-light);outline:none}.form-input::placeholder,.form-textarea::placeholder{color:var(--color-text-muted)}.form-textarea{resize:vertical;font-family:var(--font-family-mono);min-height:6rem}.form-select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23868e96' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--space-3) center;padding-right:var(--space-8);cursor:pointer}.form-checkbox{display:flex;align-items:center;gap:var(--space-2);cursor:pointer}.form-checkbox input[type=checkbox]{width:16px;height:16px;accent-color:var(--color-accent);cursor:pointer}.form-range{display:flex;align-items:center;gap:var(--space-3)}.form-range input[type=range]{flex:1;accent-color:var(--color-accent);cursor:pointer}.form-range-value{min-width:3rem;text-align:right;font-size:var(--font-size-sm);color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.form-help{font-size:var(--font-size-xs);color:var(--color-text-muted);line-height:var(--line-height-relaxed)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-fast),border-color var(--transition-fast)}.card:hover{box-shadow:var(--shadow-md)}.card-body{padding:var(--space-4)}.badge{display:inline-flex;align-items:center;padding:2px var(--space-2);border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);line-height:1.4}.badge-accent{background:var(--color-accent-light);color:var(--color-accent)}.badge-success{background:var(--color-success-light);color:var(--color-success)}.badge-error{background:var(--color-error-light);color:var(--color-error)}.alert{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);font-size:var(--font-size-sm);border:1px solid;display:flex;gap:var(--space-2);align-items:flex-start}.alert-error{background:var(--color-error-light);border-color:var(--color-error);color:var(--color-error)}.alert-success{background:var(--color-success-light);border-color:var(--color-success);color:var(--color-success)}.alert-info{background:var(--color-info-light);border-color:var(--color-info);color:var(--color-info)}.divider{border:none;border-top:1px solid var(--color-border);margin:var(--space-4) 0}.spinner{width:1em;height:1em;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;display:inline-block;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.collapsible-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;user-select:none;padding:var(--space-2) 0}.collapsible-header:hover{color:var(--color-accent)}.collapsible-chevron{transition:transform var(--transition-fast);font-size:var(--font-size-xs);color:var(--color-text-muted)}.collapsible-chevron.open{transform:rotate(180deg)}.collapsible-body{overflow:hidden;transition:max-height var(--transition-normal)}.app-shell{display:grid;grid-template-rows:var(--header-height) 1fr;grid-template-columns:var(--sidebar-width) 1fr;grid-template-areas:"header header" "sidebar main";min-height:100vh}.header{grid-area:header;display:flex;align-items:center;padding:0 var(--space-6);gap:var(--space-4);background:var(--color-surface);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:100;box-shadow:var(--shadow-sm)}.header-logo{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text);text-decoration:none;white-space:nowrap}.header-logo-icon{width:28px;height:28px}.header-spacer{flex:1}.header-actions{display:flex;align-items:center;gap:var(--space-2)}.sidebar{grid-area:sidebar;display:flex;flex-direction:column;background:var(--color-surface);border-right:1px solid var(--color-border);overflow-y:auto;overflow-x:hidden;height:calc(100vh - var(--header-height));position:sticky;top:var(--header-height)}.sidebar-section{padding:var(--space-4) var(--space-3);border-bottom:1px solid var(--color-border-light)}.sidebar-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:var(--space-2);padding:0 var(--space-1)}.sidebar-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--color-text-secondary);cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-item:hover{background-color:var(--color-surface2);color:var(--color-text)}.sidebar-item.active{background-color:var(--color-accent-light);color:var(--color-accent);font-weight:var(--font-weight-medium)}.sidebar-item-icon{flex-shrink:0;font-size:1em;width:1.25em;text-align:center}.main-content{grid-area:main;overflow-y:auto;background:var(--color-bg);padding:var(--space-6)}.tool-grid-section{margin-bottom:var(--space-8)}.tool-grid-category-title{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text);margin-bottom:var(--space-4);padding-bottom:var(--space-2);border-bottom:2px solid var(--color-border)}.tool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--tool-card-min-w),1fr));gap:var(--space-4)}.sidebar-overlay{display:none;position:fixed;inset:0;background:#00000080;z-index:50}.hamburger{display:none}@media (max-width: 768px){.app-shell{grid-template-columns:1fr;grid-template-areas:"header" "main"}.sidebar{position:fixed;left:0;top:var(--header-height);width:var(--sidebar-width);height:calc(100vh - var(--header-height));z-index:60;transform:translate(-100%);transition:transform var(--transition-normal)}.sidebar.open{transform:translate(0)}.sidebar-overlay.open{display:block}.hamburger{display:flex}.main-content{padding:var(--space-4)}}@media (max-width: 480px){.tool-grid{grid-template-columns:1fr}}.tool-workspace{max-width:1200px}.tool-workspace-header{display:flex;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-6)}.tool-workspace-back{flex-shrink:0;margin-top:2px}.tool-workspace-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text);line-height:var(--line-height-tight)}.tool-workspace-description{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-top:var(--space-1);line-height:var(--line-height-relaxed)}.tool-workspace-heavy-deps{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--color-warning-light);border-radius:var(--radius-md);font-size:var(--font-size-xs);color:var(--color-warning);margin-top:var(--space-2)}.tool-workspace-body{display:grid;grid-template-columns:1fr 300px;gap:var(--space-6);align-items:start}.tool-workspace-left{display:flex;flex-direction:column;gap:var(--space-4)}.tool-workspace-right{position:sticky;top:calc(var(--header-height) + var(--space-4))}.tool-input-section{display:flex;flex-direction:column;gap:var(--space-3)}.tool-input-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.tool-text-input{width:100%;padding:var(--space-2) var(--space-3);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--color-text);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.tool-text-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-light);outline:none}.tool-textarea-input{width:100%;padding:var(--space-3);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font-family:var(--font-family-mono);font-size:var(--font-size-sm);color:var(--color-text);resize:vertical;min-height:8rem;line-height:var(--line-height-relaxed);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.tool-textarea-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-light);outline:none}.tool-run-area{display:flex;align-items:center;gap:var(--space-4)}.tool-run-btn{min-width:140px}.tool-progress-area{margin-top:var(--space-2)}.tool-error-area{padding:var(--space-4);background:var(--color-error-light);border:1px solid var(--color-error);border-radius:var(--radius-md);color:var(--color-error);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed)}.tool-output-area{margin-top:var(--space-4)}.tool-output-summary{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-bottom:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--color-surface2);border-radius:var(--radius-md)}.tool-output-actions{display:flex;gap:var(--space-2);margin-top:var(--space-3);flex-wrap:wrap}.tool-output-preview{border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;background:var(--color-surface)}.tool-output-preview img,.tool-output-preview video,.tool-output-preview audio{max-width:100%;max-height:400px;display:block;margin:0 auto}.tool-output-code{max-height:500px;overflow:auto;padding:var(--space-4)}.tool-output-code pre{margin:0;font-family:var(--font-family-mono);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-all}.tool-output-iframe{width:100%;min-height:300px;border:none}.tool-output-file-card{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4)}.tool-output-file-icon{font-size:2rem;flex-shrink:0}.tool-output-file-name{font-weight:var(--font-weight-medium);font-size:var(--font-size-sm);word-break:break-all}.tool-output-file-size{font-size:var(--font-size-xs);color:var(--color-text-muted)}.tool-output-files-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--space-3);padding:var(--space-4)}.tool-output-file-thumb{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);padding:var(--space-3);background:var(--color-surface2);border-radius:var(--radius-md);cursor:pointer;transition:background-color var(--transition-fast);text-align:center}.tool-output-file-thumb:hover{background:var(--color-surface3)}.tool-output-file-thumb img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--radius-sm)}.tool-output-file-thumb-name{font-size:var(--font-size-xs);color:var(--color-text-secondary);word-break:break-all;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 768px){.tool-workspace-body{grid-template-columns:1fr}.tool-workspace-right{position:static;order:3}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.line-clamp-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.hidden{display:none!important}.invisible{visibility:hidden}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.flex-1{flex:1}.flex-wrap{flex-wrap:wrap}.gap-1{gap:var(--space-1)}.gap-2{gap:var(--space-2)}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-md{font-size:var(--font-size-md)}.text-lg{font-size:var(--font-size-lg)}.text-muted{color:var(--color-text-muted)}.text-secondary{color:var(--color-text-secondary)}.text-accent{color:var(--color-accent)}.text-error{color:var(--color-error)}.text-success{color:var(--color-success)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.font-mono{font-family:var(--font-family-mono)}.mt-2{margin-top:var(--space-2)}.mt-4{margin-top:var(--space-4)}.mb-2{margin-bottom:var(--space-2)}.mb-4{margin-bottom:var(--space-4)}.p-4{padding:var(--space-4)}.w-full{width:100%}.cursor-pointer{cursor:pointer}.nowrap{white-space:nowrap}
