:root { color-scheme: light; --app-bg: #f4f6f2; --surface: #ffffff; --ink: #202528; --muted: #697278; --line: #d8ddd6; --shadow: 0 18px 48px rgba(26, 31, 34, 0.16); --accent-main: #9f2842; --yellow: #f2c94c; --teal: #22a39f; --rose: #e15c75; --blue: #5b66f1; --violet: #8a63c7; --green: #75dd6b; --code-bg: #20262a; --pdf-target-width: calc(595px * var(--zoom, 1.66)); --annotation-gutter: clamp(390px, 27vw, 560px); --reader-header-height: 64px; } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; } body { background: var(--app-bg); color: var(--ink); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } body.is-mobile-overlay-locked { overflow: hidden; overscroll-behavior: none; } button, textarea { font: inherit; } button { color: inherit; } .app-shell { min-height: 100vh; } .reader-header { position: sticky; top: 0; z-index: 20; display: grid; grid-template-columns: minmax(240px, 1fr) auto minmax(420px, 1fr); align-items: center; gap: 18px; min-height: var(--reader-header-height); padding: 0 24px; border-bottom: 1px solid var(--line); background: rgba(255, 255, 255, 0.94); backdrop-filter: blur(14px); } .reader-title { justify-self: start; display: flex; align-items: center; gap: 10px; min-width: 0; overflow: hidden; } .reader-title strong { flex: 0 0 auto; color: var(--accent-main); font-size: 1rem; font-weight: 850; letter-spacing: 0; } .reader-center-controls, .reader-controls, .zoom-controls { display: flex; align-items: center; gap: 10px; } .reader-center-controls { justify-self: center; min-height: 40px; padding: 0 10px; border: 1px solid rgba(32, 37, 40, 0.1); border-radius: 10px; background: rgba(249, 250, 247, 0.78); } .reader-controls { justify-self: end; } .guide-info-button { display: inline-grid; flex: 0 0 auto; width: 36px; height: 36px; place-items: center; border: 1px solid rgba(159, 40, 66, 0.24); border-radius: 9px; background: #fff8f9; color: var(--accent-main); cursor: pointer; font-size: 1.05rem; font-family: Georgia, "Times New Roman", serif; font-style: italic; font-weight: 900; line-height: 1; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.76); } .guide-info-button:hover { border-color: rgba(159, 40, 66, 0.42); background: rgba(159, 40, 66, 0.08); } .guide-info-button:focus-visible { border-color: rgba(159, 40, 66, 0.42); outline: 2px solid rgba(159, 40, 66, 0.16); outline-offset: 2px; } .page-jump { display: inline-flex; align-items: center; gap: 6px; color: #303638; font-size: 0.92rem; font-weight: 780; white-space: nowrap; } .page-input { width: 44px; height: 30px; border: 1px solid rgba(32, 37, 40, 0.16); border-radius: 7px; background: #ffffff; color: var(--ink); font: inherit; font-weight: 820; text-align: center; } .page-input:focus { border-color: rgba(159, 40, 66, 0.48); outline: 2px solid rgba(159, 40, 66, 0.16); outline-offset: 1px; } .toolbar-divider { width: 1px; height: 24px; background: rgba(32, 37, 40, 0.12); } .checkbox-control { display: inline-flex; align-items: center; gap: 8px; min-height: 34px; color: var(--muted); font-size: 0.9rem; font-weight: 720; white-space: nowrap; } .checkbox-control input { width: 17px; height: 17px; accent-color: var(--accent-main); } .secondary-button, .tool-button, .icon-button, .close-all-button { display: inline-grid; place-items: center; border: 1px solid rgba(32, 37, 40, 0.14); border-radius: 8px; background: #ffffff; cursor: pointer; line-height: 1; } .secondary-button { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 36px; padding: 0 14px; color: #303638; font-size: 0.9rem; font-weight: 780; white-space: nowrap; } .button-icon { flex: 0 0 auto; width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2.1; stroke-linecap: round; stroke-linejoin: round; } .tool-button, .icon-button { width: 36px; height: 36px; } .secondary-button:hover, .tool-button:hover, .icon-button:hover { border-color: rgba(159, 40, 66, 0.28); background: rgba(159, 40, 66, 0.07); color: var(--accent-main); } .close-all-button { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 0 7px 0 11px; border-color: rgba(159, 40, 66, 0.34); background: #fff6f7; color: #852139; font-size: 0.9rem; font-weight: 820; white-space: nowrap; } .close-all-button:hover { border-color: rgba(32, 37, 40, 0.58); background: var(--accent-main); color: #ffffff; } .close-all-button:disabled { border-color: rgba(32, 37, 40, 0.12); background: rgba(255, 255, 255, 0.64); color: rgba(105, 114, 120, 0.78); cursor: default; } .close-all-mark { display: inline-grid; place-items: center; width: 22px; height: 22px; border: 1px solid rgba(32, 37, 40, 0.7); border-radius: 5px; background: #c72f34; color: #ffffff; font-size: 1rem; font-weight: 900; line-height: 1; } .close-all-button:disabled .close-all-mark { border-color: rgba(32, 37, 40, 0.18); background: rgba(159, 40, 66, 0.18); color: rgba(255, 255, 255, 0.82); } .tool-readout, .open-count { color: #303638; font-size: 0.92rem; font-weight: 760; } .tool-readout { min-width: 62px; text-align: center; } .open-count { min-width: 60px; color: var(--muted); text-align: right; } .pdf-pane { min-height: calc(100vh - var(--reader-header-height)); overflow-x: hidden; overflow-y: auto; background: linear-gradient(90deg, rgba(32, 37, 40, 0.045) 1px, transparent 1px) 0 0 / 32px 32px, #f2f4ef; } .viewer-stage { position: relative; min-height: calc(100vh - var(--reader-header-height)); padding: 34px clamp(12px, 1vw, 22px) 90px; } .pages { display: grid; justify-items: start; gap: 28px; width: min(var(--pdf-target-width), calc(100vw - var(--annotation-gutter))); } .pdf-page { position: relative; width: 100%; min-width: min(100%, 440px); aspect-ratio: 595.276 / 841.89; background: #ffffff; box-shadow: 0 18px 42px rgba(26, 31, 34, 0.14); user-select: none; } .pdf-page img { display: block; width: 100%; height: 100%; object-fit: contain; pointer-events: none; } .text-layer, .highlight-layer { position: absolute; inset: 0; } .text-layer { z-index: 1; overflow: hidden; color: transparent; -webkit-text-fill-color: transparent; pointer-events: none; user-select: text; } .pdf-text-line { position: absolute; display: block; overflow: visible; color: transparent; -webkit-text-fill-color: transparent; font-family: "Palatino", "Palatino Linotype", "Book Antiqua", "URW Palladio L", "P052", serif; font-weight: 400; line-height: 1; white-space: pre; pointer-events: none; user-select: text; } .pdf-text-word { display: inline; overflow: visible; color: transparent; -webkit-text-fill-color: transparent; font-family: "Palatino", "Palatino Linotype", "Book Antiqua", "URW Palladio L", "P052", serif; font-style: normal; font-weight: 400; line-height: 1; white-space: pre; pointer-events: none; user-select: text; } .pdf-text-word[data-font="serif-bold"] { font-weight: 700; } .pdf-text-word[data-font="serif-italic"] { font-style: italic; } .pdf-text-word[data-font="serif-bold-italic"] { font-style: italic; font-weight: 700; } .pdf-text-word[data-font="sans"], .pdf-text-word[data-font="sans-bold"], .pdf-text-word[data-font="sans-italic"] { font-family: "DejaVu Sans", Arial, Helvetica, sans-serif; } .pdf-text-word[data-font="sans-bold"] { font-weight: 700; } .pdf-text-word[data-font="sans-italic"] { font-style: italic; } .pdf-text-word[data-font="mono"], .pdf-text-word[data-font="mono-bold"] { font-family: "Latin Modern Mono", "LM Mono", Consolas, "Courier New", monospace; } .pdf-text-word[data-font="mono-bold"] { font-weight: 700; } .pdf-text-word[data-font="math"] { font-style: italic; } .pdf-text-line::selection, .pdf-text-word::selection { background: rgba(159, 40, 66, 0.18); color: transparent; -webkit-text-fill-color: transparent; } .highlight-layer { z-index: 2; } .pdf-highlight { position: absolute; border: 1px solid color-mix(in srgb, var(--accent) 78%, #000); border-radius: 3px; background: color-mix(in srgb, var(--accent) 32%, transparent); cursor: pointer; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.3) inset; } .pdf-highlight:hover:not(.is-hover-suppressed), .pdf-highlight:focus-visible:not(.is-hover-suppressed), .pdf-highlight.is-hovered, .pdf-highlight.is-active { border-color: color-mix(in srgb, var(--accent) 92%, #000); outline: none; background: color-mix(in srgb, var(--accent) 45%, transparent); box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--accent) 88%, #000); } .connector-layer, .floating-layer { position: absolute; inset: 0; pointer-events: none; } .connector-layer { z-index: 8; width: 100%; height: 100%; overflow: visible; } .connector-layer path { fill: none; stroke-width: 2; stroke-linecap: round; stroke-dasharray: 4 6; } .floating-layer { z-index: 9; } .floating-layer.is-arranging .annotation-card { transition: transform 160ms ease-out; } .floating-layer.is-arranging .annotation-card.is-entering { transition: none; } .annotation-card { position: absolute; width: min(360px, calc(100vw - 40px)); max-height: min(620px, calc(100vh - 128px)); overflow: auto; border: 1px solid color-mix(in srgb, var(--card-accent, var(--teal)) 32%, rgba(32, 37, 40, 0.16)); border-top: 5px solid var(--card-accent, var(--teal)); border-bottom: 2px solid color-mix(in srgb, var(--card-accent, var(--teal)) 34%, rgba(32, 37, 40, 0.08)); border-radius: 8px; background: linear-gradient(180deg, color-mix(in srgb, var(--card-accent, var(--teal)) 4%, #ffffff), #ffffff 150px), #ffffff; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.74), inset 4px 0 0 color-mix(in srgb, var(--card-accent, var(--teal)) 16%, transparent), 0 18px 46px rgba(26, 31, 34, 0.14); pointer-events: auto; scrollbar-gutter: stable; } .annotation-card.is-selected { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.74), inset 4px 0 0 color-mix(in srgb, var(--card-accent, var(--teal)) 20%, transparent), 0 0 0 2px color-mix(in srgb, var(--card-accent, var(--teal)) 34%, transparent), 0 22px 52px rgba(26, 31, 34, 0.17); } .annotation-card-header { position: sticky; top: 0; z-index: 5; display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding: 17px 18px 14px 20px; border-bottom: 1px solid color-mix(in srgb, var(--card-accent, var(--teal)) 18%, rgba(32, 37, 40, 0.1)); background: linear-gradient(90deg, color-mix(in srgb, var(--card-accent, var(--teal)) 7%, transparent), transparent 64%), #ffffff; backdrop-filter: blur(10px); } .annotation-card-header > div:first-child { min-width: 0; } .annotation-type, .eyebrow { margin: 0; color: var(--muted); font-size: 0.76rem; font-weight: 820; letter-spacing: 0.08em; text-transform: uppercase; } .annotation-card h2 { margin: 4px 0 0; font-size: 1.06rem; line-height: 1.22; letter-spacing: 0; } .card-close, .icon-button { flex: 0 0 auto; } .annotation-card-actions { display: flex; flex: 0 0 auto; align-items: center; gap: 8px; } .annotation-nav-button { display: inline-grid; place-items: center; width: 34px; height: 34px; border: 1px solid color-mix(in srgb, var(--card-accent, var(--teal)) 34%, rgba(32, 37, 40, 0.14)); border-radius: 8px; background: color-mix(in srgb, var(--card-accent, var(--teal)) 8%, #ffffff); color: color-mix(in srgb, var(--card-accent, var(--teal)) 70%, #202528); cursor: pointer; } .annotation-nav-button svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; } .annotation-nav-button:hover, .annotation-nav-button:focus-visible { border-color: color-mix(in srgb, var(--card-accent, var(--teal)) 62%, rgba(32, 37, 40, 0.18)); background: color-mix(in srgb, var(--card-accent, var(--teal)) 16%, #ffffff); color: color-mix(in srgb, var(--card-accent, var(--teal)) 82%, #121617); } .annotation-nav-button:disabled { border-color: rgba(32, 37, 40, 0.1); background: rgba(32, 37, 40, 0.04); color: rgba(32, 37, 40, 0.28); cursor: default; } @media (prefers-reduced-motion: reduce) { .floating-layer.is-arranging .annotation-card { transition: none; } } .card-close { width: 38px; height: 38px; border-color: rgba(32, 37, 40, 0.82); background: #c72f34; color: #ffffff; font-size: 1.25rem; font-weight: 900; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.38) inset; } .card-close:hover, .card-close:focus-visible { border-color: #141718; background: #a9141f; color: #ffffff; } .annotation-body { position: relative; z-index: 0; padding: 17px 18px 18px 20px; color: #273034; } .annotation-body p, .annotation-body li { font-size: 0.94rem; line-height: 1.55; } .annotation-body p { margin: 0 0 13px; } .annotation-body blockquote { position: relative; isolation: isolate; margin: 17px 0 18px; padding: 15px 18px 15px 24px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--card-accent, var(--teal)) 24%, rgba(32, 37, 40, 0.13)); border-radius: 8px; background: linear-gradient(90deg, color-mix(in srgb, var(--card-accent, var(--teal)) 12%, transparent), transparent 76%), color-mix(in srgb, var(--card-accent, var(--teal)) 5%, #ffffff); box-shadow: inset 5px 0 0 var(--card-accent, var(--teal)), inset 0 1px 0 rgba(255, 255, 255, 0.72); } .annotation-body blockquote::before { content: "“"; position: absolute; top: -18px; right: 14px; color: color-mix(in srgb, var(--card-accent, var(--teal)) 18%, transparent); font-family: Georgia, "Times New Roman", serif; font-size: 5.2rem; font-weight: 700; line-height: 1; pointer-events: none; } .annotation-body blockquote p, .annotation-body blockquote li { position: relative; z-index: 1; font-size: 0.93rem; line-height: 1.55; } .annotation-body blockquote p { margin: 0 0 11px; } .annotation-body blockquote p:last-child { margin-bottom: 0; } .annotation-body ul { margin: 8px 0 14px; padding-left: 20px; } .annotation-body strong { font-weight: 830; } .annotation-body a { color: #0f756f; font-weight: 760; text-decoration-thickness: 2px; text-underline-offset: 0.16em; } .annotation-body mark { padding: 0.08em 0.22em; border-radius: 4px; background: #fff0a6; } .annotation-body .callout { margin: 14px 0; padding: 12px 13px; border-left: 4px solid var(--card-accent, var(--teal)); border-radius: 0 8px 8px 0; background: color-mix(in srgb, var(--card-accent, var(--teal)) 12%, #ffffff); } .annotation-body pre { position: relative; margin: 14px 0; padding: 14px; overflow: auto; border-radius: 8px; background: var(--code-bg); color: #f3f7f7; font-size: 0.82rem; line-height: 1.5; white-space: pre; tab-size: 4; } .annotation-body code { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; } .annotation-body pre.is-highlighted-code { background: linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent 44px), #1f262a; } .annotation-body pre.is-highlighted-code code { color: #e8edf0; text-shadow: none; } .annotation-body .token.comment, .annotation-body .token.prolog, .annotation-body .token.doctype, .annotation-body .token.cdata { color: #84919a; font-style: italic; } .annotation-body .token.keyword { color: #ff8f9c; font-weight: 760; } .annotation-body .token.function, .annotation-body .token.class-name { color: #7fd7ff; } .annotation-body .token.builtin { color: #c5a7ff; } .annotation-body .token.decorator, .annotation-body .token.property, .annotation-body .token.attr-name, .annotation-body .token.variable { color: #ffd37a; } .annotation-body .token.string, .annotation-body .token.char { color: #9ee493; } .annotation-body .token.number, .annotation-body .token.boolean, .annotation-body .token.constant { color: #f7c873; } .annotation-body .token.operator, .annotation-body .token.punctuation { color: #aeb8bd; } .annotation-body :not(pre) > code { padding: 0.12em 0.35em; border-radius: 4px; background: rgba(32, 37, 40, 0.08); } .annotation-body .table-scroll { width: 100%; max-width: 100%; margin: 14px 0; overflow-x: auto; border: 1px solid rgba(32, 37, 40, 0.13); border-radius: 8px; background: #ffffff; } .annotation-body table { width: 100%; min-width: 650px; border-collapse: separate; border-spacing: 0; background: #ffffff; } .annotation-body th, .annotation-body td { padding: 9px 10px; border-right: 1px solid rgba(32, 37, 40, 0.1); border-bottom: 1px solid rgba(32, 37, 40, 0.1); color: #273034; font-size: 0.78rem; line-height: 1.35; text-align: left; vertical-align: top; } .annotation-body th { background: color-mix(in srgb, var(--card-accent, var(--teal)) 8%, #ffffff); color: #202528; font-weight: 800; } .annotation-body th:last-child, .annotation-body td:last-child { border-right: 0; } .annotation-body tbody tr:nth-child(even) td { background: rgba(32, 37, 40, 0.025); } .annotation-body tr:last-child td { border-bottom: 0; } .annotation-body .math-inline { display: inline-block; pointer-events: none; user-select: none; vertical-align: -0.16em; } .annotation-body .math-inline.is-wide { display: block; max-width: 100%; margin: 10px 0; overflow-x: auto; overflow-y: hidden; vertical-align: middle; } .annotation-body .math-display { display: block; max-width: 100%; margin: 13px 0; overflow-x: auto; overflow-y: hidden; pointer-events: none; user-select: none; } .annotation-body .katex { color: currentColor; font-size: 1em; } .annotation-body .katex * { user-select: none; } .annotation-body .math-inline.is-wide .katex-display, .annotation-body .math-display .katex-display { margin: 0; width: max-content; } .annotation-body figure { margin: 16px 0 4px; } .annotation-body .annotation-media-pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr)); align-items: center; gap: 16px; margin: 16px 0; } .annotation-body .annotation-media-pair p, .annotation-body .annotation-media-pair figure { margin: 0; } .annotation-body .annotation-media-pair img { max-height: min(360px, 44vh); } .annotation-body img { display: block; width: auto; max-width: 100%; max-height: min(460px, 56vh); margin-right: auto; margin-left: auto; border: 1px solid rgba(32, 37, 40, 0.12); border-radius: 6px; background: #f9faf7; object-fit: contain; } .annotation-body img.is-zoomable { cursor: zoom-in; transition: border-color 140ms ease, box-shadow 140ms ease, transform 140ms ease; } .annotation-body img.is-zoomable:hover { border-color: color-mix(in srgb, var(--card-accent, var(--teal)) 44%, rgba(32, 37, 40, 0.12)); box-shadow: 0 10px 28px rgba(32, 37, 40, 0.12); } .annotation-body img.is-zoomable:focus-visible { outline: 3px solid color-mix(in srgb, var(--card-accent, var(--teal)) 44%, transparent); outline-offset: 4px; } .annotation-body img[src$="002-modeling-capability-residual-stream.png"] { max-height: min(320px, 39vh); } .annotation-body img[src$="003-future-hardware-efficiency-nvidia-compute-specs.png"], .annotation-body img[src$="003-future-hardware-efficiency-blackwell-specs.png"] { max-height: min(360px, 44vh); } .annotation-body img[src$="036-fp4-scale-absorption-fp8-scaling.png"] { max-height: min(330px, 40vh); } .annotation-body figcaption { margin-top: 7px; color: var(--muted); font-size: 0.78rem; line-height: 1.35; } .notes-drawer { position: fixed; top: var(--notes-drawer-top, calc(var(--reader-header-height) + 8px)); right: auto; left: var(--notes-drawer-left, auto); z-index: 30; flex-direction: column; width: min(640px, calc(100vw - 36px)); max-height: calc(100vh - var(--reader-header-height) - 26px); overflow: visible; padding: 0; border: 1px solid rgba(32, 37, 40, 0.13); border-radius: 8px; background: rgba(255, 255, 255, 0.97); box-shadow: var(--shadow); display: none; opacity: 0; pointer-events: none; transform: translateY(-6px); transform-origin: var(--notes-drawer-origin, 50% 0); transition: opacity 120ms ease, transform 120ms ease; visibility: hidden; overscroll-behavior: contain; } .notes-drawer::before, .notes-drawer::after { content: ""; position: absolute; left: var(--notes-drawer-caret-x, 50%); pointer-events: none; } .notes-drawer::before { top: -9px; margin-left: -10px; border-right: 10px solid transparent; border-bottom: 10px solid rgba(32, 37, 40, 0.13); border-left: 10px solid transparent; } .notes-drawer::after { top: -8px; margin-left: -9px; border-right: 9px solid transparent; border-bottom: 9px solid rgba(255, 255, 255, 0.97); border-left: 9px solid transparent; } .notes-drawer.is-open { display: flex; opacity: 1; pointer-events: auto; transform: translateY(0); visibility: visible; } .guide-disclosure { position: fixed; top: var(--guide-disclosure-top, calc(var(--reader-header-height) + 8px)); left: var(--guide-disclosure-left, 18px); z-index: 35; display: none; flex-direction: column; width: min(620px, calc(100vw - 36px)); max-height: calc(100vh - var(--reader-header-height) - 26px); overflow: visible; padding: 0; border: 1px solid rgba(32, 37, 40, 0.13); border-radius: 8px; background: rgba(255, 255, 255, 0.98); box-shadow: var(--shadow); opacity: 0; pointer-events: none; transform: translateY(-6px); transform-origin: var(--guide-disclosure-origin, 50% 0); transition: opacity 120ms ease, transform 120ms ease; visibility: hidden; overscroll-behavior: contain; } .guide-disclosure::before, .guide-disclosure::after { content: ""; position: absolute; left: var(--guide-disclosure-caret-x, 24px); pointer-events: none; } .guide-disclosure::before { top: -9px; margin-left: -10px; border-right: 10px solid transparent; border-bottom: 10px solid rgba(32, 37, 40, 0.13); border-left: 10px solid transparent; } .guide-disclosure::after { top: -8px; margin-left: -9px; border-right: 9px solid transparent; border-bottom: 9px solid rgba(255, 255, 255, 0.98); border-left: 9px solid transparent; } .guide-disclosure.is-open { display: flex; opacity: 1; pointer-events: auto; transform: translateY(0); visibility: visible; } .guide-disclosure-header { display: flex; justify-content: space-between; gap: 18px; padding: 20px 20px 16px; border-bottom: 1px solid rgba(32, 37, 40, 0.1); background: linear-gradient(90deg, rgba(159, 40, 66, 0.07), transparent 58%), linear-gradient(180deg, rgba(249, 250, 247, 0.94), rgba(255, 255, 255, 0.96)); } .guide-disclosure-header h1 { margin: 4px 0 0; font-size: 1.32rem; line-height: 1.14; letter-spacing: 0; } .guide-disclosure-body { display: grid; gap: 16px; min-height: 0; overflow: auto; padding: 18px 20px 20px; } .disclosure-section { display: grid; gap: 9px; } .disclosure-section h2 { margin: 0; color: #2a3034; font-size: 0.98rem; font-weight: 840; letter-spacing: 0; } .disclosure-section p { margin: 0; color: #30383d; font-size: 0.94rem; line-height: 1.55; } .disclosure-section a { color: #0c7b72; font-weight: 780; text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 3px; } .social-links { display: grid; grid-template-columns: repeat(3, minmax(142px, 178px)); gap: 10px; align-items: center; justify-content: space-between; width: 100%; } .social-link { display: inline-flex; align-items: center; justify-content: center; gap: 7px; width: 100%; min-width: 0; min-height: 36px; padding: 7px 10px; border: 1px solid rgba(32, 37, 40, 0.12); border-radius: 8px; background: rgba(249, 250, 247, 0.86); color: #303638; font-size: 0.9rem; font-weight: 780; text-decoration: none; transition: border-color 130ms ease, background 130ms ease, transform 130ms ease; } .social-link span:last-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .social-link:hover, .social-link:focus-visible { border-color: rgba(159, 40, 66, 0.26); background: rgba(159, 40, 66, 0.07); color: var(--accent-main); } .social-link:focus-visible { outline: 2px solid rgba(159, 40, 66, 0.16); outline-offset: 2px; } .social-mark, .social-link img { flex: 0 0 auto; width: 26px; height: 26px; border-radius: 7px; } .social-mark { display: inline-grid; place-items: center; background: #15191c; color: #ffffff; font-size: 0.78rem; font-weight: 880; letter-spacing: 0; } .social-mark-linkedin { background: #0a66c2; font-family: Arial, Helvetica, sans-serif; font-size: 0.74rem; } .social-link img { object-fit: cover; border: 1px solid rgba(32, 37, 40, 0.12); } .project-status { position: relative; padding: 13px 15px 13px 18px; border: 1px solid rgba(32, 37, 40, 0.1); border-radius: 8px; background: linear-gradient(90deg, rgba(34, 163, 159, 0.1), transparent 58%), rgba(249, 250, 247, 0.88); box-shadow: inset 4px 0 0 var(--teal); } .drawer-header { display: flex; justify-content: space-between; gap: 18px; padding: 20px 20px 16px; border-bottom: 1px solid rgba(32, 37, 40, 0.1); background: linear-gradient(180deg, rgba(249, 250, 247, 0.92), rgba(255, 255, 255, 0.94)); } .drawer-header h1 { margin: 4px 0 0; font-size: 1.35rem; line-height: 1.15; letter-spacing: 0; } .note-search { display: grid; gap: 8px; padding: 14px 14px 12px; border-bottom: 1px solid rgba(32, 37, 40, 0.09); background: linear-gradient(180deg, rgba(255, 255, 255, 0.94), rgba(249, 250, 247, 0.82)); } .note-search-field { display: grid; grid-template-columns: 20px minmax(0, 1fr) 30px; align-items: center; gap: 8px; min-height: 42px; padding: 0 8px 0 12px; border: 1px solid rgba(32, 37, 40, 0.14); border-radius: 8px; background: #ffffff; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.74) inset, 0 8px 18px rgba(26, 31, 34, 0.04); transition: border-color 130ms ease, box-shadow 130ms ease; } .note-search-field:focus-within { border-color: rgba(164, 33, 61, 0.42); box-shadow: 0 0 0 3px rgba(164, 33, 61, 0.09), 0 1px 0 rgba(255, 255, 255, 0.74) inset; } .note-search-icon { width: 19px; height: 19px; fill: none; stroke: var(--muted); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .note-search input { width: 100%; min-width: 0; border: 0; outline: 0; background: transparent; color: var(--ink); font: inherit; font-size: 0.92rem; font-weight: 720; } .note-search input::placeholder { color: color-mix(in srgb, var(--muted) 74%, #ffffff); } .note-search input::-webkit-search-cancel-button { appearance: none; -webkit-appearance: none; } .note-search-clear { display: inline-grid; place-items: center; width: 28px; height: 28px; border: 1px solid rgba(32, 37, 40, 0.12); border-radius: 7px; background: rgba(249, 250, 247, 0.96); color: var(--muted); cursor: pointer; font-size: 1.05rem; font-weight: 820; line-height: 1; } .note-search-clear:hover { border-color: rgba(164, 33, 61, 0.28); color: var(--accent-strong); } .note-search-clear[hidden] { display: none; } .note-search-summary { min-height: 16px; margin: 0; color: var(--muted); font-size: 0.76rem; font-weight: 760; } .note-list { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; padding: 14px; -webkit-overflow-scrolling: touch; } .note-chip { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%; min-width: 0; min-height: 68px; padding: 12px 13px 12px 18px; border: 1px solid rgba(32, 37, 40, 0.12); border-radius: 8px; overflow: hidden; background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 7%, transparent), transparent 42%), #ffffff; cursor: pointer; text-align: left; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.7) inset; transition: border-color 120ms ease, box-shadow 120ms ease, transform 120ms ease; } .note-chip::before { content: ""; position: absolute; top: -1px; bottom: -1px; left: -1px; width: 6px; border-radius: 8px 0 0 8px; background: var(--accent); } .note-chip:hover { border-color: color-mix(in srgb, var(--accent) 48%, rgba(32, 37, 40, 0.18)); box-shadow: 0 12px 28px rgba(26, 31, 34, 0.09); transform: translateY(-1px); } .note-chip-main { flex: 1 1 auto; min-width: 0; overflow: hidden; } .note-chip-title-row { display: flex; align-items: center; gap: 10px; min-width: 0; } .note-chip strong { flex: 1 1 auto; display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.98rem; line-height: 1.2; } .note-chip-match-count { flex: 0 0 auto; display: inline-flex; align-items: center; min-height: 22px; padding: 0 8px; border: 1px solid rgba(32, 37, 40, 0.1); border-radius: 999px; background: color-mix(in srgb, var(--accent) 10%, #ffffff); color: color-mix(in srgb, var(--accent) 74%, #202528); font-size: 0.7rem; font-weight: 830; letter-spacing: 0; white-space: nowrap; } .note-chip-open-state { flex: 0 0 auto; display: inline-flex; align-items: center; min-height: 22px; padding: 0 8px; border: 1px solid color-mix(in srgb, var(--accent) 45%, rgba(32, 37, 40, 0.12)); border-radius: 999px; background: color-mix(in srgb, var(--accent) 14%, #ffffff); color: color-mix(in srgb, var(--accent) 76%, #202528); font-size: 0.72rem; font-weight: 860; letter-spacing: 0; } .note-chip-meta { display: flex; align-items: center; gap: 6px; margin-top: 5px; } .note-chip-meta span { color: var(--muted); font-size: 0.78rem; font-weight: 750; } .note-chip-meta span + span::before { content: ""; display: inline-block; width: 4px; height: 4px; margin: 0 6px 1px 0; border-radius: 999px; background: color-mix(in srgb, var(--accent) 62%, var(--muted)); } .note-chip-snippet { display: -webkit-box; margin-top: 10px; max-height: calc(2 * 1.42em + 2px); overflow: hidden; color: color-mix(in srgb, var(--ink) 82%, var(--muted)); font-size: 0.86rem; font-weight: 610; line-height: 1.42; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .note-chip-snippet mark { padding: 0 2px; border-radius: 4px; background: color-mix(in srgb, var(--accent) 28%, #fff4a8); color: color-mix(in srgb, var(--accent) 62%, #202528); font-weight: 860; } .note-chip.is-search-result { min-height: 116px; padding-top: 14px; padding-bottom: 15px; align-items: flex-start; } .note-list.is-searching { gap: 10px; } .note-search-empty { display: grid; gap: 5px; min-height: 116px; place-content: center; padding: 18px; border: 1px dashed rgba(32, 37, 40, 0.18); border-radius: 8px; background: rgba(249, 250, 247, 0.72); text-align: center; } .note-search-empty strong { color: var(--ink); font-size: 0.98rem; } .note-search-empty span { color: var(--muted); font-size: 0.82rem; font-weight: 650; } .note-chip.is-open { border-color: color-mix(in srgb, var(--accent) 54%, rgba(32, 37, 40, 0.14)); background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 12%, transparent), transparent 50%), #ffffff; } .note-chip.is-active { border-color: color-mix(in srgb, var(--accent) 62%, #000); background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 13%, transparent), transparent 48%), #ffffff; box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--accent) 54%, transparent), 0 1px 0 rgba(255, 255, 255, 0.7) inset; } body.is-lightbox-open { overflow: hidden; } .image-lightbox { position: fixed; inset: 0; z-index: 5000; display: grid; place-items: center; padding: 24px; background: rgba(18, 23, 26, 0.72); opacity: 0; backdrop-filter: blur(8px); transition: opacity 140ms ease; } .image-lightbox[hidden] { display: none; } .image-lightbox.is-open { opacity: 1; } .image-lightbox-panel { position: relative; display: grid; gap: 12px; justify-items: end; max-width: min(1280px, calc(100vw - 48px)); max-height: calc(100dvh - 48px); } .image-lightbox-figure { display: grid; gap: 10px; margin: 0; min-height: 0; } .image-lightbox-figure img { display: block; width: auto; height: auto; max-width: min(1280px, calc(100vw - 48px)); max-height: calc(100dvh - 156px); object-fit: contain; border: 1px solid rgba(255, 255, 255, 0.58); border-radius: 8px; background: #ffffff; box-shadow: 0 26px 80px rgba(0, 0, 0, 0.34); } .image-lightbox-figure figcaption { max-width: min(960px, calc(100vw - 72px)); justify-self: center; color: rgba(255, 255, 255, 0.9); font-size: 0.86rem; font-weight: 650; line-height: 1.35; text-align: center; } .image-lightbox-close { position: static; display: grid; width: 48px; height: 48px; place-items: center; border: 2px solid #2e2325; border-radius: 8px; background: #cf2f38; color: #ffffff; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.24); cursor: pointer; font-size: 2rem; font-weight: 900; line-height: 1; } .image-lightbox-close:hover, .image-lightbox-close:focus-visible { background: #b92731; outline: 3px solid rgba(255, 255, 255, 0.72); outline-offset: 3px; } @media (max-width: 980px) { .reader-header { grid-template-columns: 1fr; align-items: center; gap: 10px; padding: 12px 16px; } .reader-title, .reader-center-controls, .reader-controls { width: 100%; } .reader-center-controls { justify-content: center; } .reader-controls { gap: 6px; justify-content: space-between; } .viewer-stage { padding: 20px 10px 70px; } .pages { justify-items: center; } .pdf-page { width: min(calc(100vw - 20px), var(--pdf-target-width)); min-width: 0; } .annotation-card { max-height: 460px; } .notes-drawer { right: auto; width: calc(100vw - 24px); max-height: calc(100vh - var(--notes-drawer-top, 142px) - 12px); } } @media (max-width: 640px) { html, body { overflow-x: hidden; } .reader-header { position: fixed; top: 0; right: 0; left: 0; display: grid; grid-template-columns: 44px minmax(0, 1fr) minmax(0, 1fr); align-items: center; gap: 10px; min-height: var(--reader-header-height); padding: 8px 10px; transition: transform 340ms cubic-bezier(0.4, 0, 0.2, 1), opacity 300ms ease; } .reader-title { display: flex; justify-self: stretch; width: 44px; min-width: 44px; overflow: visible; } .reader-title strong { display: none; } .guide-info-button { width: 44px; height: 44px; border-radius: 10px; font-size: 1.14rem; } .reader-center-controls, .reader-controls { width: 100%; max-width: none; } .reader-center-controls .toolbar-divider, .reader-center-controls .zoom-controls, .reader-controls .checkbox-control, .reader-controls .open-count, .reader-controls .close-all-button { display: none; } .reader-center-controls { justify-self: stretch; justify-content: center; min-width: 0; min-height: 44px; padding: 0 8px; } .page-jump { justify-content: center; width: 100%; gap: 5px; } .page-input { width: 38px; } .reader-controls { justify-self: stretch; justify-content: stretch; } .secondary-button { width: 100%; min-height: 44px; } .pdf-pane { min-height: 100vh; padding-top: var(--reader-header-height); } .viewer-stage { min-height: 100vh; overflow: hidden; padding: 0 0 70px; } .pages { width: 126vw; margin-left: 50%; transform: translateX(-50%); justify-items: center; } .pdf-page { width: 100%; max-width: none; box-shadow: none; } .annotation-card { width: 94.5vw; max-width: none; max-height: calc(100dvh - var(--reader-viewport-top, 0px) - 28px); } .notes-drawer { width: 95vw; max-height: calc(100dvh - var(--notes-drawer-top, 64px) - 8px); } .guide-disclosure { width: 95vw; max-height: calc(100dvh - var(--guide-disclosure-top, 64px) - 8px); } .guide-disclosure-header { padding: 17px 16px 14px; } .guide-disclosure-body { overflow: hidden; padding: 15px 16px 17px; } .social-links { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .social-link { min-height: 42px; padding: 7px 8px; font-size: 0.86rem; } .social-link:nth-child(3):last-child { grid-column: 1 / -1; justify-self: center; width: calc((100% - 8px) / 2); } body.mobile-header-hidden .reader-header { opacity: 0; pointer-events: none; transform: translateY(calc(-100% - 1px)); } body.has-open-card .reader-header { opacity: 0; pointer-events: none; transform: translateY(calc(-100% - 1px)); } .image-lightbox { padding: 12px; } .image-lightbox-panel, .image-lightbox-figure img { max-width: calc(100vw - 24px); } .image-lightbox-figure img { max-height: calc(100dvh - 120px); } .image-lightbox-close { width: 44px; height: 44px; } }