/* App layout - minimal CSS, most styling via Tailwind */ .app-shell { display: flex; flex-direction: column; height: 100vh; width: 100vw; overflow: hidden; box-shadow: inset 0 0 0 1px var(--border-primary); } .app { display: flex; flex: 1; min-height: 0; overflow: hidden; } .app__sidebar { flex-shrink: 0; display: flex; flex-direction: column; } .app__sidebar > * { flex: 1; } .app__note-list { flex-shrink: 0; display: flex; flex-direction: column; } .app__note-list > * { flex: 1; } .app__editor { flex: 1; min-width: 0; min-height: 0; overflow: hidden; display: flex; flex-direction: column; } .app__editor > * { flex: 1; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes tab-status-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } } .tab-status-pulse { animation: tab-status-pulse 1.2s ease-in-out infinite; } /* AI highlight animation — applied by useAiActivity when MCP calls ui_highlight */ @keyframes ai-highlight-glow { 0% { box-shadow: inset 0 0 0 2px rgba(99, 102, 241, 0.8); } 50% { box-shadow: inset 0 0 8px 2px rgba(99, 102, 241, 0.4); } 100% { box-shadow: inset 0 0 0 2px rgba(99, 102, 241, 0); } } .ai-highlight { animation: ai-highlight-glow 0.8s ease-out; }