:root{--color-ink: #1a1a1a;--color-ink-2: #374151;--color-muted: #6b7280;--color-faint: #9ca3af;--color-line: rgba(0, 0, 0, .1);--color-line-strong: rgba(0, 0, 0, .18);--color-bg: #f7f7f5;--color-card: #ffffff;--color-card-tint: #f9fafb;--color-overlay: rgba(15, 15, 15, .32);--color-success-bg: #EAF3DE;--color-success-ink: #3B6D11;--color-warn-bg: #FAEEDA;--color-warn-ink: #854F0B;--color-error-bg: #FCEBEB;--color-error-ink: #A32D2D;--color-accent: #1a1a1a;--font-ui: ui-sans-serif, system-ui, -apple-system, "Segoe UI", "Helvetica Neue", Roboto, sans-serif;--font-mono: ui-monospace, "SF Mono", Menlo, Monaco, "Cascadia Mono", "Roboto Mono", monospace;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--sp-7: 48px;--r-1: 6px;--r-2: 8px;--r-3: 12px;--r-4: 16px;--touch-inline: 38px;--touch-primary: 48px;--touch-key: 64px}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%}body{font-family:var(--font-ui);font-size:14px;color:var(--color-ink);background:var(--color-bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:none}.mono{font-family:var(--font-mono)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--touch-inline);padding:0 16px;border-radius:var(--r-2);border:1px solid transparent;font-family:var(--font-ui);font-size:13px;font-weight:500;letter-spacing:.01em;cursor:pointer;white-space:nowrap;background:transparent;color:var(--color-ink);transition:opacity .12s,background .12s,border-color .12s}.btn.btn-primary{background:var(--color-ink);color:#fff;border-color:var(--color-ink)}.btn.btn-primary:hover{opacity:.85}.btn.btn-primary:disabled{opacity:.35;cursor:not-allowed}.btn.btn-success{background:var(--color-success-ink);color:#fff;border-color:var(--color-success-ink)}.btn.btn-success:hover{opacity:.85}.btn.btn-success:disabled{opacity:.35;cursor:not-allowed}.btn.btn-secondary{background:var(--color-card);border-color:var(--color-line-strong)}.btn.btn-secondary:hover{background:var(--color-card-tint)}.btn.btn-ghost{color:var(--color-ink-2)}.btn.btn-ghost:hover{background:var(--color-card-tint)}.btn.btn-lg{height:var(--touch-primary);padding:0 22px;font-size:14px}.btn.btn-danger{color:var(--color-error-ink)}.input,.select,.textarea{width:100%;font-family:var(--font-ui);font-size:13px;color:var(--color-ink);background:var(--color-card);border:1px solid var(--color-line-strong);border-radius:var(--r-2);padding:8px 10px;outline:none;transition:border-color .12s,box-shadow .12s}.input:focus,.select:focus,.textarea:focus{border-color:var(--color-ink);box-shadow:0 0 0 3px #1a1a1a0f}.input.mono,.textarea.mono{font-family:var(--font-mono)}.textarea{resize:vertical;min-height:80px;line-height:1.5}.card{background:var(--color-card);border:1px solid var(--color-line);border-radius:var(--r-3);overflow:hidden}.card-header{padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--color-line);font-weight:500;font-size:14px}.card-body{padding:var(--sp-5)}.table{width:100%;border-collapse:collapse;font-size:13px}.table th{text-align:left;padding:10px 14px;font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.06em;color:var(--color-faint);border-bottom:1px solid var(--color-line);background:var(--color-card-tint)}.table td{padding:12px 14px;vertical-align:middle;border-bottom:1px solid var(--color-line)}.table tbody tr:last-child td{border-bottom:none}.table tbody tr:hover td{background:var(--color-card-tint)}.table.clickable tbody tr{cursor:pointer}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:500;padding:3px 9px;border-radius:20px;font-family:var(--font-mono);letter-spacing:.01em}.badge-neutral{background:var(--color-card-tint);color:var(--color-muted)}.badge-partial{background:var(--color-warn-bg);color:var(--color-warn-ink)}.badge-success{background:var(--color-success-bg);color:var(--color-success-ink)}.badge-error{background:var(--color-error-bg);color:var(--color-error-ink)}.badge-lg{font-size:14px;font-weight:600;padding:6px 14px;border-radius:24px;letter-spacing:.02em}.section-label{font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--color-faint);margin-bottom:8px}.stack{display:flex;flex-direction:column}.stack-2>*+*{margin-top:var(--sp-2)}.stack-3>*+*{margin-top:var(--sp-3)}.stack-4>*+*{margin-top:var(--sp-4)}.stack-5>*+*{margin-top:var(--sp-5)}.stack-6>*+*{margin-top:var(--sp-6)}.row{display:flex;align-items:center;gap:var(--sp-3)}.row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}.flex-1{flex:1}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.muted{color:var(--color-muted)}.faint{color:var(--color-faint)}.small{font-size:12px}.tiny{font-size:11px}.medium{font-weight:500}.page{max-width:1200px;margin:0 auto;padding:24px 32px 64px}.page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.page-title{font-size:22px;font-weight:500;letter-spacing:-.01em;margin:0}.page-subtitle{color:var(--color-muted);font-size:13px;margin:2px 0 0}label.field{display:block}label.field>.label{display:block;font-size:11px;color:var(--color-muted);margin-bottom:4px;font-weight:500;letter-spacing:.04em;text-transform:uppercase}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4)}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-4)}@media (max-width: 640px){.grid-2,.grid-3{grid-template-columns:1fr}.page{padding:16px 16px 48px}}@media (max-width: 900px){.page-header{flex-direction:column;align-items:stretch;gap:12px}.page-header>*{min-width:0}.page-header>*:last-child:not(:only-child){flex-wrap:wrap}.page-header .btn,.page-header a.btn{min-height:44px}}@media (max-width: 600px){.more-menu{right:auto!important;left:0!important;max-width:calc(100vw - 32px)}}.mobile-only{display:none}@media (max-width: 600px){.mobile-only{display:block}.desktop-only{display:none!important}}.mobile-cards{flex-direction:column;gap:8px;padding:12px}@media (max-width: 600px){.mobile-cards{display:flex}}.mcard{background:var(--color-card);border:1px solid var(--color-line);border-radius:var(--r-3);padding:14px;color:inherit;text-decoration:none;display:block;min-height:72px}.mcard:hover{background:var(--color-card-tint)}.mcard .mcard-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.mcard .mcard-title{min-width:0}.mcard .mcard-name{font-size:15px;line-height:1.25;font-weight:500;color:var(--color-ink)}.mcard .mcard-sub{font-family:var(--font-mono);font-size:12px;color:var(--color-muted);margin-top:4px}.mcard .mcard-meta{display:grid;grid-template-columns:1fr 1fr auto;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--color-line);align-items:end}.mcard .mcard-meta .k{font-family:var(--font-mono);font-size:9px;letter-spacing:.07em;color:var(--color-muted);text-transform:uppercase}.mcard .mcard-meta .v{font-family:var(--font-mono);font-size:13px;margin-top:4px;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--color-ink)}.mcard .mcard-meta .v.big{font-size:15px;font-weight:500}.mcard .mcard-meta .right{text-align:right}.mobile-stepper{display:inline-flex;align-items:center;border:1px solid var(--color-line-strong);border-radius:var(--r-2);overflow:hidden;background:var(--color-card)}.mobile-stepper button{width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;font-size:18px;color:var(--color-muted);background:transparent;border:none;cursor:pointer;font-family:var(--font-ui)}.mobile-stepper button:disabled{opacity:.3;cursor:not-allowed}.mobile-stepper input{width:52px;height:44px;text-align:center;font-family:var(--font-mono);font-size:16px;border:none;border-left:1px solid var(--color-line);border-right:1px solid var(--color-line);background:var(--color-card);color:var(--color-ink);-moz-appearance:textfield;padding:0}.mobile-stepper input::-webkit-outer-spin-button,.mobile-stepper input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.mobile-stepper input:disabled{background:var(--color-card-tint);color:var(--color-muted)}.mobile-commit-bar,.mobile-commit-spacer{display:none}@media (max-width: 600px){.mobile-commit-bar{display:block;position:fixed;bottom:0;left:0;right:0;background:var(--color-card);border-top:1px solid var(--color-line-strong);padding:10px 16px calc(14px + env(safe-area-inset-bottom)) 16px;box-shadow:0 -4px 12px #0000000d;z-index:30}.mobile-commit-bar .btn{width:100%;min-height:52px;font-size:15px;justify-content:center}.mobile-commit-spacer{display:block;height:84px}}@media (max-width: 600px){.toolbar{flex-direction:column;align-items:stretch;gap:10px}.toolbar .left,.toolbar .right{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}.toolbar .left>.input,.toolbar .right>.input{grid-column:1 / -1;width:100%!important}.toolbar .left>.select,.toolbar .right>.select{width:100%!important}.toolbar .input,.toolbar .select{min-height:44px;font-size:16px}}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;flex-wrap:wrap}.toolbar .left,.toolbar .right{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.coming-soon{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:96px 32px;text-align:center;color:var(--color-muted)}.coming-soon .icon{font-size:32px;opacity:.4;margin-bottom:16px}.coming-soon h2{font-size:18px;font-weight:500;color:var(--color-ink);margin:0 0 8px}.coming-soon p{font-size:13px;max-width:360px;margin:0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-overlay);display:flex;align-items:center;justify-content:center;padding:24px;z-index:100}.modal{background:var(--color-card);border-radius:var(--r-3);border:1px solid var(--color-line);width:100%;max-width:460px;overflow:hidden}.modal-header{padding:18px 22px;border-bottom:1px solid var(--color-line)}.modal-body{padding:18px 22px}.modal-footer{padding:14px 22px;border-top:1px solid var(--color-line);display:flex;justify-content:flex-end;gap:8px}.spinner{width:14px;height:14px;border:2px solid var(--color-line-strong);border-top-color:var(--color-ink);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty{padding:56px 32px;text-align:center;color:var(--color-muted);font-size:13px}
