:root{--color-primary:#2563eb;--color-primary-hover:#1d4ed8;--color-primary-light:#dbeafe;--color-primary-dark:#1e40af;--color-bg:#fff;--color-bg-secondary:#f8fafc;--color-bg-tertiary:#f1f5f9;--color-surface:#fff;--color-surface-hover:#f8fafc;--color-border:#e2e8f0;--color-border-strong:#cbd5e1;--color-text:#0f172a;--color-text-secondary:#475569;--color-text-tertiary:#94a3b8;--color-text-inverse:#fff;--color-success:#16a34a;--color-success-bg:#dcfce7;--color-warning:#d97706;--color-warning-bg:#fef3c7;--color-error:#dc2626;--color-error-bg:#fee2e2;--color-info:#2563eb;--color-info-bg:#dbeafe;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--shadow-sm:0 1px 2px 0 rgba(0,0,0,.05);--shadow-md:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--font-sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;--font-mono:"Fira Code","Cascadia Code","JetBrains Mono",Consolas,"Courier New",monospace;--sidebar-width:260px;--topbar-height:56px}@media (prefers-color-scheme:dark){:root{--color-bg:#0f172a;--color-bg-secondary:#1e293b;--color-bg-tertiary:#334155;--color-surface:#1e293b;--color-surface-hover:#334155;--color-border:#334155;--color-border-strong:#475569;--color-text:#f1f5f9;--color-text-secondary:#94a3b8;--color-text-tertiary:#64748b;--color-primary-light:#1e3a5f;--color-success-bg:#052e16;--color-warning-bg:#451a03;--color-error-bg:#450a0a;--color-info-bg:#172554}}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{text-size-adjust:100%;line-height:1.5;-moz-tab-size:4;tab-size:4}body{font-family:var(--font-sans);color:var(--color-text);background-color:var(--color-bg);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}img,svg{display:block;max-width:100%}h1,h2,h3,h4,h5,h6{line-height:1.25;font-weight:600;color:var(--color-text)}h1{font-size:2.25rem}h2{font-size:1.75rem}h3{font-size:1.375rem}h4{font-size:1.125rem}p{color:var(--color-text-secondary)}code,pre{font-family:var(--font-mono)}pre{background:var(--color-bg-secondary);padding:16px;overflow-x:auto;font-size:.875rem;line-height:1.7}input,pre,select,textarea{border:1px solid var(--color-border);border-radius:var(--radius-md)}input,select,textarea{font-family:inherit;font-size:.9375rem;padding:10px 14px;background:var(--color-bg);color:var(--color-text);width:100%;transition:border-color .15s ease,box-shadow .15s ease}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}input::placeholder,textarea::placeholder{color:var(--color-text-tertiary)}label{display:block;font-size:.875rem;font-weight:500;color:var(--color-text);margin-bottom:6px}.btn,button{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:inherit;font-size:.9375rem;font-weight:500;padding:10px 20px;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;transition:background-color .15s ease,border-color .15s ease,color .15s ease;line-height:1}.btn-primary{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.btn-primary:hover{background:var(--color-primary-hover);text-decoration:none}.btn-secondary{background:var(--color-bg);color:var(--color-text);border-color:var(--color-border)}.btn-secondary:hover{background:var(--color-bg-secondary);text-decoration:none}.btn-danger{background:var(--color-error);color:var(--color-text-inverse);border-color:var(--color-error)}.btn-danger:hover{background:#b91c1c;text-decoration:none}.btn-ghost{background:transparent;color:var(--color-text-secondary);border:none}.btn-ghost:hover{background:var(--color-bg-tertiary);color:var(--color-text);text-decoration:none}.btn-sm{font-size:.8125rem;padding:6px 12px}.btn-lg{font-size:1.0625rem;padding:14px 28px}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:24px;box-shadow:var(--shadow-sm)}.card-hover:hover{box-shadow:var(--shadow-md);border-color:var(--color-border-strong)}table{width:100%;border-collapse:collapse}td,th{text-align:left;padding:12px 16px;border-bottom:1px solid var(--color-border);font-size:.875rem}th{font-weight:600;color:var(--color-text-secondary);background:var(--color-bg-secondary)}tr:hover td{background:var(--color-surface-hover)}.badge{display:inline-flex;align-items:center;padding:2px 10px;font-size:.75rem;font-weight:600;border-radius:9999px;text-transform:capitalize;white-space:nowrap}.badge-blue{background:var(--color-info-bg);color:var(--color-info)}.badge-green{background:var(--color-success-bg);color:var(--color-success)}.badge-yellow{background:var(--color-warning-bg);color:var(--color-warning)}.badge-red{background:var(--color-error-bg);color:var(--color-error)}.badge-gray{background:var(--color-bg-tertiary);color:var(--color-text-secondary)}.container{max-width:1200px;margin:0 auto;padding:0 24px}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-sm{gap:8px}.gap-md{gap:16px}.gap-lg{gap:24px}.gap-xl{gap:32px}.grid-2{grid-template-columns:repeat(2,1fr);grid-gap:24px}.grid-2,.grid-3{display:grid;gap:24px}.grid-3{grid-template-columns:repeat(3,1fr);grid-gap:24px}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:24px;gap:24px}@media (max-width:768px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.container{padding:0 16px}}.mt-sm{margin-top:8px}.mt-md{margin-top:16px}.mt-lg{margin-top:24px}.mt-xl{margin-top:32px}.mb-sm{margin-bottom:8px}.mb-md{margin-bottom:16px}.mb-lg{margin-bottom:24px}.mb-xl{margin-bottom:32px}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-center{text-align:center}.text-right{text-align:right}.text-secondary{color:var(--color-text-secondary)}.text-tertiary{color:var(--color-text-tertiary)}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.form-group{margin-bottom:20px}.form-error{font-size:.8125rem;color:var(--color-error);margin-top:4px}.form-row{display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px}@media (max-width:600px){.form-row{grid-template-columns:1fr}}.alert{padding:12px 16px;border-radius:var(--radius-md);font-size:.875rem;margin-bottom:16px}.alert-error{background:var(--color-error-bg);color:var(--color-error);border:1px solid var(--color-error)}.alert-success{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success)}.alert-info{background:var(--color-info-bg);color:var(--color-info);border:1px solid var(--color-info)}.copyable-box{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px 16px;font-family:var(--font-mono);font-size:.875rem;gap:12px;word-break:break-all}.copyable-box,.page-header{display:flex;align-items:center;justify-content:space-between}.page-header{margin-bottom:24px}.page-header h1,.page-header h2{margin:0}.skeleton{background:var(--color-bg-tertiary);border-radius:var(--radius-sm);animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.pagination{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:24px}.pagination button{min-width:36px;height:36px;padding:0 10px;border-radius:var(--radius-md);font-size:.875rem}.pagination button.active{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.timeline{position:relative;padding-left:28px}.timeline:before{content:"";position:absolute;left:8px;top:4px;bottom:4px;width:2px;background:var(--color-border)}.timeline-item{position:relative;padding-bottom:20px}.timeline-item:before{content:"";position:absolute;left:-24px;top:4px;width:12px;height:12px;border-radius:50%;background:var(--color-border-strong);border:2px solid var(--color-bg)}.timeline-item.active:before{background:var(--color-primary)}.timeline-item.completed:before{background:var(--color-success)}