:root{--paper-bg: #f7f9fc;--paper-card: #ffffff;--paper-border: #e2e8f0;--paper-border-strong: #cfd8e3;--text-main: #1f2937;--text-muted: #5f6b7a;--text-soft: #8993a1;--accent: #c53b2f;--accent-soft: rgba(197, 59, 47, .12);--pac: #e07a1f;--pvc: #d94a4a;--normal: #2f9f62;--surface-ring: rgba(31, 41, 55, .04);--shadow-sm: 0 2px 8px rgba(15, 23, 42, .05);--shadow-md: 0 8px 28px rgba(15, 23, 42, .06)}.app-shell{min-height:100vh;padding:.6rem .8rem;display:flex;flex-direction:column;gap:.5rem;color:var(--text-main);background:var(--paper-bg)}.toolbar{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.5rem 1rem;padding:.5rem .8rem;background:#fff;border:1px solid var(--paper-border);border-radius:.7rem;box-shadow:var(--shadow-sm)}.toolbar h1{margin:0;font-size:1.1rem;line-height:1.2;letter-spacing:-.02em;white-space:nowrap}.toolbar__record{display:flex;align-items:center;gap:.6rem}.toolbar__record p{margin:0;color:var(--text-muted);font-size:.8rem}.dataset-control{display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:var(--text-muted)}.dataset-control label{display:none}.dataset-control select{border-radius:.5rem;border:1px solid var(--paper-border-strong);background:#fff;color:inherit;padding:.2rem .5rem;min-width:180px;font-size:.8rem}.dataset-meta{margin:0;font-size:.75rem;color:var(--text-soft)}.file-input-label{cursor:pointer;text-decoration:underline}.file-input-label input{display:none}.toolbar__controls{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.5rem}.control-group{display:flex;gap:.25rem;padding:.12rem;border:1px solid var(--paper-border);border-radius:999px;background:#f9fbff}.control-group.presets button{min-width:2.5rem}.control-group button{padding:.25rem .65rem;border-color:transparent;background:transparent;font-size:.78rem}.control-group .active{background:#c53b2f2e;color:#8c231f;border-color:#c53b2f99}.zoom-slider{flex:0 1 160px;min-width:100px;display:flex;align-items:center;padding:.15rem .3rem;border-radius:999px;border:1px solid var(--paper-border);background:#fbfdff}.zoom-slider input[type=range]{width:100%;accent-color:var(--accent)}button{border:1px solid var(--paper-border);background:#fff;color:inherit;border-radius:999px;cursor:pointer;transition:background .15s,border .15s}button:hover:not(:disabled){border-color:var(--accent);background:#fff7f5}button:disabled{opacity:.5;cursor:not-allowed}.toolbar__meter{display:flex;flex-direction:column;align-items:flex-end;font-size:.78rem;color:var(--text-muted);padding:.2rem .5rem;border-radius:.5rem;border:1px solid var(--paper-border);background:#fcfdff;line-height:1.3}.toolbar__meter strong{font-size:1rem}.summary-ribbon{display:flex;flex-direction:column;gap:.3rem;background:#fff;border:1px solid var(--paper-border);border-radius:.7rem;padding:.4rem .6rem;box-shadow:var(--shadow-sm)}.summary-bar{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;font-size:.78rem}.summary-chip{padding:.15rem .45rem;border-radius:4px;border:1.5px solid;font-weight:600;font-size:.75rem;white-space:nowrap}.summary-sep{width:1px;height:16px;background:var(--paper-border-strong);margin:0 .15rem}.summary-stat{color:var(--text-muted);font-size:.75rem;white-space:nowrap}.summary-stat strong{font-size:.85rem;color:var(--text-main)}.main-grid{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:.5rem;flex:1;min-height:0}.waveform-stack{display:flex;flex-direction:column;min-height:0}.heatmap-overview{position:relative;border-radius:.5rem;background:#fff;border:1px solid var(--paper-border);padding:.35rem .4rem}.heatmap-overview canvas{width:100%;border-radius:.4rem;cursor:crosshair;border:1px solid #efe8e8}.heatmap-overview__ticks{position:absolute;top:.25rem;left:.4rem;right:.4rem;display:flex;justify-content:space-between;font-size:.65rem;color:var(--text-soft);pointer-events:none}.heatmap-overview__ticks span{position:absolute;transform:translate(-50%)}.heatmap-overview.empty{color:var(--text-muted);text-align:center}.waveform-viewport{position:relative;border-radius:.7rem;border:1px solid var(--paper-border);background:#fff;overflow:auto;-webkit-user-select:none;user-select:none;min-height:clamp(500px,60vh,780px);box-shadow:var(--shadow-sm)}.waveform-viewport canvas{display:block}.waveform-viewport.empty{display:flex;align-items:center;justify-content:center;min-height:200px}.side-panel{border-radius:.7rem;border:1px solid var(--paper-border);background:#fff;padding:.6rem;display:flex;flex-direction:column;gap:.5rem;max-height:100%;overflow:auto;box-shadow:var(--shadow-sm)}.side-panel-tabs{display:flex;gap:0;border:1px solid var(--paper-border);border-radius:.5rem;overflow:hidden}.side-panel-tabs button{flex:1;border:none;border-radius:0;padding:.35rem .5rem;font-size:.78rem;font-weight:600;background:#f8fafc;color:var(--text-muted);cursor:pointer;transition:background .15s}.side-panel-tabs button:hover{background:#f1f5f9}.side-panel-tabs button.active{background:var(--accent);color:#fff}.side-panel-tabs button+button{border-left:1px solid var(--paper-border)}.side-panel section{border-bottom:1px solid var(--paper-border);padding-bottom:.5rem}.side-panel section:last-of-type{border-bottom:none}.side-panel h3{margin:0 0 .4rem;font-size:.88rem}.metrics-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.35rem;font-size:.78rem}.metrics-grid p{margin:0;color:var(--text-muted);font-size:.7rem}.metrics-grid strong{display:block;font-size:.92rem}.metrics-grid strong.normal-beat-yes{color:var(--normal)}.metrics-grid strong.normal-beat-no{color:var(--pvc)}.metrics-grid strong.metric-out-of-range{color:#f87171}.event-filters{display:flex;flex-direction:column;gap:.4rem;margin-bottom:.4rem}.event-filter-group{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.3rem}.event-filter-group button{border-radius:.45rem;padding:.22rem .4rem;font-size:.76rem}.event-filter-group .active{background:#fecaca;color:#8c231f;border-color:var(--accent)}.event-nav{display:flex;gap:.3rem}.event-nav button{flex:1;border-radius:.4rem;padding:.22rem .4rem;font-size:.74rem}.event-count{margin:0}.event-list{display:flex;flex-direction:column;gap:.25rem;max-height:320px;overflow:auto}.event-row{display:grid;grid-template-columns:44px minmax(0,1fr);align-items:center;gap:.35rem;border-radius:.4rem;border:1px solid #e6edf5;background:#fff;padding:.25rem .35rem;font-size:.74rem;text-align:left}.event-row:hover{border-color:#d5c3c3}.rhythm-explanation{padding:4px 8px 6px;margin:-2px 0 4px;background:#f8fafc;border:1px solid #e2e8f0;border-top:none;border-radius:0 0 .4rem .4rem;font-size:.72rem}.event-row.active{border-color:var(--accent);background:#c53b2f14}.event-type{text-align:center;border-radius:.25rem;padding:.08rem .3rem;font-weight:700;font-size:.68rem}.event-type.pac{color:#8a480f;background:#e07a1f3d}.event-type.pvc{color:#8a2323;background:#d94a4a38}.event-time{color:var(--text-main);font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-weight:600;font-size:.72rem}.explain-block{margin-top:.5rem;padding-top:.4rem;border-top:1px solid var(--paper-border)}.explain-summary{margin:0 0 .35rem;font-size:.78rem;color:var(--text-main);font-weight:600}.explain-title{margin:.35rem 0 .2rem;font-size:.68rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em}.explain-list{margin:0;padding-left:.8rem;display:flex;flex-direction:column;gap:.2rem;color:var(--text-main);font-size:.7rem;line-height:1.3}.explain-list-baseline{color:var(--text-muted)}.explain-advanced{margin-top:.4rem;border-top:1px dashed var(--paper-border);padding-top:.35rem}.explain-advanced summary{cursor:pointer;color:var(--accent);font-size:.72rem;-webkit-user-select:none;user-select:none}.muted{color:var(--text-muted);font-size:.8rem}.error-banner{padding:.4rem .8rem;background:#7f1d1d;color:#fecaca;border-radius:.5rem;font-size:.85rem}.loading-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:#fff7f3eb;color:var(--text-main);font-size:1.1rem;z-index:10}@media(max-width:1200px){.toolbar{grid-template-columns:1fr}.toolbar__controls{justify-content:flex-start}.main-grid,.summary-ribbon{grid-template-columns:1fr}.side-panel{max-height:none}}:root{color-scheme:light;font-family:Avenir Next,SF Pro Text,IBM Plex Sans,Segoe UI,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;line-height:1.5;font-weight:400;background-color:#fff;color:#3f2b2b;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-height:100vh;background:#f7f9fc}#root{min-height:100vh}a{color:inherit}button{font:inherit}
