Mercurial
view hg-web/src/index.css @ 279:b3b547563ec7
Add Google connector service and agent wiki
Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:22:36 -0700 |
| parents | 70de0c80d093 |
| children |
line wrap: on
line source
/* =========================================== Component Styles Import base.css before this file =========================================== */ /* =========================================== App Layout =========================================== */ .app-container { max-width: 1200px; margin: 0 auto; padding: 40px 20px; } /* =========================================== Header =========================================== */ .header { display: flex; align-items: center; margin-bottom: 24px; gap: 15px; } .header-icon { width: 32px; height: 32px; opacity: 0.8; cursor: pointer; } .header h1 { margin: 0; font-size: 24px; font-weight: 600; color: var(--text-primary); } .header h1 a { color: inherit; text-decoration: none; } .header-subtitle { color: var(--text-secondary); margin: 0; font-size: 14px; } /* =========================================== Navigation Tabs =========================================== */ .nav-tabs { display: flex; gap: 8px; margin-bottom: 24px; border-bottom: 1px solid var(--border); padding-bottom: 8px; } .nav-tab { display: flex; align-items: center; gap: 8px; padding: 8px 16px; border-radius: 6px; background: transparent; border: 1px solid transparent; color: var(--text-secondary); cursor: pointer; font-size: 14px; transition: all 0.2s; } .nav-tab:hover { background: var(--bg-subtle); color: var(--text-primary); } .nav-tab.active { background: var(--bg-subtle); border-color: var(--border); color: var(--text-primary); font-weight: 500; } .nav-tab svg { color: var(--text-secondary); } /* =========================================== Landing Page =========================================== */ .landing-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } @media (max-width: 768px) { .landing-grid { grid-template-columns: 1fr; } } .landing-section { background: var(--bg); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; } .landing-section-header { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; background: var(--bg-subtle); border-bottom: 1px solid var(--border); } .landing-section-title { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 14px; color: var(--text-primary); } .landing-section-title svg { color: var(--text-secondary); } .landing-section-link { font-size: 12px; color: var(--accent); text-decoration: none; padding: 4px 8px; border-radius: 4px; transition: background 0.2s; } .landing-section-link:hover { background: var(--bg-subtle); text-decoration: underline; } .landing-section-content { padding: 0; } /* =========================================== Directory Items (Landing Preview) =========================================== */ .dir-item { display: flex; align-items: center; padding: 10px 16px; border-bottom: 1px solid var(--border); font-size: 14px; cursor: pointer; transition: background 0.1s; } .dir-item:last-child { border-bottom: none; } .dir-item:hover { background: var(--hover); } .dir-item-icon { margin-right: 12px; opacity: 0.7; } .dir-item-icon img { width: 18px; height: 18px; } .dir-item-name { color: var(--text-primary); } .dir-item-name:hover { color: var(--accent); } /* =========================================== Page Header (Graph Page) =========================================== */ .page-header { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; } .back-button { display: flex; align-items: center; gap: 6px; padding: 6px 12px; background: var(--bg-subtle); border: 1px solid var(--border); border-radius: 6px; color: var(--text-secondary); cursor: pointer; font-size: 13px; transition: all 0.2s; } .back-button:hover { background: var(--hover); color: var(--text-primary); } .page-title { font-size: 18px; font-weight: 600; color: var(--text-primary); } /* =========================================== Graph Params =========================================== */ .graph-params { display: flex; gap: 12px; margin-bottom: 16px; font-size: 12px; color: var(--text-secondary); } .graph-param { display: flex; align-items: center; gap: 6px; padding: 4px 8px; background: var(--bg-subtle); border-radius: 4px; } .graph-param-label { font-weight: 500; } .graph-param-value { font-family: monospace; color: var(--accent); } /* =========================================== Graph Component =========================================== */ .graph-container { background: var(--bg); color: var(--text-primary); font-family: "More Thin", sans-serif; border-radius: 6px; border: 1px solid var(--border); overflow: hidden; } .graph-wrapper { display: flex; align-items: flex-start; max-height: 600px; overflow-y: auto; position: relative; } .graph-canvas-column { flex-shrink: 0; position: sticky; left: 0; z-index: 1; border-right: 1px solid var(--border); } .graph-details-column { flex-grow: 1; overflow-x: hidden; } .graph-row { width: 100%; height: 40px; display: flex; flex-direction: column; justify-content: center; padding: 0 12px; background: transparent; color: inherit; text-align: left; border: 0; border-bottom: 1px solid var(--border); font-size: 12px; cursor: pointer; transition: background-color 0.1s; } .graph-row:hover { background: var(--hover); } .graph-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; background: var(--hover); } .graph-row-meta { display: flex; gap: 10px; margin-bottom: 2px; align-items: center; } .graph-hash { color: var(--accent); font-family: monospace; } .graph-user { color: var(--text-secondary); font-weight: 500; } .graph-branch { color: var(--text-secondary); font-size: 10px; background: var(--bg-subtle); padding: 1px 6px; border-radius: 3px; } .graph-desc { color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; gap: 6px; } .graph-badge-tip { background: var(--success); color: #fff; padding: 0 4px; border-radius: 2px; font-size: 10px; font-weight: bold; flex-shrink: 0; } .graph-badge-tag { background: var(--accent); color: #fff; padding: 0 4px; border-radius: 2px; font-size: 10px; font-weight: bold; flex-shrink: 0; } .graph-loading-row { height: 40px; display: flex; align-items: center; justify-content: center; color: var(--text-secondary); font-size: 12px; } /* =========================================== Changeset Detail =========================================== */ .changeset-paper { background: var(--bg); border: 1px solid var(--border); border-radius: 6px; padding: 24px; } .changeset-heading, .changeset-meta, .changeset-parents, .changeset-files, .changeset-labels { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; } .changeset-heading { justify-content: space-between; margin-bottom: 12px; } .changeset-heading code { overflow-wrap: anywhere; } .changeset-paper h2 { margin-bottom: 8px; } .changeset-meta { color: var(--text-secondary); justify-content: space-between; margin-bottom: 16px; } .changeset-branch, .changeset-labels span { background: var(--bg-subtle); border: 1px solid var(--border); border-radius: 999px; padding: 2px 8px; font-size: 12px; } .changeset-labels, .changeset-parents, .changeset-files { margin: 12px 0; } .changeset-parents button { border: 0; background: transparent; color: var(--accent); cursor: pointer; font-family: monospace; } .changeset-parents button:hover { text-decoration: underline; } .changeset-parents button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } .changeset-files code { display: inline-flex; align-items: center; gap: 6px; overflow-wrap: anywhere; } .changeset-file-status { color: var(--text-secondary); font-size: 10px; text-transform: uppercase; } .changeset-file-status.status-added { color: var(--success); } .changeset-file-status.status-removed { color: var(--danger); } .changeset-diff { margin-top: 24px; } .changeset-diff h3 { margin-bottom: 10px; } .side-by-side-diff { margin-bottom: 18px; overflow-x: auto; border: 1px solid var(--border); border-radius: 6px; background: var(--bg-code); } .diff-file-header { padding: 9px 12px; border-bottom: 1px solid var(--border); background: var(--bg-subtle); font-family: monospace; font-weight: 600; } .diff-column-headings { display: grid; grid-template-columns: minmax(380px, 1fr) minmax(380px, 1fr); min-width: 760px; border-bottom: 1px solid var(--border); color: var(--text-secondary); font-size: 12px; font-weight: 600; text-transform: uppercase; } .diff-column-headings span { padding: 6px 12px; } .diff-column-headings span + span { border-left: 1px solid var(--border); } .diff-grid { display: grid; grid-template-columns: 52px minmax(328px, 1fr) 52px minmax(328px, 1fr); min-width: 760px; font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; font-size: 12px; line-height: 1.5; } .diff-side-number, .diff-side-code { min-height: 22px; border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent); } .diff-side-number { padding: 2px 8px; color: var(--text-secondary); text-align: right; user-select: none; border-right: 1px solid var(--border); } .diff-side-code { display: block; margin: 0; padding: 2px 10px; border-radius: 0; background: transparent; white-space: pre; } .diff-column-divider { border-left: 1px solid var(--border); } .diff-add { background: color-mix(in srgb, var(--success) 18%, transparent); } .diff-remove { background: color-mix(in srgb, var(--danger) 18%, transparent); } .diff-empty { background: color-mix(in srgb, var(--bg-subtle) 70%, transparent); } .diff-meta { color: var(--text-secondary); background: var(--bg-subtle); } .diff-range-row { grid-column: 1 / -1; padding: 4px 10px; color: var(--accent); background: var(--bg-subtle); border-bottom: 1px solid var(--border); white-space: pre; } /* =========================================== Common States =========================================== */ .empty-state { padding: 40px; text-align: center; color: var(--text-secondary); } .loading-state { padding: 40px; text-align: center; color: var(--text-secondary); } .error-message { padding: 15px; border: 1px solid var(--danger-border); background: var(--danger-bg); color: var(--danger); border-radius: 6px; margin-bottom: 20px; } /* =========================================== Repository Browser =========================================== */ .repo-container { font-family: "More Thin", sans-serif; max-width: 980px; margin: 40px auto; color: var(--text-primary); padding: 0 20px; } /* Clone Box */ .clone-box { background: var(--bg-subtle); border: 1px solid var(--border); border-radius: 6px; padding: 12px 16px; margin-bottom: 24px; display: flex; justify-content: space-between; align-items: center; } .clone-label { font-weight: 600; font-size: 13px; margin-right: 10px; color: var(--text-primary); } .clone-url { font-family: "More Thin", sans-serif; background: var(--bg); border: 1px solid var(--border); padding: 4px 8px; border-radius: 4px; font-size: 12px; color: var(--text-secondary); flex-grow: 1; } /* Breadcrumb */ .breadcrumb { display: flex; align-items: center; font-size: 14px; margin-bottom: 16px; color: var(--text-secondary); padding: 8px 0; } .breadcrumb a { color: var(--accent); text-decoration: none; border-radius: 4px; padding: 2px 6px; } .breadcrumb a:hover { background: var(--bg-subtle); text-decoration: underline; } .breadcrumb .separator { margin: 0 4px; color: var(--text-secondary); opacity: 0.5; } .breadcrumb .nav-item.active { font-weight: 600; color: var(--text-primary); padding: 2px 6px; } /* File List */ .file-list-container { border: 1px solid var(--border); border-radius: 6px; overflow: hidden; background: var(--bg); } .file-header { background: var(--bg-subtle); border-bottom: 1px solid var(--border); padding: 12px 16px; font-size: 13px; font-weight: 600; color: var(--text-secondary); } .file-row { display: flex; align-items: center; padding: 10px 16px; border-bottom: 1px solid var(--border); transition: background 0.1s; } .file-row:last-child { border-bottom: none; } .file-row:hover { background: var(--hover); } .file-row .icon img { width: 20px; height: 20px; vertical-align: middle; margin-right: 12px; } .file-row .name a { color: var(--text-primary); text-decoration: none; font-size: 14px; } .file-row .name a:hover { color: var(--accent); text-decoration: underline; } /* Readme */ .readme-section { margin-top: 32px; border: 1px solid var(--border); border-radius: 6px; } .readme-header { background: var(--bg-subtle); padding: 10px 16px; font-size: 12px; font-weight: 600; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 8px; } .readme-content { padding: 32px; background: var(--bg); overflow-x: auto; color: var(--text-primary); } /* File Viewer Modal */ .file-viewer-overlay { position: fixed; inset: 0; background: var(--overlay); display: flex; justify-content: center; align-items: center; z-index: 1000; padding: 20px; } .file-viewer { background: var(--bg); border: 1px solid var(--border); border-radius: 6px; width: 100%; max-width: 900px; max-height: 90vh; display: flex; flex-direction: column; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); } .file-viewer-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; background: var(--bg-subtle); border-bottom: 1px solid var(--border); border-radius: 6px 6px 0 0; } .file-viewer-title { font-weight: 600; font-size: 14px; color: var(--text-primary); display: flex; align-items: center; gap: 8px; } .file-viewer-close { background: transparent; border: none; cursor: pointer; padding: 4px; border-radius: 4px; display: flex; align-items: center; justify-content: center; } .file-viewer-close:hover { background: var(--hover); } .file-viewer-close img { width: 16px; height: 16px; opacity: 0.7; } .file-viewer-actions { display: flex; align-items: center; gap: 12px; } .file-viewer-actions a { font-size: 13px; } .file-viewer-content { overflow: auto; flex: 1; } .static-file-viewer { max-width: 1100px; } .static-file-preview { min-height: 240px; padding: 20px; display: flex; align-items: center; justify-content: center; background: var(--bg-subtle); } .static-file-image, .static-file-video { display: block; max-width: 100%; max-height: 75vh; object-fit: contain; } .static-file-audio { width: min(100%, 640px); } .static-file-pdf { width: 100%; height: 75vh; border: 0; background: #fff; } .file-viewer-content pre { margin: 0; padding: 16px; background: var(--bg-code); font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; } .file-viewer-content code { background: transparent; padding: 0; } .file-viewer-loading { padding: 40px; text-align: center; color: var(--text-secondary); } .file-viewer-line-numbers { display: inline-block; user-select: none; text-align: right; padding-right: 16px; margin-right: 16px; border-right: 1px solid var(--border); color: var(--text-secondary); opacity: 0.5; } /* Theme Toggle Button */ .theme-toggle { margin-left: auto; background: var(--bg-subtle); border: 1px solid var(--border); border-radius: 6px; padding: 8px 12px; cursor: pointer; display: flex; align-items: center; gap: 6px; color: var(--text-secondary); font-size: 13px; transition: all 0.2s; } .theme-toggle:hover { background: var(--hover); color: var(--text-primary); } .theme-toggle svg { flex-shrink: 0; } /* Description */ .description { color: var(--text-secondary); margin: 0; font-size: 14px; } /* =========================================== Mobile Responsive =========================================== */ @media (max-width: 768px) { .app-container { padding: 20px 15px; } .repo-container { padding: 0 15px; } .file-row { padding: 8px 12px; } .clone-box { padding: 10px 12px; flex-direction: column; align-items: flex-start; gap: 8px; } } /* =========================================== Footer =========================================== */ .footer { margin-top: 48px; padding-top: 24px; border-top: 1px solid var(--border); } .footer-content { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 16px 0; color: var(--text-secondary); font-size: 13px; } .footer-separator { opacity: 0.5; } .footer-text { color: var(--text-secondary); } .clone-box-inner { display: flex; align-items: center; width: 100%; } /* Header content wrapper */ .header-content { flex: 1; } .header-content h1 { margin: 0; font-size: 24px; font-weight: 600; color: var(--text-primary); } .header-content h1 a { color: inherit; text-decoration: none; } .header-content h1 a:hover { text-decoration: none; }