:root{color-scheme:light dark;--font-sans: system-ui, "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono: "JetBrains Mono", "Fira Code", "Cascadia Code", monospace;--md-sys-space-xs: 4px;--md-sys-space-sm: 8px;--md-sys-space-md: 16px;--md-sys-space-lg: 24px;--md-sys-space-xl: 40px;--md-sys-space-100: 4px;--md-sys-space-200: 8px;--md-sys-space-300: 12px;--md-sys-space-400: 16px;--md-sys-space-500: 24px;--md-sys-shape-corner-none: 0;--md-sys-shape-corner-extra-small: 4px;--md-sys-shape-corner-small: 8px;--md-sys-shape-corner-medium: 12px;--md-sys-shape-corner-large: 16px;--md-sys-shape-corner-extra-large: 28px;--md-sys-shape-corner-full: 9999px;--md-sys-motion-easing-standard: cubic-bezier(.2, 0, 0, 1);--md-sys-motion-easing-emphasized: cubic-bezier(.05, .7, .1, 1);--md-sys-motion-easing-decelerate: cubic-bezier(0, 0, 0, 1);--md-sys-motion-duration-short: .2s;--md-sys-motion-duration-medium: .3s;--md-sys-motion-duration-long: .5s;--md-sys-typescale-body-small: 400 12px/16px var(--font-sans);--md-sys-typescale-body-medium: 400 14px/20px var(--font-sans);--md-sys-typescale-body-large: 400 16px/24px var(--font-sans);--md-sys-typescale-label-small: 500 11px/16px var(--font-sans);--md-sys-typescale-label-medium: 500 12px/16px var(--font-sans);--md-sys-typescale-label-large: 500 14px/20px var(--font-sans);--md-sys-typescale-title-small: 500 14px/20px var(--font-sans);--md-sys-typescale-title-medium: 500 16px/24px var(--font-sans);--md-sys-typescale-headline-small: 400 24px/32px var(--font-sans);--md-sys-typescale-headline-medium: 400 28px/36px var(--font-sans);--md-sys-typescale-headline-large: 400 32px/40px var(--font-sans);--md-sys-typescale-display-small: 400 36px/44px var(--font-sans);--md-sys-motion-easing-standard-accelerate: cubic-bezier(.3, 0, 1, 1);--md-sys-motion-easing-standard-decelerate: cubic-bezier(0, 0, 0, 1)}:root{--md-sys-color-primary: #2563eb;--md-sys-color-on-primary: #ffffff;--md-sys-color-primary-container: #dbeafe;--md-sys-color-on-primary-container: #1e3a8a;--md-sys-color-secondary: #4b5563;--md-sys-color-on-secondary: #ffffff;--md-sys-color-secondary-container: #e5e7eb;--md-sys-color-on-secondary-container: #1f2937;--md-sys-color-tertiary: #d97706;--md-sys-color-on-tertiary: #ffffff;--md-sys-color-tertiary-container: #fef3c7;--md-sys-color-on-tertiary-container: #78350f;--md-sys-color-error: #dc2626;--md-sys-color-on-error: #ffffff;--md-sys-color-error-container: #fef2f2;--md-sys-color-on-error-container: #7f1d1d;--md-sys-color-success: #16a34a;--md-sys-color-on-success: #ffffff;--md-sys-color-success-container: #f0fdf4;--md-sys-color-on-success-container: #14532d;--md-sys-color-surface: #f8fafc;--md-sys-color-on-surface: #0f172a;--md-sys-color-surface-variant: #e2e8f0;--md-sys-color-on-surface-variant: #334155;--md-sys-color-surface-container-lowest: #ffffff;--md-sys-color-surface-container-low: #f1f5f9;--md-sys-color-surface-container: #eef2f7;--md-sys-color-surface-container-high: #e2e8f0;--md-sys-color-surface-container-highest: #cbd5e1;--md-sys-color-surface-bright: #ffffff;--md-sys-color-surface-dim: #cbd5e1;--md-sys-color-background: #f8fafc;--md-sys-color-on-background: #0f172a;--md-sys-color-outline: #64748b;--md-sys-color-outline-variant: #cbd5e1;--md-sys-color-surface-tint: #2563eb;--md-sys-color-inverse-surface: #1e293b;--md-sys-color-inverse-on-surface: #f8fafc;--md-sys-color-inverse-primary: #93c5fd;--md-sys-elevation-0: none;--md-sys-elevation-1: 0 1px 3px rgba(0, 0, 0, .06);--md-sys-elevation-2: 0 2px 6px rgba(0, 0, 0, .08);--md-sys-elevation-3: 0 4px 12px rgba(0, 0, 0, .1);--md-sys-focus-ring: 0 0 0 3px color-mix(in srgb, var(--md-sys-color-primary) 20%, transparent)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--md-sys-color-primary: #93c5fd;--md-sys-color-on-primary: #1e3a8a;--md-sys-color-primary-container: #1e40af;--md-sys-color-on-primary-container: #dbeafe;--md-sys-color-secondary: #94a3b8;--md-sys-color-on-secondary: #1e293b;--md-sys-color-secondary-container: #334155;--md-sys-color-on-secondary-container: #e2e8f0;--md-sys-color-tertiary: #fcd34d;--md-sys-color-on-tertiary: #78350f;--md-sys-color-tertiary-container: #92400e;--md-sys-color-on-tertiary-container: #fef3c7;--md-sys-color-error: #fca5a5;--md-sys-color-on-error: #7f1d1d;--md-sys-color-error-container: #991b1b;--md-sys-color-on-error-container: #fef2f2;--md-sys-color-success: #86efac;--md-sys-color-on-success: #14532d;--md-sys-color-success-container: #166534;--md-sys-color-on-success-container: #f0fdf4;--md-sys-color-surface: #0f172a;--md-sys-color-on-surface: #e2e8f0;--md-sys-color-surface-variant: #334155;--md-sys-color-on-surface-variant: #94a3b8;--md-sys-color-surface-container-lowest: #020617;--md-sys-color-surface-container-low: #0f172a;--md-sys-color-surface-container: #1e293b;--md-sys-color-surface-container-high: #334155;--md-sys-color-surface-container-highest: #475569;--md-sys-color-surface-bright: #475569;--md-sys-color-surface-dim: #0f172a;--md-sys-color-background: #0f172a;--md-sys-color-on-background: #e2e8f0;--md-sys-color-outline: #64748b;--md-sys-color-outline-variant: #334155;--md-sys-color-surface-tint: #93c5fd;--md-sys-color-inverse-surface: #e2e8f0;--md-sys-color-inverse-on-surface: #0f172a;--md-sys-color-inverse-primary: #2563eb;--md-sys-elevation-1: none;--md-sys-elevation-2: none;--md-sys-elevation-3: 0 1px 2px rgba(0,0,0,.3);--md-sys-focus-ring: 0 0 0 3px color-mix(in srgb, var(--md-sys-color-primary) 30%, transparent)}}[data-theme=dark]{--md-sys-color-primary: #93c5fd;--md-sys-color-on-primary: #1e3a8a;--md-sys-color-primary-container: #1e40af;--md-sys-color-on-primary-container: #dbeafe;--md-sys-color-secondary: #94a3b8;--md-sys-color-on-secondary: #1e293b;--md-sys-color-secondary-container: #334155;--md-sys-color-on-secondary-container: #e2e8f0;--md-sys-color-tertiary: #fcd34d;--md-sys-color-on-tertiary: #78350f;--md-sys-color-tertiary-container: #92400e;--md-sys-color-on-tertiary-container: #fef3c7;--md-sys-color-error: #fca5a5;--md-sys-color-on-error: #7f1d1d;--md-sys-color-error-container: #991b1b;--md-sys-color-on-error-container: #fef2f2;--md-sys-color-success: #86efac;--md-sys-color-on-success: #14532d;--md-sys-color-success-container: #166534;--md-sys-color-on-success-container: #f0fdf4;--md-sys-color-surface: #0f172a;--md-sys-color-on-surface: #e2e8f0;--md-sys-color-surface-variant: #334155;--md-sys-color-on-surface-variant: #94a3b8;--md-sys-color-surface-container-lowest: #020617;--md-sys-color-surface-container-low: #0f172a;--md-sys-color-surface-container: #1e293b;--md-sys-color-surface-container-high: #334155;--md-sys-color-surface-container-highest: #475569;--md-sys-color-surface-bright: #475569;--md-sys-color-surface-dim: #0f172a;--md-sys-color-background: #0f172a;--md-sys-color-on-background: #e2e8f0;--md-sys-color-outline: #64748b;--md-sys-color-outline-variant: #334155;--md-sys-color-surface-tint: #93c5fd;--md-sys-color-inverse-surface: #e2e8f0;--md-sys-color-inverse-on-surface: #0f172a;--md-sys-color-inverse-primary: #2563eb;--md-sys-elevation-1: none;--md-sys-elevation-2: none;--md-sys-elevation-3: 0 1px 2px rgba(0,0,0,.3);--md-sys-focus-ring: 0 0 0 3px color-mix(in srgb, var(--md-sys-color-primary) 30%, transparent)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--md-sys-color-surface);min-height:100vh;font:var(--md-sys-typescale-body-medium);color:var(--md-sys-color-on-surface)}a{color:var(--md-sys-color-primary);text-decoration:none}.skip-link{position:absolute;top:-100%;left:0;padding:var(--md-sys-space-xs) var(--md-sys-space-md);background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary);font:var(--md-sys-typescale-label-large);z-index:1000;border-radius:0 0 var(--md-sys-shape-corner-small) 0}.skip-link:focus{top:0}.container{max-width:720px;margin:0 auto;padding:var(--md-sys-space-md) var(--md-sys-space-md) var(--md-sys-space-xl)}.app-footer{text-align:center;padding:var(--md-sys-space-md);font:var(--md-sys-typescale-body-small);color:var(--md-sys-color-on-surface-variant);border-top:1px solid var(--md-sys-color-outline-variant)}.card{background:var(--md-sys-color-surface-container-low);border-radius:var(--md-sys-shape-corner-medium);padding:var(--md-sys-space-lg);margin-bottom:var(--md-sys-space-md);box-shadow:var(--md-sys-elevation-0);transition:box-shadow var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard)}.card-interactive:hover{box-shadow:var(--md-sys-elevation-1)}.card h2{font:var(--md-sys-typescale-title-medium);margin-bottom:var(--md-sys-space-sm)}.form-group{margin-bottom:var(--md-sys-space-300)}.form-group label{display:block;margin-bottom:var(--md-sys-space-xs);font:var(--md-sys-typescale-body-small);color:var(--md-sys-color-on-surface-variant)}.form-group input,.form-group select{width:100%;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:var(--md-sys-shape-corner-small);font:var(--md-sys-typescale-body-medium);background:var(--md-sys-color-surface-container-lowest);color:var(--md-sys-color-on-surface);transition:border-color var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard),box-shadow var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard)}.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--md-sys-color-primary)}.form-group input:focus-visible,.form-group select:focus-visible{outline:none;border-color:var(--md-sys-color-primary);box-shadow:var(--md-sys-focus-ring)}.row{display:flex;gap:var(--md-sys-space-300);flex-wrap:wrap}.row>*{flex:1}.btn{display:inline-flex;align-items:center;gap:var(--md-sys-space-xs);height:48px;padding:0 24px;border:none;border-radius:var(--md-sys-shape-corner-full);font:var(--md-sys-typescale-label-large);cursor:pointer;transition:background var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard),box-shadow var(--md-sys-motion-duration-medium) var(--md-sys-motion-easing-standard),transform var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard)}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:1;background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface-variant);box-shadow:none;cursor:not-allowed}.btn-primary{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary);box-shadow:none}.btn-primary:hover{background:color-mix(in srgb,var(--md-sys-color-on-primary) 8%,var(--md-sys-color-primary));box-shadow:var(--md-sys-elevation-1)}.btn-primary:active:not(:disabled){box-shadow:none}.btn-outline{background:transparent;color:var(--md-sys-color-primary);border:1px solid var(--md-sys-color-outline-variant)}.btn-outline:hover{background:color-mix(in srgb,var(--md-sys-color-primary) 8%,transparent);border-color:var(--md-sys-color-primary)}.btn-text{background:transparent;color:var(--md-sys-color-primary);border:none}.btn-text:hover{background:color-mix(in srgb,var(--md-sys-color-primary) 8%,transparent)}.btn-danger{background:var(--md-sys-color-error);color:var(--md-sys-color-on-error)}.btn-danger:hover{background:color-mix(in srgb,var(--md-sys-color-on-error) 8%,var(--md-sys-color-error));box-shadow:var(--md-sys-elevation-1)}.btn-sm{height:48px;padding:0 16px;font:var(--md-sys-typescale-label-medium)}.btn:focus-visible,.btn-primary:focus-visible,.btn-outline:focus-visible,.btn-text:focus-visible,.btn-danger:focus-visible,.btn-sm:focus-visible{outline:none;box-shadow:var(--md-sys-focus-ring)}.hole-strip{display:flex;gap:var(--md-sys-space-xs);overflow-x:auto;padding:var(--md-sys-space-sm) 0;scrollbar-width:thin}.hole{width:48px;height:48px;min-width:48px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:16px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none;border:2px solid;transition:transform var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard)}.hole .idx{font-size:9px;font-weight:500}.hole:active{transform:scale(.92)}.hole-through{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);border-color:var(--md-sys-color-primary)}.hole-blind{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container);border-color:var(--md-sys-color-tertiary)}.hole-skip{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-outline);border-color:var(--md-sys-color-outline-variant)}.hole:focus-visible{outline:none;box-shadow:var(--md-sys-focus-ring);outline-offset:2px}nav.topbar{display:flex;align-items:center;justify-content:space-between;padding:var(--md-sys-space-300) var(--md-sys-space-lg);background:var(--md-sys-color-surface-container-lowest);border-bottom:1px solid var(--md-sys-color-outline-variant);gap:var(--md-sys-space-300);font:var(--md-sys-typescale-body-medium)}nav.topbar .nav-links{display:flex;gap:var(--md-sys-space-sm);align-items:center}nav.topbar .brand{font:var(--md-sys-typescale-title-medium);color:var(--md-sys-color-primary)}nav.topbar a{padding:var(--md-sys-space-xs) var(--md-sys-space-sm);border-radius:var(--md-sys-shape-corner-small);color:var(--md-sys-color-on-surface-variant);transition:background var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard)}nav.topbar a:hover{text-decoration:none}nav.topbar a.active{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container);font-weight:600}nav.topbar a:focus-visible{outline:none;box-shadow:var(--md-sys-focus-ring)}.alert{padding:var(--md-sys-space-200) var(--md-sys-space-md);border-radius:var(--md-sys-shape-corner-small);font:var(--md-sys-typescale-body-small);margin-bottom:var(--md-sys-space-300)}.alert-ok{background:var(--md-sys-color-success-container);color:var(--md-sys-color-on-success-container);border:1px solid var(--md-sys-color-success)}.alert-err{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border:1px solid var(--md-sys-color-error)}table{width:100%;border-collapse:collapse;font:var(--md-sys-typescale-body-small)}th,td{padding:var(--md-sys-space-sm) var(--md-sys-space-300);text-align:left;border-bottom:1px solid var(--md-sys-color-outline-variant)}th{font:var(--md-sys-typescale-label-medium);color:var(--md-sys-color-on-surface-variant);vertical-align:bottom}tr:hover td{background:color-mix(in srgb,var(--md-sys-color-on-surface) 4%,transparent)}.theme-btn{width:48px;height:48px;border:none;border-radius:50%;background:transparent;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard)}.theme-btn:hover{background:var(--md-sys-color-surface-container-highest)}.theme-btn:focus-visible{outline:none;box-shadow:var(--md-sys-focus-ring)}.text-center{text-align:center}.mt{margin-top:var(--md-sys-space-md)}.mb{margin-bottom:var(--md-sys-space-md)}.hint{margin-top:var(--md-sys-space-xs);font:var(--md-sys-typescale-body-small);color:var(--md-sys-color-on-surface-variant)}.login-page{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - 200px)}.login-card{width:100%;max-width:360px;border:1px solid var(--md-sys-color-outline-variant);box-shadow:none}.login-card .brand-title{font:var(--md-sys-typescale-headline-small);color:var(--md-sys-color-primary);margin-bottom:var(--md-sys-space-xs)}.login-card .brand-subtitle{font:var(--md-sys-typescale-body-small);color:var(--md-sys-color-on-surface-variant);margin-bottom:var(--md-sys-space-md)}@keyframes spin{to{transform:rotate(360deg)}}.spinner{display:inline-block;width:16px;height:16px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle}@keyframes shimmer{0%{background-position:-400px 0}to{background-position:400px 0}}.skeleton{background:linear-gradient(90deg,var(--md-sys-color-surface-variant) 25%,var(--md-sys-color-surface-container-high) 50%,var(--md-sys-color-surface-variant) 75%);background-size:800px 100%;animation:shimmer 1.5s ease-in-out infinite;border-radius:var(--md-sys-shape-corner-small)}.skeleton-row{display:flex;gap:var(--md-sys-space-sm);padding:var(--md-sys-space-200) 0;border-bottom:1px solid var(--md-sys-color-outline-variant)}.skeleton-cell{height:14px;border-radius:4px}.empty-state{text-align:center;padding:var(--md-sys-space-xl) var(--md-sys-space-md)}.empty-state .empty-icon{margin-bottom:var(--md-sys-space-md);opacity:.6;color:var(--md-sys-color-on-surface-variant)}.empty-state .empty-title{font:var(--md-sys-typescale-title-medium);color:var(--md-sys-color-on-surface);margin-bottom:var(--md-sys-space-sm)}.empty-state .empty-desc{font:var(--md-sys-typescale-body-small);color:var(--md-sys-color-on-surface-variant);margin-bottom:var(--md-sys-space-lg)}.type-selector{display:flex;gap:var(--md-sys-space-200)}.wall-input{max-width:200px}.variant-card{border:1px solid var(--md-sys-color-outline-variant);border-radius:var(--md-sys-shape-corner-medium);padding:var(--md-sys-space-sm);margin-bottom:var(--md-sys-space-200);background:var(--md-sys-color-surface-container-low)}.variant-header{display:flex;gap:var(--md-sys-space-sm);align-items:center;margin-bottom:var(--md-sys-space-xs)}.variant-header label{font:var(--md-sys-typescale-body-small)}.variant-header input{flex:1;min-width:80px;padding:6px 10px;border:1px solid var(--md-sys-color-outline-variant);border-radius:var(--md-sys-shape-corner-small);font:var(--md-sys-typescale-body-small);background:var(--md-sys-color-surface-container-lowest);color:var(--md-sys-color-on-surface)}.variant-header input:focus-visible{outline:none;border-color:var(--md-sys-color-primary);box-shadow:var(--md-sys-focus-ring)}.preset-bar{display:flex;gap:var(--md-sys-space-xs);flex-wrap:wrap;margin-bottom:var(--md-sys-space-xs)}.result-list{list-style:none;display:flex;flex-direction:column;gap:var(--md-sys-space-xs)}.result-link{display:block;padding:var(--md-sys-space-200) var(--md-sys-space-md);background:var(--md-sys-color-success-container);border:1px solid var(--md-sys-color-success);border-radius:var(--md-sys-shape-corner-small);color:var(--md-sys-color-on-success-container);transition:background var(--md-sys-motion-duration-short) var(--md-sys-motion-easing-standard)}.result-link:hover{background:color-mix(in srgb,var(--md-sys-color-success-container) 85%,var(--md-sys-color-on-success-container))}.error-block{margin-top:var(--md-sys-space-200);padding:var(--md-sys-space-200);background:var(--md-sys-color-inverse-surface);color:var(--md-sys-color-error);border-radius:var(--md-sys-shape-corner-small);font:var(--md-sys-typescale-body-small);white-space:pre-wrap;max-height:200px;overflow-y:auto}.error-title{color:var(--md-sys-color-error)}.pagination{display:flex;justify-content:space-between;align-items:center;margin-top:var(--md-sys-space-300)}.pagination-info{font:var(--md-sys-typescale-body-small);color:var(--md-sys-color-on-surface-variant)}.pagination-btns{display:flex;gap:var(--md-sys-space-xs)}.status-badge{display:inline-block;padding:2px 8px;border-radius:var(--md-sys-shape-corner-small);font:var(--md-sys-typescale-label-small);white-space:nowrap}.status-done{background:var(--md-sys-color-success-container);color:var(--md-sys-color-on-success-container)}.status-failed{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.status-processing{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.status-pending{background:var(--md-sys-color-surface-container-highest);color:var(--md-sys-color-on-surface-variant)}.error-page{text-align:center;padding:var(--md-sys-space-xl) var(--md-sys-space-md);max-width:480px;margin:80px auto 0}.error-page .error-code{font:var(--md-sys-typescale-headline-small);color:var(--md-sys-color-error);margin-bottom:var(--md-sys-space-sm)}.error-page .error-message{font:var(--md-sys-typescale-body-medium);color:var(--md-sys-color-on-surface-variant);margin-bottom:var(--md-sys-space-lg)}@media(max-width:480px){.container{padding:var(--md-sys-space-200)}.card{padding:var(--md-sys-space-md)}.hole{width:48px;height:48px;min-width:48px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(forced-colors:active){.btn{border:1px solid ButtonBorder}.card{border:1px solid CanvasText}input,select{border:1px solid ButtonBorder}}
