*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg-900: #0d0814;--bg-800: #170f23;--bg-700: #221633;--bg-600: #2e1d44;--surface: #1e1630;--surface-hover: #2a1f42;--accent-1: #f7931e;--accent-2: #ffd166;--accent-3: #8b5cf6;--bone: #e8e0d0;--bone-muted: #b0a89a;--danger: #ef4444;--success: #22c55e;--warn: #f59e0b;--rule-event: #f7931e;--rule-last-minute: #ef4444;--rule-high-demand: #a78bfa;--rule-weekend: #60a5fa;--rule-fallback: #94a3b8;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--shadow: 0 4px 24px rgba(0, 0, 0, .6);--shadow-sm: 0 2px 8px rgba(0, 0, 0, .4);--font: "Segoe UI", system-ui, -apple-system, sans-serif;--mono: "JetBrains Mono", "Fira Code", "Cascadia Code", monospace;--touch-min: 44px}html{font-size:16px;scroll-behavior:smooth}body{background:var(--bg-900);color:var(--bone);font-family:var(--font);line-height:1.6;min-height:100dvh;display:flex;flex-direction:column}h1,h2,h3{line-height:1.2}code,pre{font-family:var(--mono);font-size:.85em}.app-header{background:var(--bg-800);border-bottom:1px solid var(--bg-600);position:sticky;top:0;z-index:100;box-shadow:var(--shadow-sm)}.header-inner{max-width:1200px;margin:0 auto;padding:12px 20px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}.app-title{font-size:clamp(1.2rem,2.5vw,1.6rem);color:var(--accent-2);display:flex;align-items:baseline;gap:8px;flex:1}.title-icon{font-size:1.4em}.title-sub{font-size:.55em;color:var(--bone-muted);font-weight:400;letter-spacing:.04em;text-transform:uppercase}.header-actions{display:flex;gap:10px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:6px;padding:10px 18px;border-radius:var(--radius-md);font-size:.95rem;font-weight:600;cursor:pointer;border:none;min-height:var(--touch-min);min-width:var(--touch-min);text-decoration:none;transition:filter .15s,background .15s;white-space:nowrap}.btn:focus-visible{outline:3px solid var(--accent-1);outline-offset:2px}.btn-primary{background:var(--accent-1);color:#1a0a00}.btn-primary:hover{filter:brightness(1.1)}.btn-secondary{background:var(--bg-600);color:var(--bone);border:1px solid var(--accent-3)}.btn-secondary:hover{background:var(--surface-hover)}#file-input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;pointer-events:none}#app-main{flex:1;max-width:1200px;width:100%;margin:0 auto;padding:24px 20px;display:flex;flex-direction:column;gap:28px}.drop-zone{border:2px dashed var(--accent-3);border-radius:var(--radius-lg);padding:60px 40px;text-align:center;background:var(--surface);transition:background .2s,border-color .2s}.drop-zone.drag-over{background:var(--bg-600);border-color:var(--accent-1)}.drop-zone-inner{max-width:480px;margin:0 auto}.drop-icon{font-size:4rem;margin-bottom:16px;animation:float 3s ease-in-out infinite}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.drop-title{font-size:1.5rem;font-weight:700;color:var(--accent-2);margin-bottom:10px}.drop-hint{color:var(--bone-muted);font-size:.95rem;line-height:1.7}.drop-hint code{background:var(--bg-700);padding:2px 5px;border-radius:4px;color:var(--accent-2)}.drop-error{margin-top:16px;padding:12px 16px;background:#ef444426;border:1px solid var(--danger);border-radius:var(--radius-sm);color:#fca5a5;font-size:.9rem}.viewer{display:flex;flex-direction:column;gap:28px}.trace-meta{background:var(--surface);border:1px solid var(--bg-600);border-radius:var(--radius-md);padding:14px 20px;display:flex;align-items:center;gap:24px;flex-wrap:wrap}.meta-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--bone-muted);display:block}.meta-value{font-size:1.05rem;font-weight:600;color:var(--accent-2)}.meta-version{font-size:.8rem;color:var(--bone-muted);margin-left:4px}.meta-agent,.meta-steps{display:flex;flex-direction:column;gap:2px}.meta-hash-badge{margin-left:auto;display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:999px;font-size:.9rem;font-weight:700;border:2px solid var(--bone-muted);color:var(--bone-muted);background:transparent;transition:border-color .3s,color .3s,background .3s}.meta-hash-badge.verified{border-color:var(--success);color:var(--success);background:#22c55e1a}.meta-hash-badge.broken{border-color:var(--danger);color:#fca5a5;background:#ef44441a}.badge-spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.section-title{font-size:1.05rem;font-weight:700;color:var(--accent-1);text-transform:uppercase;letter-spacing:.06em;display:flex;align-items:center;gap:8px;margin-bottom:12px}.timeline-section{background:var(--surface);border:1px solid var(--bg-600);border-radius:var(--radius-md);padding:20px}.timeline{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-start}.timeline-item{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer;padding:10px 14px;border-radius:var(--radius-sm);border:2px solid transparent;background:var(--bg-700);transition:background .15s,border-color .15s,transform .15s;min-width:90px;min-height:var(--touch-min);text-align:center;list-style:none;flex:1;max-width:200px}.timeline-item:focus-visible{outline:3px solid var(--accent-1);outline-offset:2px}.timeline-item:hover{background:var(--surface-hover);transform:translateY(-2px)}.timeline-item.active{border-color:var(--accent-1);background:var(--bg-600)}.timeline-item.changed{border-style:dashed}.timeline-step{font-size:.75rem;color:var(--bone-muted)}.timeline-rule{font-size:.8rem;font-weight:700}.timeline-price{font-size:1.1rem;font-weight:800;color:var(--accent-2);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow-wrap:break-word}.timeline-date{font-size:.72rem;color:var(--bone-muted)}.rule-event-surge{color:var(--rule-event)}.rule-last-minute{color:var(--rule-last-minute)}.rule-high-demand{color:var(--rule-high-demand)}.rule-weekend{color:var(--rule-weekend)}.rule-fallback{color:var(--rule-fallback)}.scrubber-section{display:flex;align-items:center;gap:12px;padding:16px 20px;background:var(--surface);border:1px solid var(--bg-600);border-radius:var(--radius-md)}.scrubber-btn{background:var(--bg-600);color:var(--bone);border:1px solid var(--accent-3);border-radius:var(--radius-sm);width:var(--touch-min);height:var(--touch-min);font-size:1.2rem;cursor:pointer;flex-shrink:0;transition:background .15s;display:flex;align-items:center;justify-content:center}.scrubber-btn:hover{background:var(--surface-hover)}.scrubber-btn:focus-visible{outline:3px solid var(--accent-1);outline-offset:2px}.scrubber-input{flex:1;height:6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-600);border-radius:999px;outline:none;cursor:pointer;accent-color:var(--accent-1)}.scrubber-input::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:22px;height:22px;border-radius:50%;background:var(--accent-1);cursor:pointer;box-shadow:var(--shadow-sm)}.scrubber-input:focus-visible{outline:3px solid var(--accent-1);outline-offset:4px}.scrubber-label{font-size:.9rem;color:var(--bone-muted);white-space:nowrap;min-width:90px;text-align:right}.step-detail-section{background:var(--surface);border:1px solid var(--bg-600);border-radius:var(--radius-md);padding:20px}.step-detail-card{display:flex;flex-direction:column;gap:16px}.step-detail-placeholder{color:var(--bone-muted);font-style:italic}.detail-header{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.detail-rule-badge{font-size:1rem;font-weight:800;padding:5px 12px;border-radius:999px;background:var(--bg-700);border:2px solid currentColor}.detail-time{font-size:.85rem;color:var(--bone-muted)}.detail-reason{background:var(--bg-700);border-left:4px solid var(--accent-1);padding:12px 16px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:.95rem;font-style:italic;color:var(--bone)}.detail-grids{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;min-width:0}@media(max-width:700px){.detail-grids{grid-template-columns:1fr}}.detail-block{background:var(--bg-700);border-radius:var(--radius-sm);padding:14px;min-width:0}.detail-block-title{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--bone-muted);margin-bottom:8px}.detail-block pre{font-size:.82rem;color:var(--accent-2);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;line-height:1.5;min-width:0}.detail-hash{font-size:.72rem;color:var(--bone-muted);font-family:var(--mono);word-break:break-all;background:var(--bg-700);padding:10px;border-radius:var(--radius-sm)}.detail-hash span{color:var(--accent-3)}.whatif-section{background:var(--surface);border:1px solid var(--bg-600);border-radius:var(--radius-md);padding:20px}.whatif-controls{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap}.whatif-label{font-size:.9rem;color:var(--bone-muted)}.whatif-select{background:var(--bg-700);color:var(--bone);border:1px solid var(--accent-3);border-radius:var(--radius-sm);padding:8px 14px;font-size:.95rem;cursor:pointer;min-height:var(--touch-min);min-width:240px}.whatif-select:focus-visible{outline:3px solid var(--accent-1);outline-offset:2px}.whatif-empty{color:var(--bone-muted);font-style:italic}.whatif-no-scenarios{color:var(--bone-muted);font-style:italic;margin:0}.whatif-summary{padding:12px 16px;background:#8b5cf61a;border:1px solid var(--accent-3);border-radius:var(--radius-sm);margin-bottom:16px;font-size:.9rem}.whatif-diffs{display:flex;flex-direction:column;gap:10px}.whatif-no-change{padding:12px 16px;background:#22c55e1a;border:1px solid var(--success);border-radius:var(--radius-sm);color:#86efac;font-size:.9rem}.whatif-diff-row{background:var(--bg-700);border-radius:var(--radius-sm);padding:16px;border-left:4px solid var(--accent-3);min-width:0;overflow-wrap:anywhere}.whatif-diff-step{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--bone-muted);margin-bottom:4px}.whatif-diff-title{font-size:.95rem;font-weight:700;color:var(--accent-2);margin-bottom:12px;overflow-wrap:anywhere}.diff-fields{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.diff-field{display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;min-width:0}.diff-field-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--bone-muted);flex-shrink:0;min-width:80px}.diff-field-values{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;min-width:0;font-size:.9rem;overflow-wrap:anywhere;word-break:break-word}.diff-orig{color:var(--bone);white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.diff-orig--crossed{color:#fca5a5;text-decoration:line-through;opacity:.85}.diff-arrow{color:var(--bone-muted);flex-shrink:0}.diff-scenario{color:var(--bone);white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.diff-scenario--highlight{color:#86efac;font-weight:600}.diff-raw{margin-top:8px}.diff-raw-toggle{font-size:.8rem;color:var(--bone-muted);cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none;display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:var(--radius-sm);border:1px solid var(--bg-600);background:var(--bg-800);transition:background .15s}.diff-raw-toggle:hover{background:var(--surface-hover);color:var(--bone)}.diff-raw-toggle::-webkit-details-marker{display:none}.diff-raw-toggle:before{content:"▶";font-size:.65em;transition:transform .15s}details[open] .diff-raw-toggle:before{transform:rotate(90deg)}.diff-raw-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}@media(max-width:700px){.diff-raw-grid{grid-template-columns:1fr}}.diff-raw-block{background:var(--bg-900);border-radius:var(--radius-sm);padding:10px;min-width:0}.diff-raw-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-3);margin-bottom:6px}.diff-raw-pre{font-size:.78rem;color:var(--accent-2);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;line-height:1.5;min-width:0;margin:0}.app-footer{background:var(--bg-800);border-top:1px solid var(--bg-600);text-align:center;padding:14px 20px;font-size:.82rem;color:var(--bone-muted)}@media(max-width:640px){.header-inner,.trace-meta{flex-direction:column;align-items:flex-start}.meta-hash-badge{margin-left:0}.timeline-item{min-width:70px;padding:8px 10px}.scrubber-section{flex-wrap:wrap}.scrubber-label{width:100%;text-align:center}}*:focus-visible{outline:3px solid var(--accent-1);outline-offset:2px}
