heyiam 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/analyzer.d.ts +3 -3
  2. package/dist/archive.d.ts +14 -0
  3. package/dist/archive.js +125 -0
  4. package/dist/archive.js.map +1 -0
  5. package/dist/auth.d.ts +0 -6
  6. package/dist/auth.js +2 -4
  7. package/dist/auth.js.map +1 -1
  8. package/dist/autostart.d.ts +19 -0
  9. package/dist/autostart.js +103 -0
  10. package/dist/autostart.js.map +1 -0
  11. package/dist/bridge.d.ts +0 -2
  12. package/dist/bridge.js +33 -4
  13. package/dist/bridge.js.map +1 -1
  14. package/dist/config.d.ts +1 -3
  15. package/dist/config.js +2 -4
  16. package/dist/config.js.map +1 -1
  17. package/dist/context-export.d.ts +22 -0
  18. package/dist/context-export.js +230 -0
  19. package/dist/context-export.js.map +1 -0
  20. package/dist/daemon-install.d.ts +23 -0
  21. package/dist/daemon-install.js +155 -0
  22. package/dist/daemon-install.js.map +1 -0
  23. package/dist/db.d.ts +117 -0
  24. package/dist/db.js +444 -0
  25. package/dist/db.js.map +1 -0
  26. package/dist/export.d.ts +33 -0
  27. package/dist/export.js +463 -0
  28. package/dist/export.js.map +1 -0
  29. package/dist/format-utils.d.ts +6 -0
  30. package/dist/format-utils.js +15 -0
  31. package/dist/format-utils.js.map +1 -0
  32. package/dist/index.js +474 -117
  33. package/dist/index.js.map +1 -1
  34. package/dist/llm/project-enhance.d.ts +3 -2
  35. package/dist/llm/project-enhance.js +1 -1
  36. package/dist/parsers/claude.js +73 -0
  37. package/dist/parsers/claude.js.map +1 -1
  38. package/dist/parsers/codex.js +1 -1
  39. package/dist/parsers/codex.js.map +1 -1
  40. package/dist/parsers/cursor.d.ts +2 -0
  41. package/dist/parsers/cursor.js +14 -26
  42. package/dist/parsers/cursor.js.map +1 -1
  43. package/dist/parsers/gemini.d.ts +3 -2
  44. package/dist/parsers/gemini.js +198 -21
  45. package/dist/parsers/gemini.js.map +1 -1
  46. package/dist/parsers/index.d.ts +1 -1
  47. package/dist/parsers/index.js +23 -7
  48. package/dist/parsers/index.js.map +1 -1
  49. package/dist/parsers/types.d.ts +27 -1
  50. package/dist/render/build-render-data.d.ts +59 -0
  51. package/dist/render/build-render-data.js +101 -0
  52. package/dist/render/build-render-data.js.map +1 -0
  53. package/dist/render/components/PortfolioPage.d.ts +4 -0
  54. package/dist/render/components/PortfolioPage.js +16 -0
  55. package/dist/render/components/PortfolioPage.js.map +1 -0
  56. package/dist/render/components/ProjectPage.d.ts +4 -0
  57. package/dist/render/components/ProjectPage.js +101 -0
  58. package/dist/render/components/ProjectPage.js.map +1 -0
  59. package/dist/render/components/SessionPage.d.ts +4 -0
  60. package/dist/render/components/SessionPage.js +29 -0
  61. package/dist/render/components/SessionPage.js.map +1 -0
  62. package/dist/render/index.d.ts +37 -0
  63. package/dist/render/index.js +104 -0
  64. package/dist/render/index.js.map +1 -0
  65. package/dist/render/liquid.d.ts +19 -0
  66. package/dist/render/liquid.js +149 -0
  67. package/dist/render/liquid.js.map +1 -0
  68. package/dist/render/types.d.ts +121 -0
  69. package/dist/render/types.js +9 -0
  70. package/dist/render/types.js.map +1 -0
  71. package/dist/routes/archive.d.ts +3 -0
  72. package/dist/routes/archive.js +56 -0
  73. package/dist/routes/archive.js.map +1 -0
  74. package/dist/routes/auth.d.ts +3 -0
  75. package/dist/routes/auth.js +116 -0
  76. package/dist/routes/auth.js.map +1 -0
  77. package/dist/routes/context.d.ts +76 -0
  78. package/dist/routes/context.js +452 -0
  79. package/dist/routes/context.js.map +1 -0
  80. package/dist/routes/dashboard.d.ts +3 -0
  81. package/dist/routes/dashboard.js +103 -0
  82. package/dist/routes/dashboard.js.map +1 -0
  83. package/dist/routes/enhance.d.ts +3 -0
  84. package/dist/routes/enhance.js +305 -0
  85. package/dist/routes/enhance.js.map +1 -0
  86. package/dist/routes/export.d.ts +3 -0
  87. package/dist/routes/export.js +229 -0
  88. package/dist/routes/export.js.map +1 -0
  89. package/dist/routes/index.d.ts +12 -0
  90. package/dist/routes/index.js +13 -0
  91. package/dist/routes/index.js.map +1 -0
  92. package/dist/routes/preview.d.ts +3 -0
  93. package/dist/routes/preview.js +191 -0
  94. package/dist/routes/preview.js.map +1 -0
  95. package/dist/routes/projects.d.ts +3 -0
  96. package/dist/routes/projects.js +181 -0
  97. package/dist/routes/projects.js.map +1 -0
  98. package/dist/routes/publish.d.ts +3 -0
  99. package/dist/routes/publish.js +466 -0
  100. package/dist/routes/publish.js.map +1 -0
  101. package/dist/routes/search.d.ts +3 -0
  102. package/dist/routes/search.js +110 -0
  103. package/dist/routes/search.js.map +1 -0
  104. package/dist/routes/sessions.d.ts +3 -0
  105. package/dist/routes/sessions.js +103 -0
  106. package/dist/routes/sessions.js.map +1 -0
  107. package/dist/routes/settings.d.ts +3 -0
  108. package/dist/routes/settings.js +30 -0
  109. package/dist/routes/settings.js.map +1 -0
  110. package/dist/screenshot.d.ts +5 -2
  111. package/dist/screenshot.js +187 -13
  112. package/dist/screenshot.js.map +1 -1
  113. package/dist/search.d.ts +30 -0
  114. package/dist/search.js +153 -0
  115. package/dist/search.js.map +1 -0
  116. package/dist/server.d.ts +1 -1
  117. package/dist/server.js +55 -1318
  118. package/dist/server.js.map +1 -1
  119. package/dist/settings.d.ts +23 -6
  120. package/dist/settings.js +36 -12
  121. package/dist/settings.js.map +1 -1
  122. package/dist/source-audit.d.ts +29 -0
  123. package/dist/source-audit.js +203 -0
  124. package/dist/source-audit.js.map +1 -0
  125. package/dist/summarize.d.ts +0 -7
  126. package/dist/summarize.js +0 -20
  127. package/dist/summarize.js.map +1 -1
  128. package/dist/sync.d.ts +76 -0
  129. package/dist/sync.js +361 -0
  130. package/dist/sync.js.map +1 -0
  131. package/dist/transcript.d.ts +68 -0
  132. package/dist/transcript.js +275 -0
  133. package/dist/transcript.js.map +1 -0
  134. package/package.json +6 -2
  135. package/app/dist/assets/html2canvas-Cwn_rrOw.js +0 -5
  136. package/app/dist/assets/index-CEQyTkgN.js +0 -14
  137. package/app/dist/assets/index-DLh5xRE8.css +0 -1
  138. package/app/dist/favicon.svg +0 -5
  139. package/app/dist/icons.svg +0 -24
  140. package/app/dist/index.html +0 -20
  141. package/dist/machine-key.d.ts +0 -10
  142. package/dist/machine-key.js +0 -51
  143. package/dist/machine-key.js.map +0 -1
