stalkermustang's picture
Deploy static guide
cc010ee verified
Raw
History Blame Contribute Delete
38.2 kB
: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;
}
}