@@ -1 +0,0 @@
1
- :root{--surface:#f8f9fb;--surface-container-lowest:#fff;--surface-container-low:#f3f4f6;--surface-container:#edeef0;--surface-container-high:#e7e8ea;--surface-container-highest:#e1e2e4;--surface-dim:#d9dadc;--surface-tint:#316190;--primary:#084471;--on-primary:#fff;--primary-container:#2b5c8a;--on-primary-container:#b0d4ff;--primary-fixed:#d0e4ff;--primary-fixed-dim:#9dcaff;--secondary:#006a61;--on-secondary:#fff;--secondary-container:#93f4e6;--tertiary:#663500;--on-tertiary:#fff;--tertiary-fixed:#ffdcc3;--tertiary-fixed-dim:#ffb77d;--on-tertiary-fixed:#2f1500;--on-tertiary-fixed-variant:#6e3900;--on-surface:#191c1e;--on-surface-variant:#42474e;--outline:#72787e;--outline-variant:#c2c7d0;--error:#ba1a1a;--error-container:#ffdad6;--on-error:#fff;--inverse-surface:#2e3132;--inverse-on-surface:#f0f1f3;--inverse-primary:#9dcaff;--font-display:"Space Grotesk", sans-serif;--font-body:"Inter", sans-serif;--font-mono:"IBM Plex Mono", monospace;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--spacing-1:.25rem;--spacing-2:.5rem;--spacing-3:.75rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-8:2rem;--spacing-10:2.5rem;--spacing-12:3rem;--spacing-16:4rem;--spacing-20:5rem;--spacing-24:5.5rem;--shadow-ambient:0 12px 40px #191c1e0f;--shadow-sm:0 1px 3px #191c1e0a;--ghost-border:1px solid #c2c7d026;font-family:var(--font-body);color:var(--on-surface);background:var(--surface);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:1.5}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{min-height:100vh;margin:0;overflow:hidden}#root{flex-direction:column;min-height:100vh;display:flex}::selection{background:var(--primary-container);color:var(--on-primary-fixed)}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#c2c7d04d;border-radius:10px}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.app-shell{background:var(--surface);flex-direction:column;height:100vh;display:flex;overflow:hidden}.app-shell__body{flex:1;min-height:0;display:flex}.app-header{padding:var(--spacing-3) var(--spacing-6);background:var(--surface);z-index:40;flex-shrink:0;justify-content:space-between;align-items:center;height:3.5rem;display:flex;position:sticky;top:0}.app-header__left{align-items:center;gap:var(--spacing-6);display:flex}.app-header__logo{font-family:var(--font-display);color:var(--on-surface);letter-spacing:-.03em;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:1.25rem;font-weight:700;text-decoration:none}.app-header__back{width:2rem;height:2rem;color:var(--on-surface-variant);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;justify-content:center;align-items:center;transition:background-color .15s;display:flex}.app-header__back:hover{background:var(--surface-container-low)}.app-header__back svg{width:1.25rem;height:1.25rem}.app-header__title{font-family:var(--font-display);color:var(--on-surface-variant);letter-spacing:-.01em;font-size:.875rem;font-weight:600}.app-header__right{align-items:center;gap:var(--spacing-3);display:flex}.app-header__auth-indicator{align-items:center;gap:var(--spacing-2);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);font-size:.625rem;display:flex}.app-header__auth-dot{background:var(--outline-variant);border-radius:50%;width:.5rem;height:.5rem}.app-header__auth-dot--active{background:var(--secondary)}.app-header__icon-btn{width:2rem;height:2rem;color:var(--on-surface-variant);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;justify-content:center;align-items:center;transition:background-color .15s;display:flex}.app-header__icon-btn:hover{background:var(--surface-container-low)}.app-header__icon-btn svg{width:1.25rem;height:1.25rem}.app-sidebar{background:var(--surface-container-low);border-right:var(--ghost-border);flex-direction:column;flex-shrink:0;width:16rem;display:flex;overflow-y:auto}.app-sidebar--collapsed{width:0;overflow:hidden}.app-sidebar__section{padding:var(--spacing-6)}.app-sidebar__label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em;color:var(--on-surface-variant);margin-bottom:var(--spacing-4);font-size:.625rem}.app-sidebar__list{gap:var(--spacing-1);flex-direction:column;list-style:none;display:flex}.app-sidebar__item{align-items:center;gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);color:var(--on-surface);border-radius:var(--radius-md);cursor:pointer;text-align:start;background:0 0;border:none;width:100%;font-size:.875rem;font-weight:500;transition:background-color .15s;display:flex}.app-sidebar__item:hover{background:var(--surface-container)}.app-sidebar__item--active{background:var(--surface-container-high);color:var(--primary)}.app-sidebar__dot{background:var(--outline-variant);border-radius:50%;flex-shrink:0;width:.375rem;height:.375rem}.app-sidebar__item--active .app-sidebar__dot,.app-sidebar__item:hover .app-sidebar__dot{background:var(--primary)}.app-sidebar__footer{padding:var(--spacing-6);border-top:var(--ghost-border);margin-top:auto}.app-main{background:var(--surface);flex:1;min-width:0;overflow:hidden auto}.app-main__header{padding:var(--spacing-6) var(--spacing-8);justify-content:space-between;align-items:flex-end;display:flex}.app-main__title{font-family:var(--font-display);color:var(--on-surface);letter-spacing:-.02em;font-size:1.875rem;font-weight:700}.app-main__subtitle{color:var(--on-surface-variant);margin-top:var(--spacing-1);font-size:.875rem}.app-bottom-bar{padding:var(--spacing-4) var(--spacing-6);z-index:30;justify-content:center;display:flex;position:sticky;bottom:0;left:0;right:0}.app-bottom-bar__inner{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:var(--ghost-border);box-shadow:var(--shadow-lg);border-radius:var(--radius-md);padding:var(--spacing-4) var(--spacing-6);align-items:center;gap:var(--spacing-8);background:#fffc;width:100%;max-width:42rem;display:flex}.session-card{padding:var(--spacing-4);background:var(--surface-container-lowest);border-radius:var(--radius-sm);cursor:pointer;border:var(--ghost-border);align-items:center;gap:var(--spacing-4);transition:background-color .15s;display:flex}.session-card:hover{background:var(--surface-container-high)}.session-card--selected{background:var(--surface-container-lowest);box-shadow:inset 0 0 0 1px #08447133}.session-card__identity{flex:2;min-width:0}.session-card__title{font-family:var(--font-display);color:var(--on-surface);white-space:nowrap;text-overflow:ellipsis;font-size:.9375rem;font-weight:600;overflow:hidden}.session-card__date{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.04em;color:var(--on-surface-variant);margin-top:.125rem;font-size:.625rem}.session-card__metrics{align-items:center;gap:var(--spacing-4);font-family:var(--font-mono);color:var(--on-surface-variant);flex:1;font-size:.75rem;display:flex}.session-card__metric{align-items:center;gap:var(--spacing-1);white-space:nowrap;display:flex}.session-card__status{flex-shrink:0}.raw-log{background:var(--inverse-surface);color:var(--inverse-on-surface);border-radius:var(--radius-sm);font-family:var(--font-mono);flex-direction:column;font-size:.8125rem;line-height:1.6;display:flex;overflow-y:auto}.raw-log__header{padding:var(--spacing-4);border-bottom:1px solid #ffffff14;justify-content:space-between;align-items:center;display:flex}.raw-log__header-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em;color:var(--primary-container);font-size:.625rem;font-weight:700}.raw-log__dots{gap:var(--spacing-2);display:flex}.raw-log__dot{opacity:.5;border-radius:50%;width:.5rem;height:.5rem}.raw-log__dot--red{background:var(--error)}.raw-log__dot--yellow{background:var(--tertiary)}.raw-log__dot--blue{background:var(--primary)}.raw-log__content{padding:var(--spacing-4);flex:1;overflow-y:auto}.raw-log__line{gap:var(--spacing-4);display:flex}.raw-log__line-num{text-align:end;opacity:.3;-webkit-user-select:none;user-select:none;flex-shrink:0;width:2rem}.raw-log__line-text{color:var(--inverse-on-surface)}.raw-log__cursor{background:var(--primary);vertical-align:middle;width:.5rem;height:1rem;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}.editor-panel{flex:1;grid-template-columns:1fr 2fr;min-height:0;display:grid}.editor-panel__raw{background:var(--inverse-surface);color:var(--inverse-on-surface);font-family:var(--font-mono);border-inline-end:1px solid #ffffff0d;flex-direction:column;font-size:.75rem;display:flex;overflow-y:auto}.editor-panel__raw-header{padding:0 var(--spacing-4);background:var(--inverse-surface);border-bottom:1px solid #ffffff0f;flex-shrink:0;justify-content:space-between;align-items:center;height:2.5rem;display:flex}.editor-panel__raw-label{text-transform:uppercase;letter-spacing:.04em;opacity:.6;font-size:.625rem}.editor-panel__raw-content{padding:var(--spacing-4);flex:1;line-height:1.6;overflow-y:auto}.editor-panel__draft{background:var(--surface-container-low);position:relative;overflow-y:auto}.editor-panel__draft-content{max-width:56rem;padding:var(--spacing-12);margin:0 auto;padding-bottom:8rem}.btn{justify-content:center;align-items:center;gap:var(--spacing-2);font-family:var(--font-body);padding:var(--spacing-2) var(--spacing-5);border-radius:var(--radius-md);cursor:pointer;white-space:nowrap;border:none;font-size:.875rem;font-weight:600;line-height:1.4;text-decoration:none;transition:opacity .15s,transform .1s;display:inline-flex}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-primary{background:var(--primary);color:var(--on-primary)}.btn-primary:hover{opacity:.9}.btn-secondary{color:var(--primary);border:var(--ghost-border);background:0 0}.btn-secondary:hover{background:var(--surface-container)}.btn-tertiary{color:var(--on-surface-variant);font-family:var(--font-mono);padding:var(--spacing-1) var(--spacing-2);background:0 0;border:none;font-size:.75rem;text-decoration:none}.btn-tertiary:hover{color:var(--primary);text-decoration:underline}.btn--lg{padding:var(--spacing-3) var(--spacing-8);font-size:.9375rem}.btn--full{width:100%}.btn--icon{padding:var(--spacing-2);width:2.5rem;height:2.5rem}.chip{align-items:center;gap:var(--spacing-1);padding:var(--spacing-1) var(--spacing-3);background:var(--surface-container-high);border-radius:var(--radius-xs);font-family:var(--font-mono);color:var(--on-surface);border:var(--ghost-border);white-space:nowrap;font-size:.625rem;font-weight:700;display:inline-flex}.chip__dot{background:var(--primary);border-radius:50%;width:.25rem;height:.25rem}.chip--primary{color:var(--primary);background:#08447114}.chip--published,.chip--sealed{background:var(--secondary-container);color:var(--secondary);font-weight:600}.chip--draft{background:var(--tertiary-fixed);color:var(--tertiary)}.chip--enhanced{color:var(--primary);background:#0844711f}.chip--archived{background:var(--surface-container-highest);color:var(--on-surface-variant)}.chip--success{background:var(--secondary-container);color:var(--secondary)}.stats-grid{gap:var(--spacing-4);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.stat-card__value{font-family:var(--font-display);color:var(--on-surface);font-size:2rem;font-weight:700;line-height:1}.stat-card__label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em;color:var(--on-surface-variant);margin-top:var(--spacing-2);font-size:.625rem}.terminal{background:var(--inverse-surface);color:var(--inverse-on-surface);border-radius:var(--radius-md);font-family:var(--font-mono);padding:var(--spacing-5);font-size:.8125rem;line-height:1.6;overflow-x:auto}.terminal__prompt{color:var(--primary-container)}.terminal__success{color:var(--secondary);font-weight:700}.terminal__error{color:var(--error-container)}.terminal__warn{color:var(--tertiary-container)}.terminal__muted{opacity:.4}.exec-path{gap:var(--spacing-4);flex-direction:column;display:flex}.exec-path__step{gap:var(--spacing-6);padding:var(--spacing-4);border-radius:var(--radius-sm);align-items:flex-start;transition:background-color .15s;display:flex}.exec-path__step:hover{background:var(--surface-container-lowest)}.exec-path__step-icon{background:var(--secondary-container);border-radius:var(--radius-md);width:2.5rem;height:2.5rem;color:var(--secondary);flex-shrink:0;justify-content:center;align-items:center;display:flex}.exec-path__step-content{flex:1;min-width:0}.exec-path__step-num{font-family:var(--font-mono);color:var(--primary);font-size:.75rem;font-weight:700}.exec-path__step-title{font-family:var(--font-display);color:var(--on-surface);margin-top:var(--spacing-1);font-size:.9375rem;font-weight:700}.exec-path__step-desc{color:var(--on-surface-variant);margin-top:var(--spacing-1);font-size:.875rem;line-height:1.5}.badge{align-items:center;gap:var(--spacing-1);padding:.125rem var(--spacing-2);border-radius:var(--radius-xs);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.02em;font-size:.625rem;font-weight:700;display:inline-flex}.badge--sealed{background:var(--primary-container);color:var(--on-primary-fixed);border:1px solid #0844711a}.badge--draft{background:var(--surface-container-high);color:var(--on-surface-variant)}.badge--published{background:var(--secondary-container);color:var(--secondary)}.badge--archived{background:var(--surface-container-highest);color:var(--on-surface-variant)}.label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em;color:var(--on-surface-variant);font-size:.625rem}.label--primary{color:var(--primary);font-weight:700}.input{font-family:var(--font-body);padding:var(--spacing-2) var(--spacing-4);background:var(--surface-container-lowest);border-radius:var(--radius-md);color:var(--on-surface);border:none;width:100%;font-size:.875rem;transition:box-shadow .15s;box-shadow:inset 0 0 0 1px #c2c7d033}.input:focus{outline:none;box-shadow:inset 0 0 0 1px #08447166}.input::placeholder{color:var(--outline-variant);opacity:.6}.textarea{font-family:var(--font-body);padding:var(--spacing-4);color:var(--on-surface);resize:none;background:0 0;border:none;width:100%;font-size:1rem;line-height:1.6}.textarea:focus{outline:none}.textarea::placeholder{color:var(--on-surface-variant);opacity:.7}.card{background:var(--surface-container-lowest);border-radius:var(--radius-sm);border:var(--ghost-border);padding:var(--spacing-6)}.card--elevated{box-shadow:var(--shadow-ambient)}.divider{height:1px;margin:var(--spacing-6) 0;background:#c2c7d026;border:none}.blueprint-grid{z-index:-1;pointer-events:none;opacity:.03;background-image:radial-gradient(var(--primary) .5px, transparent .5px);background-size:24px 24px;position:fixed;inset:0}.glass-panel{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:var(--ghost-border);background:#fffc}.text-display-lg{font-family:var(--font-display);letter-spacing:-.02em;color:var(--on-surface);font-size:3.5rem;font-weight:700;line-height:1.1}.text-headline{font-family:var(--font-display);letter-spacing:-.02em;color:var(--on-surface);font-size:1.875rem;font-weight:700}.text-title{font-family:var(--font-body);color:var(--on-surface);font-size:1.25rem;font-weight:600}.text-body{font-family:var(--font-body);color:var(--on-surface);font-size:.875rem;line-height:1.5}.text-label{font-family:var(--font-mono);color:var(--on-surface-variant);font-size:.75rem}.text-label-sm{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em;color:var(--on-surface-variant);font-size:.625rem}.text-mono{font-family:var(--font-mono)}.setup-banner{background:var(--tertiary-fixed);padding:var(--spacing-4) var(--spacing-6);border-radius:var(--radius-sm);margin-bottom:var(--spacing-8);align-items:center;gap:var(--spacing-3);display:flex}.setup-banner__icon{color:var(--tertiary);flex-shrink:0;font-size:1rem;font-weight:600}.setup-banner__text{color:var(--tertiary);font-size:.875rem}.setup-banner__action{flex-shrink:0;margin-left:auto}.empty-state__desc{color:var(--on-surface-variant);max-width:400px;font-size:.9375rem;line-height:1.6}.empty-state__cmd{margin-top:var(--spacing-8)}.empty-state__cmd code{font-family:var(--font-mono);color:var(--on-surface-variant);background:var(--surface-container-low);padding:var(--spacing-3) var(--spacing-5);border-radius:var(--radius-sm);font-size:.8125rem;display:inline-block}.chip--queued{background:var(--surface-container-highest);color:var(--on-surface-variant);opacity:.7}.chip--processing{color:#006a61;background:#006a6126;animation:1.2s ease-in-out infinite chip-pulse}@keyframes chip-pulse{0%,to{opacity:1}50%{opacity:.5}}.chip--uploaded{background:var(--secondary-container);color:var(--secondary);font-weight:600}.chip--failed{color:#ba1a1a;background:#ba1a1a1f;font-weight:600}.sidebar-stats{font-family:var(--font-mono);color:var(--on-surface-variant);font-size:.75rem;line-height:2}.sidebar-stats strong{color:var(--on-surface)}.terminal-line{line-height:1.8}.terminal-line--prompt{color:#34d399}.terminal-line--ai{color:#60a5fa}.terminal-line--dim{color:#ffffff4d}.terminal-line--success{color:#34d399;font-weight:600}.settings-page{max-width:40rem;padding:var(--spacing-8);gap:var(--spacing-8);flex-direction:column;margin:0 auto;display:flex}.settings-section{gap:var(--spacing-4);flex-direction:column;display:flex}.settings-row{justify-content:space-between;align-items:center;display:flex}.settings-row__label{font-family:var(--font-body);color:var(--on-surface-variant);font-size:.875rem}.settings-row__value{font-family:var(--font-mono);color:var(--on-surface);font-size:.8125rem}.settings-input-group{gap:var(--spacing-2);flex-direction:column;display:flex}.settings-input-wrapper{position:relative}.settings-input-wrapper .input{padding-right:3rem}.settings-input-toggle{right:var(--spacing-2);color:var(--on-surface-variant);cursor:pointer;padding:var(--spacing-1);font-family:var(--font-mono);text-transform:uppercase;background:0 0;border:none;font-size:.625rem;position:absolute;top:50%;transform:translateY(-50%)}.settings-help{color:var(--outline);font-size:.75rem;line-height:1.4}.collapsible{background:var(--surface-container-lowest);border-radius:var(--radius-sm);border:1px solid #c2c7d026;overflow:hidden}.collapsible__summary{padding:var(--spacing-4);cursor:pointer;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;font-size:.75rem;font-weight:700;list-style:none;transition:background-color .15s;display:flex}.collapsible__summary:hover{background:var(--surface-container-low)}.collapsible__summary::-webkit-details-marker{display:none}.collapsible__chevron{color:var(--on-surface-variant);font-size:1.25rem;transition:transform .2s}details[open]>.collapsible__summary .collapsible__chevron{transform:rotate(180deg)}.collapsible__content{padding:var(--spacing-4);border-top:1px solid #c2c7d01a;padding-top:0}.file-list{font-family:var(--font-mono);gap:var(--spacing-2);padding-top:var(--spacing-4);flex-direction:column;font-size:.8125rem;display:flex}.file-list__item{align-items:center;gap:var(--spacing-3);display:flex}.file-list__additions{color:var(--secondary);text-align:end;min-width:3rem;font-weight:600}.file-list__deletions{color:var(--error);text-align:end;min-width:3rem;font-weight:600}.file-list__path{color:var(--on-surface)}.tool-bar{gap:var(--spacing-3);padding-top:var(--spacing-4);flex-direction:column;display:flex}.tool-bar__item{align-items:center;gap:var(--spacing-3);display:flex}.tool-bar__name{font-family:var(--font-mono);color:var(--on-surface-variant);min-width:4rem;font-size:.75rem}.tool-bar__track{background:var(--surface-container-high);border-radius:var(--radius-xs);flex:1;height:.375rem;overflow:hidden}.tool-bar__fill{background:var(--primary);border-radius:var(--radius-xs);height:100%;transition:width .3s}.tool-bar__count{font-family:var(--font-mono);color:var(--on-surface-variant);text-align:end;min-width:2rem;font-size:.6875rem}.timeline-list{gap:var(--spacing-3);padding-top:var(--spacing-4);flex-direction:column;display:flex}.timeline-list__item{align-items:flex-start;gap:var(--spacing-3);display:flex}.timeline-list__time{font-family:var(--font-mono);color:var(--outline);min-width:3.5rem;padding-top:.125rem;font-size:.625rem}.timeline-list__content{background:var(--surface-container);padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-sm);font-family:var(--font-mono);color:var(--on-surface-variant);flex:1;font-size:.75rem}.timeline-list__content--prompt{color:var(--primary);background:#0844710f}.enhance-layout{flex:1;grid-template-columns:5fr 7fr;min-height:0;display:grid}@media (width<=768px){.enhance-layout{grid-template-columns:1fr}}.enhance-layout__left{background:var(--inverse-surface);color:var(--inverse-on-surface);font-family:var(--font-mono);flex-direction:column;font-size:.8125rem;display:flex;overflow-y:auto}.enhance-layout__left-header{padding:var(--spacing-4) var(--spacing-5);border-bottom:1px solid #ffffff0f;flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.enhance-layout__left-label{text-transform:uppercase;letter-spacing:.08em;opacity:.6;font-size:.6875rem}.enhance-layout__left-id{color:var(--outline);font-size:.625rem}.enhance-layout__left-content{padding:var(--spacing-5);flex:1;line-height:1.6;overflow-y:auto}.enhance-layout__right{background:var(--surface-container-low);padding:var(--spacing-8);overflow-y:auto}.enhance-layout__right-inner{max-width:42rem;margin:0 auto}.enhance-status{border-radius:var(--radius-md);padding:var(--spacing-5);align-items:center;gap:var(--spacing-4);margin-bottom:var(--spacing-8);background:#0844710d;border:1px solid #0844711a;display:flex}.enhance-status__icon{background:var(--primary);width:2.5rem;height:2.5rem;color:var(--on-primary);border-radius:var(--radius-sm);flex-shrink:0;justify-content:center;align-items:center;font-size:1.25rem;display:flex}.enhance-status__title{font-family:var(--font-display);color:var(--primary);font-size:.875rem;font-weight:700}.enhance-status__desc{color:var(--on-surface-variant);margin-top:var(--spacing-1);font-size:.75rem}.enhance-question{background:var(--surface-container-lowest);border-radius:var(--radius-sm);padding:var(--spacing-6);margin-bottom:var(--spacing-4);border:1px solid #c2c7d026}.enhance-question__text{font-family:var(--font-display);color:var(--on-surface);margin-bottom:var(--spacing-3);font-size:.9375rem;font-weight:600}.enhance-question__suggested{color:var(--outline);margin-bottom:var(--spacing-3);font-size:.8125rem;font-style:italic}.enhance-question__textarea{font-family:var(--font-body);padding:var(--spacing-3) var(--spacing-4);background:var(--surface-container-low);border-radius:var(--radius-sm);color:var(--on-surface);resize:vertical;border:1px solid #c2c7d04d;width:100%;min-height:4rem;font-size:.875rem;line-height:1.5}.enhance-question__textarea:focus{border-color:#08447166;outline:none}.enhance-question__textarea::placeholder{color:var(--on-surface-variant);opacity:.7}.enhance-question__skip{font-family:var(--font-mono);color:var(--outline);cursor:pointer;text-transform:uppercase;letter-spacing:.04em;margin-top:var(--spacing-2);background:0 0;border:none;font-size:.6875rem}.enhance-question__skip:hover{color:var(--primary);text-decoration:underline}.enhance-streaming__item{opacity:0;transition:opacity .3s,transform .3s;transform:translateY(4px)}.enhance-streaming__item--visible{opacity:1;transform:translateY(0)}.enhance-actions{padding-top:var(--spacing-6);margin-top:var(--spacing-8);border-top:1px solid #c2c7d026;justify-content:space-between;align-items:center;display:flex}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (width<=768px){.app-sidebar{border-right:none;border-bottom:var(--ghost-border);width:100%;max-height:3rem;transition:max-height .2s;overflow:hidden}.app-sidebar--expanded{max-height:50vh;overflow-y:auto}.app-shell__body{flex-direction:column}.app-main__header{padding:var(--spacing-4)}.app-main__title{font-size:1.5rem}}@media (width<=375px){.session-card{padding:var(--spacing-3);gap:var(--spacing-3)}.session-card__metrics{display:none}.session-card__title{font-size:.875rem}.app-bottom-bar{padding:var(--spacing-2) var(--spacing-3)}.app-bottom-bar__inner{padding:var(--spacing-3) var(--spacing-4);gap:var(--spacing-4);border-radius:var(--radius-sm)}.app-main__header{padding:var(--spacing-3)}.app-main__title{font-size:1.25rem}.app-sidebar__section{padding:var(--spacing-3)}}.tool-breakdown-rows{flex-direction:column;gap:4px;display:flex}.tool-breakdown-row{align-items:center;gap:var(--spacing-3);display:flex}.tool-breakdown-row__label{font-family:var(--font-mono);color:var(--on-surface-variant);text-align:right;flex-shrink:0;width:60px;font-size:.75rem}.tool-breakdown-row__track{background:var(--surface-container-low);border-radius:3px;flex:1;height:6px;overflow:hidden}.tool-breakdown-row__bar{background:var(--primary);border-radius:3px;height:100%}.tool-breakdown-row__count{font-family:var(--font-mono);width:30px;font-size:.75rem}.turn-timeline-entries{flex-direction:column;display:flex}.turn-timeline-entry{align-items:flex-start;gap:var(--spacing-3);padding:var(--spacing-2) 0;border-bottom:1px solid var(--ghost-border);display:flex}.turn-timeline-entry__num{font-family:var(--font-mono);color:var(--on-surface-variant);text-align:right;flex-shrink:0;width:24px;font-size:.6875rem}.turn-timeline-entry__content{flex:1;font-size:.8125rem}.turn-timeline-entry__tools{flex-shrink:0;gap:2px;display:flex}.chip--sm{padding:1px 6px;font-size:.5625rem}.turn-timeline-more{padding:var(--spacing-3) 0;font-family:var(--font-mono);color:var(--on-surface-variant);text-align:center;font-size:.75rem}.files-changed-list{flex-direction:column;display:flex}.files-changed-row{padding:var(--spacing-1) 0;font-family:var(--font-mono);justify-content:space-between;font-size:.75rem;display:flex}.files-changed-row__path{color:var(--on-surface)}.files-changed-row__count{color:var(--on-surface-variant)}.dashboard{max-width:960px;padding:var(--spacing-8);margin:0 auto}.dashboard__title{font-family:var(--font-display);margin-bottom:var(--spacing-2);font-size:2rem;font-weight:700}.dashboard__subtitle{color:var(--on-surface-variant);margin-bottom:var(--spacing-8);font-size:.9375rem;line-height:1.6}.dashboard__cards{gap:var(--spacing-4);flex-direction:column;display:flex}.dashboard-banner{font-family:var(--font-mono,monospace);color:#92400e;padding:var(--spacing-3) var(--spacing-4);margin-bottom:var(--spacing-4);text-align:center;background:#fef3c7;border-radius:4px;font-size:.8125rem}.dashboard-banner__link{color:#084471;font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;padding:0;font-weight:600;text-decoration:underline}.dashboard-loading,.dashboard-error{padding:var(--spacing-20) 0;color:var(--on-surface-variant);justify-content:center;align-items:center;font-size:.9375rem;display:flex}.empty-state{padding:var(--spacing-20) 0;text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.empty-state__icon{background:var(--surface-container-low);width:64px;height:64px;margin-bottom:var(--spacing-6);color:var(--on-surface-variant);border-radius:50%;justify-content:center;align-items:center;font-size:1.5rem;display:flex}.empty-state__title{font-family:var(--font-display);margin-bottom:var(--spacing-3);font-size:1.5rem;font-weight:700}.empty-state__text{color:var(--on-surface-variant);max-width:400px;font-size:.9375rem;line-height:1.6}.empty-state__text code{font-family:var(--font-mono);background:var(--surface-container-low);border-radius:var(--radius-sm);padding:2px 6px;font-size:.8125rem}.empty-state__hint{margin-top:var(--spacing-8)}.empty-state__hint code{font-family:var(--font-mono);color:var(--on-surface-variant);background:var(--surface-container-low);padding:var(--spacing-3) var(--spacing-5);border-radius:var(--radius-sm);font-size:.8125rem;display:inline-block}.project-card{background:var(--surface-container-lowest);border:1px solid var(--ghost-border);border-radius:var(--radius-sm);padding:var(--spacing-6);cursor:pointer;transition:box-shadow .15s}.project-card:hover{box-shadow:var(--shadow-sm)}.project-card__header{margin-bottom:var(--spacing-4);justify-content:space-between;align-items:flex-start;display:flex}.project-card__title-row{align-items:center;gap:var(--spacing-3);margin-bottom:var(--spacing-2);display:flex}.project-card__dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.project-card__name{font-family:var(--font-display);font-size:1.25rem;font-weight:700}.project-card__desc{color:var(--on-surface-variant);font-size:.875rem;line-height:1.5}.project-card__date{font-family:var(--font-mono);color:var(--on-surface-variant);margin-top:var(--spacing-2);font-size:.6875rem}.project-card__date-ago{opacity:.5}.project-card__actions{gap:var(--spacing-2);flex-shrink:0;display:flex}.project-card__upload-btn{padding:var(--spacing-2) var(--spacing-5);flex-shrink:0;font-size:.8125rem}.project-card__badge{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;background:var(--primary-container,#e0ecf6);color:var(--primary,#084471);border-radius:3px;padding:2px 8px;font-size:.625rem;font-weight:600}.project-card__badge--stale{color:#92400e;background:#fef3c7}.project-card__badge--published{color:#16a34a;background:#dcfce7}.triage-item__published-badge{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;color:#16a34a;margin-left:var(--spacing-2,.5rem);vertical-align:middle;background:#dcfce7;border-radius:3px;padding:1px 6px;font-size:.6rem;font-weight:600}@keyframes wtLegendaryFade{0%{opacity:0}15%{opacity:.92}50%{opacity:.92}to{opacity:0}}@keyframes wtLegendaryText{0%{opacity:0;transform:scale(.7)}12%{opacity:1;transform:scale(1.05)}20%{transform:scale(1)}55%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.02)}}.work-timeline__scroll-controls{gap:var(--spacing-2,.5rem);margin-bottom:var(--spacing-2,.5rem);justify-content:flex-end;display:flex}.work-timeline__scroll-btn{color:#374151;width:32px;height:28px;font-family:var(--font-mono,monospace);cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:4px;justify-content:center;align-items:center;font-size:.875rem;transition:background .1s;display:flex}.work-timeline__scroll-btn:hover{background:#f3f4f6}.work-timeline__scroll-btn:active{background:#e5e7eb}.project-card__stats{gap:var(--spacing-4);margin-bottom:var(--spacing-4);grid-template-columns:repeat(4,1fr);display:grid}.project-card__stat-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);font-size:.5625rem}.project-card__stat-value{font-family:var(--font-display);font-size:1.25rem;font-weight:700}.project-card__skills{gap:var(--spacing-2);flex-wrap:wrap;display:flex}.upload-flow{max-width:800px;padding:var(--spacing-8);margin:0 auto}.upload-flow__label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--on-surface-variant);margin-bottom:var(--spacing-2);font-size:.6875rem}.upload-flow__title{font-family:var(--font-display);margin-bottom:var(--spacing-2);font-size:1.75rem;font-weight:700}.upload-flow__date{font-family:var(--font-mono);color:var(--on-surface-variant);margin-bottom:var(--spacing-3);font-size:.6875rem}.upload-flow__desc{color:var(--on-surface-variant);margin-bottom:var(--spacing-8);font-size:.9375rem;line-height:1.6}.upload-flow__stat-grid{gap:var(--spacing-4);margin-bottom:var(--spacing-8);grid-template-columns:repeat(4,1fr);display:grid}.upload-flow__section-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);margin-bottom:var(--spacing-3);font-size:.625rem}.upload-flow__section-label--selected{color:var(--secondary)}.upload-flow__scan-status{align-items:center;gap:var(--spacing-2);font-family:var(--font-mono);color:var(--secondary);margin-bottom:var(--spacing-4);font-size:.6875rem;display:flex}.upload-flow__auto-select-banner{font-family:var(--font-mono);color:var(--secondary);padding:var(--spacing-3) var(--spacing-4);background:var(--surface-container,#f5f7fa);margin-bottom:var(--spacing-3);border-radius:6px;font-size:.75rem}.upload-flow__actions{gap:var(--spacing-3);margin-top:var(--spacing-8);justify-content:flex-end;display:flex}.stat-card{background:var(--surface-container-lowest);padding:var(--spacing-5);border-radius:var(--radius-sm);border:1px solid var(--ghost-border)}.stat-card__label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);margin-bottom:var(--spacing-1);font-size:.625rem}.stat-card__value{font-family:var(--font-display);font-size:1.5rem;font-weight:700}.session-table{background:var(--surface-container-lowest);border:1px solid var(--ghost-border);border-radius:var(--radius-sm);margin-bottom:var(--spacing-8);max-height:320px;overflow-y:auto}.session-table__header{padding:var(--spacing-2) var(--spacing-4);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;color:var(--on-surface-variant);background:var(--surface-container-low);grid-template-columns:1fr 70px 60px 60px 60px;font-size:.625rem;display:grid;position:sticky;top:0}.session-table__row{padding:var(--spacing-3) var(--spacing-4);border-bottom:1px solid var(--ghost-border);grid-template-columns:1fr 70px 60px 60px 60px;font-size:.8125rem;display:grid}.session-table__name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.session-table__cell{text-align:right;font-family:var(--font-mono);color:var(--on-surface-variant);font-size:.75rem}.phase-bar{gap:var(--spacing-1);margin-bottom:var(--spacing-6);display:flex}.phase-bar__segment{background:var(--surface-container-high);border-radius:2px;flex:1;height:3px}.phase-bar__segment--active{background:var(--primary)}.triage-method-banner{align-items:center;gap:var(--spacing-2);padding:var(--spacing-3) var(--spacing-4);margin-bottom:var(--spacing-4);border-radius:var(--radius-sm);background:var(--surface-container,#f5f7fa);border:1px solid var(--outline-variant);color:var(--on-surface-variant);font-size:.8125rem;display:flex}.triage-method-banner__icon{flex-shrink:0;font-size:1rem}.triage-method-banner__link{color:var(--primary);white-space:nowrap;text-decoration:underline}.triage-list{gap:var(--spacing-2);margin-bottom:var(--spacing-8);flex-direction:column;display:flex}.triage-item{align-items:flex-start;gap:var(--spacing-3);padding:var(--spacing-4);border-radius:var(--radius-sm);flex-wrap:wrap;display:flex}.triage-item--selected{background:var(--surface-container-lowest);border:1px solid #006a6126}.triage-item--skipped{background:var(--surface-container-low);opacity:.7}.triage-item__checkbox{accent-color:var(--secondary);flex-shrink:0;width:16px;height:16px}.triage-item__info{flex:1;min-width:200px}.triage-item__name{text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:600;overflow:hidden}.triage-item__stats{font-family:var(--font-mono);color:var(--on-surface-variant);white-space:nowrap;font-size:.6875rem}.triage-item__reason{font-family:var(--font-mono);border-radius:var(--radius-sm);max-width:280px;padding:2px 8px;font-size:.625rem;line-height:1.4}.triage-item__reason--selected{color:var(--secondary);background:#006a6114}.triage-item__reason--skipped{background:var(--surface-container-high);color:var(--on-surface-variant);font-size:.5625rem}.triage-item__reason--expandable{cursor:pointer}.triage-item__reason--expandable:hover{opacity:.85}.triage-skipped{margin-bottom:var(--spacing-8)}.triage-skipped__summary{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);cursor:pointer;align-items:center;gap:var(--spacing-2);font-size:.625rem;list-style:none;display:flex}.triage-skipped__summary::-webkit-details-marker{display:none}.enhance-split{grid-template-columns:340px 1fr;height:calc(100vh - 3.5rem);display:grid}@media (width<=768px){.enhance-split{grid-template-columns:1fr}}.enhance-split__left{background:var(--inverse-surface);color:#fffc;padding:var(--spacing-6);flex-direction:column;height:100%;display:flex;overflow:hidden}.enhance-split__left-header{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:#fff6;margin-bottom:var(--spacing-5);font-size:.6875rem}.enhance-split__feed{gap:var(--spacing-4);scroll-behavior:smooth;flex-direction:column;flex:1;display:flex;overflow-y:auto}.enhance-feed-item--pending{opacity:.3}.enhance-feed-item__row{align-items:center;gap:var(--spacing-2);margin-bottom:var(--spacing-1);display:flex}.enhance-feed-item__check{color:#34d399;flex-shrink:0;font-size:.75rem}.enhance-feed-item__spinner{border:2px solid #fbbf24;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:12px;height:12px;animation:1s linear infinite spin;display:inline-block}.enhance-feed-item__circle{color:#fff6;flex-shrink:0;font-size:.75rem}.enhance-feed-item__title{font-family:var(--font-mono);color:#fffc;font-size:.75rem}.enhance-feed-item__title--active{color:#fbbf24}.enhance-feed-item__detail{font-family:var(--font-mono);color:#ffffff59;padding-inline-start:var(--spacing-5);font-size:.625rem}.enhance-split__narrative-box{margin-top:var(--spacing-8);padding:var(--spacing-4);border-radius:var(--radius-sm);background:#ffffff0d}.enhance-split__narrative-label{font-family:var(--font-mono);color:#fff6;margin-bottom:var(--spacing-2);font-size:.625rem}.enhance-split__narrative-status{align-items:center;gap:var(--spacing-2);font-family:var(--font-mono);color:#ffffff80;font-size:.6875rem;display:flex}.enhance-split__blink-dot{background:var(--secondary);border-radius:50%;flex-shrink:0;width:8px;height:8px;animation:1.2s infinite blink;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.enhance-split__right{padding:var(--spacing-8);overflow-y:auto}.enhance-split__narrative-text{color:var(--on-surface-variant);margin-bottom:var(--spacing-6);border-inline-start:2px solid var(--surface-container-high);padding-inline-start:var(--spacing-4);font-size:.9375rem;line-height:1.7}.enhance-split__skills{gap:var(--spacing-2);margin-bottom:var(--spacing-6);flex-wrap:wrap;display:flex}.enhance-split__arc{gap:var(--spacing-3);margin-bottom:var(--spacing-6);flex-direction:column;display:flex}.enhance-split__arc-item{gap:var(--spacing-3);align-items:flex-start;display:flex}.enhance-split__arc-item--generating{opacity:.4}.enhance-split__arc-num{border-radius:var(--radius-sm);width:24px;height:24px;color:var(--primary);background:#08447114;flex-shrink:0;justify-content:center;align-items:center;font-size:.625rem;font-weight:600;display:flex}.enhance-split__arc-title{font-size:.875rem;font-weight:600}.enhance-split__arc-desc{color:var(--on-surface-variant);font-size:.75rem}.questions-list{gap:var(--spacing-6);margin-bottom:var(--spacing-8);flex-direction:column;display:flex}.question-card__tag-row{align-items:center;gap:var(--spacing-2);margin-bottom:var(--spacing-2);display:flex}.question-card__tag{font-family:var(--font-mono);border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.08em;padding:2px 6px;font-size:.5625rem}.question-card__tag--pattern{background:var(--tertiary-fixed);color:var(--tertiary)}.question-card__tag--architecture{color:var(--primary);background:#08447114}.question-card__tag--evolution{background:var(--secondary-container);color:var(--secondary)}.question-card__text{margin-bottom:var(--spacing-3);font-size:.9375rem;font-weight:600;line-height:1.4}.question-card__textarea{width:100%;min-height:80px;padding:var(--spacing-3);border:1px solid var(--surface-container-high);border-radius:var(--radius-sm);font-family:var(--font-body);resize:vertical;background:var(--surface-container-low);color:var(--on-surface);font-size:.875rem;line-height:1.6}.question-card__textarea:focus{border-color:#08447166;outline:none}.question-card__textarea::placeholder{color:var(--on-surface-variant);opacity:.7}.timeline{margin-bottom:var(--spacing-8);padding-inline-start:var(--spacing-8);position:relative}.timeline__line{inset-inline-start:10px;background:var(--outline-variant);width:2px;position:absolute;top:0;bottom:0}.timeline__period{margin-bottom:var(--spacing-8)}.timeline__period:last-child{margin-bottom:0}.timeline__period-header{align-items:baseline;gap:var(--spacing-2);margin-bottom:var(--spacing-4);display:flex}.timeline__period-date{font-family:var(--font-mono);color:var(--on-surface);letter-spacing:.02em;font-size:.75rem;font-weight:600}.timeline__period-sep{color:var(--on-surface-variant);font-size:.75rem}.timeline__period-label{font-family:var(--font-mono);color:var(--on-surface-variant);letter-spacing:.02em;font-size:.75rem}.timeline__featured{align-items:flex-start;gap:var(--spacing-4);margin-bottom:var(--spacing-4);display:flex;position:relative}.timeline__dot--large{inset-inline-start:calc(-1 * var(--spacing-8) - 1px);top:var(--spacing-2);background:var(--primary);border:3px solid var(--surface);z-index:1;border-radius:50%;flex-shrink:0;width:22px;height:22px;position:absolute}.timeline__card{background:var(--surface-container-lowest);border:var(--ghost-border);border-radius:var(--radius-md);padding:var(--spacing-4) var(--spacing-5);flex:1}.timeline__card-header{align-items:center;gap:var(--spacing-3);margin-bottom:var(--spacing-2);display:flex}.timeline__card-title{font-family:var(--font-display);color:var(--on-surface);font-size:1rem;font-weight:600}.timeline__card-tag{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--tertiary);background:var(--tertiary-fixed);border-radius:var(--radius-sm);white-space:nowrap;padding:2px 8px;font-size:.5625rem;font-weight:600}.timeline__card-meta{gap:var(--spacing-3);font-family:var(--font-mono);color:var(--on-surface-variant);margin-bottom:var(--spacing-2);font-size:.6875rem;display:flex}.timeline__card-desc{color:var(--on-surface-variant);margin-bottom:var(--spacing-3);font-size:.875rem;line-height:1.6}.timeline__card-skills{gap:var(--spacing-2);flex-wrap:wrap;display:flex}.timeline__collapsed{align-items:center;gap:var(--spacing-4);margin-bottom:var(--spacing-3);display:flex;position:relative}.timeline__dot--small{inset-inline-start:calc(-1 * var(--spacing-8) + 4px);background:var(--surface-container-high);border:2px solid var(--surface);z-index:1;border-radius:50%;flex-shrink:0;width:12px;height:12px;position:absolute;top:50%;transform:translateY(-50%)}.timeline__collapsed-text{font-family:var(--font-mono);color:var(--on-surface-variant);font-size:.6875rem;line-height:1.5}.review-card{background:var(--surface-container-lowest);border:1px solid var(--ghost-border);border-radius:var(--radius-sm);padding:var(--spacing-6);margin-bottom:var(--spacing-6)}.review-card__name{font-family:var(--font-display);margin-bottom:var(--spacing-3);font-size:1.5rem;font-weight:700}.review-card__narrative{color:var(--on-surface-variant);margin-bottom:var(--spacing-6);font-size:.9375rem;line-height:1.6}.review-card__skills{gap:var(--spacing-2);flex-wrap:wrap;display:flex}.review-checklist{background:var(--surface-container-low);border-radius:var(--radius-sm);padding:var(--spacing-5) var(--spacing-6);margin-bottom:var(--spacing-6)}.review-checklist__item{align-items:center;gap:var(--spacing-3);padding:var(--spacing-2) 0;color:var(--on-surface);font-size:.875rem;display:flex}.review-checklist__item--skipped{color:var(--on-surface-variant)}.review-checklist__icon{text-align:center;flex-shrink:0;width:1.25rem;font-size:.875rem}.review-checklist__icon--checked{color:var(--secondary);font-weight:700}.review-checklist__icon--skipped{color:var(--on-surface-variant)}.review-details{background:var(--surface-container-lowest);border:1px solid var(--ghost-border);border-radius:var(--radius-sm);padding:var(--spacing-6);margin-bottom:var(--spacing-6)}.review-details__header{margin-bottom:var(--spacing-5);justify-content:space-between;align-items:baseline;display:flex}.review-details__optional{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);font-size:.625rem}.review-field{margin-bottom:var(--spacing-5)}.review-field:last-child{margin-bottom:0}.review-field__label{align-items:center;gap:var(--spacing-2);margin-bottom:var(--spacing-2);color:var(--on-surface);font-size:.8125rem;font-weight:600;display:flex}.review-field__badge{font-family:var(--font-mono);color:var(--secondary);border-radius:var(--radius-sm);background:#006a6114;padding:2px 8px;font-size:.625rem;font-weight:600}.review-field__input{width:100%;padding:var(--spacing-3) var(--spacing-4);font-family:var(--font-body);border:1px solid var(--ghost-border);border-radius:var(--radius-sm);background:var(--surface);color:var(--on-surface);outline:none;font-size:.875rem;transition:border-color .15s;display:block}.review-field__input:focus{border-color:var(--primary)}.review-field__input::placeholder{color:var(--on-surface-variant);opacity:.6}.review-field__hint{font-family:var(--font-mono);color:var(--on-surface-variant);padding:var(--spacing-3) 0;font-size:.75rem}.review-dropzone{justify-content:center;align-items:center;gap:var(--spacing-2);padding:var(--spacing-8) var(--spacing-6);border:2px dashed var(--ghost-border);border-radius:var(--radius-sm);cursor:pointer;flex-direction:column;transition:border-color .15s,background .15s;display:flex}.review-dropzone:hover,.review-dropzone:focus-visible{border-color:var(--primary);background:#08447108;outline:none}.review-dropzone__icon{opacity:.5;font-size:1.5rem}.review-dropzone__text{color:var(--on-surface-variant);font-size:.8125rem}.review-dropzone--active{border-color:var(--primary);background:#0844710f}.review-screenshot-actions{gap:var(--spacing-3);flex-direction:column;display:flex}.review-screenshot-preview{border-radius:var(--radius-sm);border:1px solid var(--ghost-border);position:relative;overflow:hidden}.review-screenshot-preview__img{object-fit:cover;object-position:top;width:100%;height:auto;max-height:300px;display:block}.review-screenshot-preview__remove{top:var(--spacing-2);right:var(--spacing-2);color:#fff;cursor:pointer;background:#0009;border:none;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:1rem;display:flex;position:absolute}.review-screenshot-preview__remove:hover{background:#000c}.review-auth{margin:var(--spacing-5) 0}.review-auth__card{border:1px solid var(--ghost-border);border-radius:var(--radius-sm);padding:var(--spacing-5) var(--spacing-6);background:var(--surface)}.review-auth__title{font-family:var(--font-heading);margin:0 0 var(--spacing-3) 0;font-size:1rem;font-weight:600}.review-auth__instructions{color:var(--on-surface-variant);margin:0 0 var(--spacing-4) 0;font-size:.875rem;line-height:1.5}.review-auth__instructions a{color:var(--primary);text-decoration:underline}.review-auth__code{font-family:var(--font-mono);letter-spacing:.15em;text-align:center;padding:var(--spacing-4);background:var(--bg);border-radius:var(--radius-sm);margin-bottom:var(--spacing-3);font-size:1.5rem;font-weight:700}.review-auth__polling{color:var(--on-surface-variant);text-align:center;margin:0;font-size:.8125rem}.upload-flow__error{padding:var(--spacing-3) var(--spacing-4);margin:var(--spacing-4) 0;border:1px solid var(--error,#dc2626);border-radius:var(--radius-sm);color:var(--error,#dc2626);background:#dc26260d;align-items:center;font-size:.875rem;display:flex}.enhance-error{padding:var(--spacing-4);border:1px solid var(--error,#dc2626);border-radius:var(--radius-sm);background:#dc26260d}.enhance-error__message{color:var(--error,#dc2626);margin-bottom:var(--spacing-3);font-size:.875rem}.enhance-feed-item--failed{opacity:1}.enhance-feed-item__fail{color:#dc2626;margin-right:var(--spacing-2);font-weight:700}.enhance-feed-item__title--failed,.enhance-feed-item__detail--failed{color:#dc2626}.enhance-split__failure-recovery{margin-top:var(--spacing-4);padding:var(--spacing-4);border:1px solid var(--outline-variant);border-radius:var(--radius-sm);background:var(--surface-container,#f5f7fa)}.enhance-split__failure-text{color:var(--on-surface-variant);margin:0 0 var(--spacing-3);font-size:.875rem}.publish-error{padding:var(--spacing-4);margin:var(--spacing-4) 0;border:1px solid var(--error,#dc2626);border-radius:var(--radius-sm);background:#dc26260d}.publish-error__message{color:var(--error,#dc2626);margin-bottom:var(--spacing-3);font-size:.875rem;font-weight:600}.publish-error__sessions{gap:var(--spacing-2);margin-bottom:var(--spacing-3);flex-direction:column;display:flex}.publish-error__session-row{align-items:center;gap:var(--spacing-2);font-size:.8125rem;font-family:var(--font-mono);display:flex}.publish-error__icon--published{color:var(--success-fg,#16a34a)}.publish-error__icon--failed{color:var(--error,#dc2626)}.publish-error__session-title{flex:1}.publish-error__session-error{color:var(--on-surface-variant);font-size:.75rem}.publish-error__actions{gap:var(--spacing-3);flex-wrap:wrap;display:flex}.publish-progress{margin:var(--spacing-4) 0;padding:var(--spacing-4);background:var(--surface-container,#f5f7fa);border-radius:var(--radius-sm)}.publish-progress__sessions{gap:var(--spacing-2);flex-direction:column;display:flex}.publish-progress__row{align-items:center;gap:var(--spacing-2);font-size:.8125rem;font-family:var(--font-mono);display:flex}.success-card{text-align:center;max-width:480px;margin:var(--spacing-8) auto;flex-direction:column;align-items:center;display:flex}.success-card__icon{margin-bottom:var(--spacing-4)}.success-card__title{font-family:var(--font-display);color:var(--on-surface);margin-bottom:var(--spacing-2);font-size:1.5rem;font-weight:700}.success-card__subtitle{color:var(--on-surface-variant);margin-bottom:var(--spacing-6);font-size:.9375rem;line-height:1.6}.success-card__preview{background:linear-gradient(135deg, var(--primary-fixed,#d3e3f4) 0%, var(--surface-container-low) 100%);border:var(--ghost-border);border-radius:var(--radius-md);width:100%;padding:var(--spacing-5) var(--spacing-6);margin-bottom:var(--spacing-4);text-align:left}.success-card__preview-name{font-family:var(--font-display);color:var(--on-surface);margin-bottom:var(--spacing-2);font-size:1.125rem;font-weight:700}.success-card__preview-narrative{color:var(--on-surface-variant);margin-bottom:var(--spacing-4);font-size:.8125rem;line-height:1.6}.success-card__preview-stats{gap:var(--spacing-3);grid-template-columns:repeat(4,1fr);display:grid}.success-card__preview-stat{flex-direction:column;align-items:center;gap:2px;display:flex}.success-card__preview-stat-value{font-family:var(--font-mono);color:var(--on-surface);font-size:1rem;font-weight:700}.success-card__preview-stat-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);font-size:.5625rem}.success-card__url-bar{background:var(--surface-container-lowest);border:var(--ghost-border);border-radius:var(--radius-sm);width:100%;padding:var(--spacing-2) var(--spacing-3);margin-bottom:var(--spacing-4);align-items:center;display:flex}.success-card__url-text{font-family:var(--font-mono);color:var(--on-surface);text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.8125rem;overflow:hidden}.success-card__url-copy{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--primary);border:1px solid var(--primary);border-radius:var(--radius-sm);padding:var(--spacing-1) var(--spacing-3);cursor:pointer;background:0 0;flex-shrink:0;font-size:.6875rem;font-weight:600;transition:background .15s}.success-card__url-copy:hover{background:#0844710f}.success-card__meta{align-items:center;gap:var(--spacing-3);margin-bottom:var(--spacing-6);justify-content:center;width:100%;display:flex}.success-card__badge{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--success-fg,#16a34a);background:var(--success-bg,#dcfce7);border-radius:var(--radius-sm);padding:2px 8px;font-size:.5625rem;font-weight:600}.success-card__meta-text{font-family:var(--font-mono);color:var(--on-surface-variant);font-size:.6875rem}.success-card__actions{gap:var(--spacing-3);width:100%;display:flex}.distribution-helpers{width:100%;border-top:1px solid var(--outline-variant);margin-block-start:var(--spacing-6);padding-block-start:var(--spacing-6)}.distribution-helpers__header{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;color:var(--on-surface-variant);margin-block-end:var(--spacing-4);font-size:.6875rem;font-weight:600}.distribution-helpers__item{margin-block-end:var(--spacing-4)}.distribution-helpers__label{color:var(--on-surface);margin-block-end:var(--spacing-1);font-size:.75rem;font-weight:600}.distribution-helpers__snippet{align-items:flex-start;gap:var(--spacing-2);background:var(--surface-container,#f0f2f5);border-radius:var(--radius-sm,4px);padding:var(--spacing-2) var(--spacing-3);display:flex}.distribution-helpers__snippet code{font-family:var(--font-mono);color:var(--on-surface);word-break:break-all;white-space:pre-wrap;flex:1;font-size:.6875rem;line-height:1.5}.distribution-helpers__copy{font-family:var(--font-mono);color:var(--primary,#084471);cursor:pointer;white-space:nowrap;background:0 0;border:none;flex-shrink:0;padding:0;font-size:.6875rem;font-weight:600}.distribution-helpers__copy:hover{text-decoration:underline}.triage-terminal{background:var(--inverse-surface);color:var(--inverse-on-surface);border-radius:var(--radius-lg,12px);padding:var(--spacing-6);max-width:640px;margin:var(--spacing-8) auto;font-family:var(--font-mono);font-size:.8125rem;line-height:1.7}.triage-terminal__feed{scrollbar-width:thin;scrollbar-color:#ffffff26 transparent;max-height:480px;overflow-y:auto}.triage-terminal__line{white-space:pre;min-height:1.7em}.triage-terminal__prompt{color:var(--inverse-primary,#9dcaff);margin-bottom:var(--spacing-2);font-weight:600}.triage-terminal__section{color:#ffffff80;font-weight:600}.triage-terminal__line--passed{color:#34d399}.triage-terminal__line--skipped{color:#f87171}.triage-terminal__line--active{color:#fbbf24}@media (prefers-reduced-motion:reduce){.triage-terminal__line--active{animation:none}}.project-preview{background:var(--surface);z-index:100;position:fixed;inset:0;overflow-y:auto}.project-preview__close{top:var(--spacing-4);right:var(--spacing-6);z-index:101;font-family:var(--font-mono);color:var(--on-surface-variant);background:var(--surface-container-low);border:1px solid var(--surface-container-high);padding:var(--spacing-2) var(--spacing-4);cursor:pointer;border-radius:.375rem;font-size:.8125rem;transition:color .15s;position:fixed}.project-preview__close:hover{color:var(--on-surface)}.project-preview__close:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.project-preview__content{max-width:1000px;padding:var(--spacing-8);margin:0 auto}.project-preview__breadcrumb{font-family:var(--font-mono);color:var(--on-surface-variant);margin-bottom:var(--spacing-2);font-size:.75rem}.project-preview__title{font-family:var(--font-display);letter-spacing:-.02em;color:var(--on-surface);margin:0 0 var(--spacing-4) 0;font-size:2.5rem;font-weight:700;line-height:1.15}.project-preview__links{align-items:center;gap:var(--spacing-4);margin-bottom:var(--spacing-6);display:flex}.project-preview__link{align-items:center;gap:var(--spacing-2);font-family:var(--font-mono);color:var(--primary);font-size:.8125rem;text-decoration:none;display:inline-flex}.project-preview__link:hover{text-decoration:underline}.project-preview__narrative{font-family:var(--font-body);color:var(--on-surface);border-left:3px solid var(--primary);padding-left:var(--spacing-4);margin-bottom:var(--spacing-6);font-size:1rem;line-height:1.65}.project-preview__skills{gap:var(--spacing-2);margin-bottom:var(--spacing-6);flex-wrap:wrap;display:flex}.project-preview__hero-stats{gap:var(--spacing-4);margin-bottom:var(--spacing-8);grid-template-columns:repeat(4,1fr);display:grid}.project-preview__hero-stat{text-align:center;padding:var(--spacing-4);border:1px solid var(--ghost-border);border-radius:.375rem}.project-preview__hero-value{font-family:var(--font-mono);color:var(--on-surface);font-size:1.5rem;font-weight:700;line-height:1.2}.project-preview__hero-value--primary{color:var(--primary)}.project-preview__hero-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);margin-top:var(--spacing-1);font-size:.5625rem}.project-preview__timeline-heading{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);margin-bottom:var(--spacing-4);font-size:.6875rem;font-weight:600}.review-preview-link{text-align:center;margin-bottom:var(--spacing-6);font-family:var(--font-mono);color:var(--primary);cursor:pointer;padding:var(--spacing-2) 0;background:0 0;border:none;font-size:.8125rem;display:block}.review-preview-link:hover{text-decoration:underline}.review-preview-link:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:.25rem}.typewriter-cursor{background:var(--primary);vertical-align:text-bottom;width:2px;height:1.1em;margin-inline-start:2px;animation:.8s step-end infinite cursor-blink;display:inline-block}@keyframes cursor-blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.typewriter-cursor{opacity:1;animation:none}}.project-preview__banner{background:var(--primary-fixed);color:var(--primary);text-align:center;padding:var(--spacing-2) var(--spacing-4);font-family:var(--font-mono);letter-spacing:.03em;font-size:.6875rem}.project-preview__screenshot{margin-bottom:var(--spacing-6);background:var(--surface-container-low);border-radius:var(--radius-sm);border:1px solid var(--ghost-border);overflow:hidden}.project-preview__screenshot-inner{height:280px;color:var(--on-surface-variant);justify-content:center;align-items:center;gap:var(--spacing-2);font-family:var(--font-mono);background:linear-gradient(135deg,#0844710a,#08447114);flex-direction:column;font-size:.6875rem;display:flex}.project-preview .timeline__card:hover{box-shadow:var(--shadow-sm);border-color:#08447140}.project-preview .timeline__card:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.project-preview .timeline__card{transition:box-shadow .15s,border-color .15s}.enhance-split__narrative-placeholder{align-items:center;gap:var(--spacing-3);padding:var(--spacing-4) var(--spacing-5);background:var(--surface-container-low);border-radius:var(--radius-sm);border-left:3px solid var(--primary);color:var(--on-surface-variant);margin-bottom:var(--spacing-6);font-size:.875rem;line-height:1.5;display:flex}.project-preview__sessions-heading{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--on-surface-variant);margin-top:var(--spacing-8);margin-bottom:var(--spacing-4);font-size:.6875rem;font-weight:600}.project-preview__sessions-grid{gap:var(--spacing-4);margin-bottom:var(--spacing-8);grid-template-columns:repeat(2,1fr);display:grid}.project-preview__session-card{background:var(--surface-container-lowest);border:1px solid var(--ghost-border);border-radius:var(--radius-sm);padding:var(--spacing-6);transition:box-shadow .15s}.project-preview__session-card:hover{box-shadow:var(--shadow-sm)}.project-preview__session-bar{height:4px;margin-bottom:var(--spacing-4);border-radius:2px}.project-preview__session-title{font-family:var(--font-display);color:var(--on-surface);margin:0 0 var(--spacing-2) 0;font-size:1.125rem;font-weight:700;line-height:1.3}.project-preview__session-stats{font-family:var(--font-mono);color:var(--on-surface-variant);margin-bottom:var(--spacing-3);font-size:.8125rem}.project-preview__session-skills{gap:var(--spacing-2);margin-top:var(--spacing-3);flex-wrap:wrap;display:flex}.growth-chart{gap:var(--spacing-6);margin-bottom:var(--spacing-8);align-items:center;display:flex}.growth-chart__svg-container{flex:1;min-width:0}.growth-chart__summary{text-align:right;flex-shrink:0;width:200px}.growth-chart__total-value{font-family:var(--font-mono);color:var(--primary);font-size:2.5rem;font-weight:700;line-height:1.1}.growth-chart__total-label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--on-surface-variant);margin-top:var(--spacing-1);font-size:.5625rem;font-weight:600}.growth-chart__stat{margin-top:var(--spacing-4)}.growth-chart__stat-value{font-family:var(--font-mono);color:var(--on-surface);font-size:1.5rem;font-weight:700;line-height:1.2}.growth-chart__stat-label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--on-surface-variant);margin-top:var(--spacing-1);font-size:.5625rem;font-weight:600}.dir-heatmap{margin-bottom:var(--spacing-8)}.dir-heatmap__empty{font-family:var(--font-mono);color:var(--on-surface-variant);padding:var(--spacing-4) 0;font-size:.75rem}.dir-heatmap__grid{margin-bottom:var(--spacing-3);gap:2px;display:grid;overflow-x:auto}.dir-heatmap__session-label{font-family:var(--font-mono);text-align:center;color:var(--on-surface-variant);text-overflow:ellipsis;white-space:nowrap;padding-bottom:var(--spacing-2);font-size:.625rem;overflow:hidden}.dir-heatmap__dir-label{font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;color:var(--on-surface);align-self:center;padding-inline-end:var(--spacing-2);font-size:.75rem;overflow:hidden}.dir-heatmap__cell{cursor:default;border-radius:2px;min-width:80px;min-height:32px;position:relative}.dir-heatmap__cell:hover{outline:1px solid var(--primary,#084471)}.dir-heatmap__legend{align-items:center;gap:var(--spacing-3);font-family:var(--font-mono);color:var(--on-surface-variant);margin-bottom:var(--spacing-6);font-size:.6875rem;display:flex}.dir-heatmap__top-files{margin-bottom:var(--spacing-8)}.dir-heatmap__top-files-summary{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--on-surface-variant);cursor:pointer;margin-bottom:var(--spacing-3);font-size:.6875rem;font-weight:600}.dir-heatmap__top-files-summary:hover{color:var(--on-surface)}.dir-heatmap__file-row{padding:var(--spacing-2) 0;border-bottom:var(--ghost-border);font-family:var(--font-mono);justify-content:space-between;font-size:.75rem;display:flex}.dir-heatmap__file-path{text-overflow:ellipsis;white-space:nowrap;color:var(--on-surface);margin-inline-end:var(--spacing-3);overflow:hidden}.dir-heatmap__file-count{color:var(--on-surface-variant);flex-shrink:0}.session-detail-overlay{background:var(--surface);z-index:110;flex-direction:column;display:flex;position:fixed;inset:0}.session-detail__header{padding:var(--spacing-3) var(--spacing-6);border-bottom:1px solid var(--outline-variant);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.session-detail__back{font-family:var(--font-mono);color:var(--on-surface-variant);cursor:pointer;padding:var(--spacing-1) var(--spacing-2);border-radius:var(--radius-sm);background:0 0;border:none;font-size:.8125rem;transition:color .15s}.session-detail__back:hover{color:var(--on-surface)}.session-detail__close{color:var(--on-surface-variant);cursor:pointer;padding:var(--spacing-1) var(--spacing-2);border-radius:var(--radius-sm);background:0 0;border:none;font-size:1.25rem;line-height:1;transition:color .15s}.session-detail__close:hover{color:var(--on-surface)}.session-detail__scroll{padding:var(--spacing-8) var(--spacing-6) var(--spacing-12);flex:1;width:100%;max-width:1100px;margin:0 auto;overflow-y:auto}.session-detail__layout{gap:var(--spacing-8);grid-template-columns:2fr 1fr;display:grid}.session-detail__main,.session-detail__sidebar{min-width:0}.session-detail__breadcrumb{font-family:var(--font-mono);color:var(--on-surface-variant);margin-bottom:var(--spacing-2);letter-spacing:.01em;font-size:.75rem}.session-detail__title{font-family:var(--font-display);color:var(--on-surface);margin-bottom:var(--spacing-6);font-size:2rem;font-weight:600;line-height:1.2}.session-detail__stats-grid{gap:var(--spacing-4);margin-bottom:var(--spacing-6);grid-template-columns:repeat(4,1fr);display:grid}.session-detail__stat{padding:var(--spacing-3) var(--spacing-4);background:var(--surface-container-lowest);border:1px solid var(--outline-variant);border-radius:var(--radius-md)}.session-detail__stat-value{font-family:var(--font-display);color:var(--on-surface);font-size:1.25rem;font-weight:600}.session-detail__stat-label{font-family:var(--font-mono);color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.04em;margin-top:var(--spacing-1);font-size:.6875rem}.session-detail__section{margin-bottom:var(--spacing-6)}.session-detail__section-label{font-family:var(--font-mono);color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--spacing-3);font-size:.6875rem;font-weight:600}.session-detail__take{font-family:var(--font-body);color:var(--on-surface);border-inline-start:3px solid var(--primary);margin:0;padding-inline-start:var(--spacing-4);font-size:.9375rem;line-height:1.6}.session-detail__context{font-family:var(--font-body);color:var(--on-surface-variant);font-size:.875rem;line-height:1.6}.session-detail__skills{gap:var(--spacing-2);flex-wrap:wrap;display:flex}.session-detail__qa-list{gap:var(--spacing-4);flex-direction:column;display:flex}.session-detail__qa-pair{padding-bottom:var(--spacing-4);border-bottom:1px solid var(--outline-variant)}.session-detail__qa-pair:last-child{border-bottom:none;padding-bottom:0}.session-detail__qa-question{font-family:var(--font-body);color:var(--on-surface);margin-bottom:var(--spacing-2);font-size:.875rem;font-weight:600}.session-detail__qa-answer{font-family:var(--font-body);color:var(--on-surface-variant);padding-inline-start:var(--spacing-4);font-size:.875rem;line-height:1.6}.session-detail__highlights{gap:var(--spacing-4);padding-bottom:var(--spacing-2);scrollbar-width:thin;display:flex;overflow-x:auto}.session-detail__highlight-card{padding:var(--spacing-4);background:var(--surface-container-lowest);border:1px solid var(--outline-variant);border-radius:var(--radius-md);flex:0 0 240px}.session-detail__highlight-step{font-family:var(--font-mono);color:var(--primary);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--spacing-1);font-size:.625rem}.session-detail__highlight-title{font-family:var(--font-display);color:var(--on-surface);margin-bottom:var(--spacing-2);font-size:.875rem;font-weight:600}.session-detail__highlight-desc{font-family:var(--font-body);color:var(--on-surface-variant);font-size:.8125rem;line-height:1.5}.session-detail__sidebar-section{margin-bottom:var(--spacing-6)}.session-detail__exec-path{padding-inline-start:var(--spacing-5);position:relative}.session-detail__exec-path:before{content:"";inset-inline-start:5px;background:var(--outline-variant);width:1px;position:absolute;top:8px;bottom:8px}.session-detail__exec-step{padding-bottom:var(--spacing-4);position:relative}.session-detail__exec-step:last-child{padding-bottom:0}.session-detail__exec-dot{inset-inline-start:calc(var(--spacing-5) * -1 + 2px);background:var(--primary);border-radius:50%;width:7px;height:7px;position:absolute;top:6px}.session-detail__exec-title{font-family:var(--font-body);color:var(--on-surface);font-size:.8125rem;font-weight:600;line-height:1.3}.session-detail__exec-desc{font-family:var(--font-body);color:var(--on-surface-variant);margin-top:var(--spacing-1);font-size:.75rem;line-height:1.5}.session-detail__raw-log{background:var(--inverse-surface);color:var(--inverse-on-surface);border-radius:var(--radius-md);padding:var(--spacing-3) var(--spacing-4);font-family:var(--font-mono);font-size:.6875rem;line-height:1.6;overflow:hidden}.session-detail__raw-line{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.session-detail__raw-more{margin-top:var(--spacing-3);color:var(--inverse-primary);cursor:default;font-size:.6875rem}.session-detail__source-list{gap:var(--spacing-2);flex-direction:column;display:flex}.session-detail__source-row{justify-content:space-between;align-items:baseline;font-size:.8125rem;display:flex}.session-detail__source-key{font-family:var(--font-mono);color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.04em;font-size:.6875rem}.session-detail__source-val{font-family:var(--font-body);color:var(--on-surface);font-size:.8125rem}.session-detail__full-width{margin-top:var(--spacing-8);gap:var(--spacing-4);flex-direction:column;display:flex}.session-detail__collapsible{border:1px solid var(--outline-variant);border-radius:var(--radius-md);overflow:hidden}.session-detail__collapsible-summary{font-family:var(--font-mono);color:var(--on-surface);padding:var(--spacing-3) var(--spacing-4);cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--surface-container-low);font-size:.8125rem;font-weight:600;list-style:none}.session-detail__collapsible-summary::-webkit-details-marker{display:none}.session-detail__collapsible-summary:before{content:"▶";margin-inline-end:var(--spacing-2);font-size:.625rem;transition:transform .15s;display:inline-block}.session-detail__collapsible[open]>.session-detail__collapsible-summary:before{transform:rotate(90deg)}.session-detail__tool-list{padding:var(--spacing-3) var(--spacing-4);gap:var(--spacing-2);flex-direction:column;display:flex}.session-detail__tool-row{align-items:center;gap:var(--spacing-3);grid-template-columns:140px 1fr 40px;display:grid}.session-detail__tool-name{font-family:var(--font-mono);color:var(--on-surface);white-space:nowrap;text-overflow:ellipsis;font-size:.75rem;overflow:hidden}.session-detail__tool-bar-track{background:var(--surface-container-high);border-radius:3px;height:6px;overflow:hidden}.session-detail__tool-bar{background:var(--primary);border-radius:3px;height:100%;transition:width .2s}.session-detail__tool-count{font-family:var(--font-mono);color:var(--on-surface-variant);text-align:end;font-size:.75rem}.session-detail__file-list{padding:var(--spacing-3) var(--spacing-4);gap:var(--spacing-1);flex-direction:column;display:flex}.session-detail__file-row{gap:var(--spacing-3);font-family:var(--font-mono);padding:var(--spacing-1) 0;grid-template-columns:1fr auto auto;align-items:baseline;font-size:.75rem;display:grid}.session-detail__file-path{color:var(--on-surface);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.session-detail__file-additions{color:var(--secondary);font-weight:600}.session-detail__file-deletions{color:var(--error);font-weight:600}.project-preview__session-card--clickable{cursor:pointer;transition:border-color .15s,box-shadow .15s}.project-preview__session-card--clickable:hover{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}.project-preview__session-card--clickable:focus-visible{outline:2px solid var(--primary);outline-offset:2px}@media (width<=720px){.session-detail__layout{grid-template-columns:1fr}.session-detail__stats-grid{grid-template-columns:repeat(2,1fr)}.session-detail__scroll{padding:var(--spacing-4) var(--spacing-4) var(--spacing-8)}.session-detail__tool-row{grid-template-columns:100px 1fr 36px}}.agent-activity{margin-bottom:var(--spacing-8)}.agent-activity__card{background:var(--surface-container-lowest);border:var(--ghost-border);border-radius:var(--radius-sm);padding:var(--spacing-5)}.agent-activity__legend{gap:var(--spacing-4);margin-bottom:var(--spacing-4);flex-wrap:wrap;display:flex}.agent-activity__legend-item{font-family:var(--font-mono);color:var(--on-surface-variant);align-items:center;gap:4px;font-size:.5625rem;display:flex}.agent-activity__legend-dot{border-radius:50%;width:8px;height:8px}.agent-activity__timelines{gap:var(--spacing-2);-webkit-overflow-scrolling:touch;padding-bottom:var(--spacing-2);flex-direction:column;display:flex;overflow-x:auto}.agent-activity__session{flex-direction:column;gap:2px;min-width:fit-content;display:flex}.agent-activity__session-label{font-family:var(--font-mono);letter-spacing:.04em;color:var(--on-surface-variant);text-transform:uppercase;text-overflow:ellipsis;white-space:nowrap;max-width:50%;font-size:.5625rem;font-weight:600;overflow:hidden}.agent-activity__summary{gap:var(--spacing-3);margin-top:var(--spacing-4);padding-top:var(--spacing-4);border-top:var(--ghost-border);grid-template-columns:repeat(4,1fr);display:grid}.agent-activity__summary-label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--on-surface-variant);margin-top:var(--spacing-1);font-size:.5625rem;font-weight:600}.agent-activity__summary-value{color:var(--on-surface);font-weight:700}.time-page{max-width:960px;padding:var(--spacing-8) var(--spacing-6);height:100vh;margin:0 auto;overflow-y:auto}.time-page__loading,.time-page__empty{text-align:center;padding:var(--spacing-8);font-family:var(--font-mono);color:var(--on-surface-variant);font-size:.875rem}.time-page__header{margin-block-end:var(--spacing-8)}.time-page__title{font-family:var(--font-display);color:var(--on-surface);margin:0;font-size:1.75rem;font-weight:700}.time-page__subtitle{font-family:var(--font-mono);color:var(--on-surface-variant);margin:var(--spacing-2) 0 0 0;font-size:.75rem}.time-page__hero{align-items:center;gap:var(--spacing-6);padding:var(--spacing-6);background:var(--surface-container,#f0f2f5);border-radius:var(--radius-md,8px);margin-block-end:var(--spacing-6);display:flex}.time-page__hero-stat{text-align:center}.time-page__hero-value{font-family:var(--font-mono);color:var(--on-surface);font-size:2rem;font-weight:700}.time-page__hero-value--primary{color:var(--primary,#084471)}.time-page__hero-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;color:var(--on-surface-variant);margin-block-start:var(--spacing-1);font-size:.6875rem;font-weight:600}.time-page__hero-divider{font-family:var(--font-mono);color:var(--on-surface-variant);font-size:2rem;font-weight:300}.time-page__chips{gap:var(--spacing-2);flex-wrap:wrap;margin-block-end:var(--spacing-8);display:flex}.time-page__chip{font-family:var(--font-mono);padding:var(--spacing-1) var(--spacing-3);background:var(--surface-container,#f0f2f5);border-radius:var(--radius-sm,4px);color:var(--on-surface-variant);font-size:.6875rem}.time-page__table{border:1px solid var(--outline-variant);border-radius:var(--radius-md,8px);margin-block-end:var(--spacing-8);overflow:hidden}.time-page__table-header{gap:var(--spacing-3);padding:var(--spacing-3) var(--spacing-4);background:var(--surface-container,#f0f2f5);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;color:var(--on-surface-variant);grid-template-columns:2fr 1fr .7fr .8fr .8fr .7fr;font-size:.625rem;font-weight:600;display:grid}.time-page__table-row{gap:var(--spacing-3);padding:var(--spacing-3) var(--spacing-4);border-top:1px solid var(--outline-variant);grid-template-columns:2fr 1fr .7fr .8fr .8fr .7fr;align-items:center;display:grid}.time-page__table-row:hover{background:var(--surface-container-low,#f8f9fb)}.time-page__project-name{color:var(--on-surface);text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:600;overflow:hidden}.time-page__section-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;color:var(--on-surface-variant);margin-block-end:var(--spacing-3);font-size:.6875rem;font-weight:600}.time-page__roles{margin-block-end:var(--spacing-8)}.time-page__role-chips{gap:var(--spacing-2);flex-wrap:wrap;display:flex}.time-page__footer{text-align:center;border-top:1px solid var(--outline-variant);padding-block-start:var(--spacing-6)}.time-page__footer-text{font-family:var(--font-mono);color:var(--on-surface-variant);font-size:.6875rem}.time-page__actions{justify-content:space-between;align-items:center;gap:var(--spacing-3);flex-wrap:wrap;margin-block-end:var(--spacing-6);display:flex}.time-page__toggle{align-items:center;gap:var(--spacing-2);font-family:var(--font-mono);color:var(--on-surface-variant);cursor:pointer;font-size:.75rem;display:flex}.time-page__toggle input{accent-color:var(--primary)}.time-page__action-buttons{gap:var(--spacing-2);display:flex}.time-page__publish-result{font-family:var(--font-mono);padding:var(--spacing-3) var(--spacing-4);background:var(--success-bg,#dcfce7);color:var(--success-fg,#16a34a);border-radius:var(--radius-sm,4px);margin-block-end:var(--spacing-6);font-size:.75rem}.time-page__publish-result a{color:inherit;font-weight:600}.time-page__publish-result--error{color:#dc2626;background:#fef2f2}.time-page__capture{padding:var(--spacing-4);background:#fff}
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2
- <rect width="32" height="32" rx="6" fill="#084471"/>
3
- <text x="7" y="24" font-family="'Space Grotesk','Inter',system-ui,sans-serif" font-weight="700" font-size="22" fill="#ffffff">h</text>
4
- <circle cx="24" cy="23" r="2.5" fill="#ffffff"/>
5
- </svg>
@@ -1,24 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg">
2
- <symbol id="bluesky-icon" viewBox="0 0 16 17">
3
- <g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
4
- <defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
5
- </symbol>
6
- <symbol id="discord-icon" viewBox="0 0 20 19">
7
- <path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
8
- </symbol>
9
- <symbol id="documentation-icon" viewBox="0 0 21 20">
10
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
11
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
12
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
13
- </symbol>
14
- <symbol id="github-icon" viewBox="0 0 19 19">
15
- <path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
16
- </symbol>
17
- <symbol id="social-icon" viewBox="0 0 20 20">
18
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
19
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
20
- </symbol>
21
- <symbol id="x-icon" viewBox="0 0 19 19">
22
- <path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
23
- </symbol>
24
- </svg>
@@ -1,20 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>heyi.am</title>
8
- <link rel="preconnect" href="https://fonts.googleapis.com" />
9
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
- <link
11
- href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600;700&display=swap"
12
- rel="stylesheet"
13
- />
14
- <script type="module" crossorigin src="/assets/index-CEQyTkgN.js"></script>
15
- <link rel="stylesheet" crossorigin href="/assets/index-DLh5xRE8.css">
16
- </head>
17
- <body>
18
- <div id="root"></div>
19
- </body>
20
- </html>
@@ -1,10 +0,0 @@
1
- export interface MachineKeyPair {
2
- publicKey: string;
3
- privateKey: string;
4
- createdAt: string;
5
- }
6
- export declare function generateKeyPair(): MachineKeyPair;
7
- export declare function loadOrCreateKeyPair(configDir?: string): MachineKeyPair;
8
- export declare function signPayload(payload: string, privateKeyBase64: string): string;
9
- export declare function verifySignature(payload: string, signatureBase64: string, publicKeyBase64: string): boolean;
10
- export declare function getFingerprint(publicKeyBase64: string): string;
@@ -1,51 +0,0 @@
1
- import { generateKeyPairSync, sign, verify, createHash } from 'node:crypto';
2
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import { homedir } from 'node:os';
5
- const CONFIG_DIR = join(homedir(), '.config', 'heyiam');
6
- const KEY_FILE = 'machine-key.json';
7
- export function generateKeyPair() {
8
- const { publicKey, privateKey } = generateKeyPairSync('ed25519', {
9
- publicKeyEncoding: { type: 'spki', format: 'der' },
10
- privateKeyEncoding: { type: 'pkcs8', format: 'der' },
11
- });
12
- return {
13
- publicKey: publicKey.toString('base64'),
14
- privateKey: privateKey.toString('base64'),
15
- createdAt: new Date().toISOString(),
16
- };
17
- }
18
- export function loadOrCreateKeyPair(configDir = CONFIG_DIR) {
19
- const keyPath = join(configDir, KEY_FILE);
20
- if (existsSync(keyPath)) {
21
- const raw = readFileSync(keyPath, 'utf-8');
22
- return JSON.parse(raw);
23
- }
24
- const keyPair = generateKeyPair();
25
- mkdirSync(configDir, { recursive: true });
26
- writeFileSync(keyPath, JSON.stringify(keyPair, null, 2), { mode: 0o600 });
27
- return keyPair;
28
- }
29
- export function signPayload(payload, privateKeyBase64) {
30
- const privateKeyDer = Buffer.from(privateKeyBase64, 'base64');
31
- const keyObject = createPrivateKeyFromDer(privateKeyDer);
32
- const signature = sign(null, Buffer.from(payload, 'utf-8'), keyObject);
33
- return signature.toString('base64');
34
- }
35
- export function verifySignature(payload, signatureBase64, publicKeyBase64) {
36
- const publicKeyDer = Buffer.from(publicKeyBase64, 'base64');
37
- const keyObject = createPublicKeyFromDer(publicKeyDer);
38
- return verify(null, Buffer.from(payload, 'utf-8'), keyObject, Buffer.from(signatureBase64, 'base64'));
39
- }
40
- export function getFingerprint(publicKeyBase64) {
41
- const hash = createHash('sha256').update(Buffer.from(publicKeyBase64, 'base64')).digest('hex');
42
- // Format as colon-separated pairs for display
43
- return hash.match(/.{2}/g).join(':');
44
- }
45
- function createPrivateKeyFromDer(der) {
46
- return { key: der, format: 'der', type: 'pkcs8' };
47
- }
48
- function createPublicKeyFromDer(der) {
49
- return { key: der, format: 'der', type: 'spki' };
50
- }
51
- //# sourceMappingURL=machine-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"machine-key.js","sourceRoot":"","sources":["../src/machine-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAEpC,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,SAAS,EAAE;QAC/D,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QAClD,kBAAkB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;KACrD,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB,UAAU;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,gBAAwB;IACnE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,eAAuB,EAAE,eAAuB;IAC/F,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,eAAuB;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/F,8CAA8C;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW;IAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAc,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAc,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC;AACrE,CAAC"}