/* Article layout, kept here so the paper does not depend on portfolio page styles. */
.article-back { padding: 2rem 0; font-size: .875rem; color: var(--muted); }
.writeup-header { margin: 1rem 0 3.5rem 14.5rem; max-width: 45rem; }
.article-meta { font: .8rem/1.7 var(--mono); color: var(--accent); margin-bottom: 1.2rem; }
.writeup-header h1 { font-size: clamp(2.3rem, 4.6vw, 3.8rem); line-height: 1.1; letter-spacing: -.035em; }
.article-lede { margin-top: 1.4rem; font-size: 1.2rem; line-height: 1.65; color: var(--muted); }
.article-author { margin-top: 1.3rem; font-size: .875rem; color: var(--muted); }
.writeup-layout { display: grid; grid-template-columns: 12rem minmax(0, 1fr); gap: 2.5rem; align-items: start; }
.article-contents { position: sticky; top: 7rem; padding-top: .3rem; }
.article-contents > p { font-size: .875rem; color: var(--ink); margin-bottom: .8rem; }
.article-contents nav { display: flex; flex-direction: column; gap: .7rem; }
.article-contents nav a { padding: 0; font-size: .875rem; line-height: 1.55; color: var(--muted); }
.article-contents nav a:hover { color: var(--accent); }
.writeup-body { min-width: 0; max-width: 68ch; font-size: 1.0625rem; line-height: 1.85; }
@media (max-width: 900px) {
  .writeup-header { margin-left: 0; }
  .writeup-header { max-width: 44rem; }
  .writeup-layout { display: block; }
  .article-contents { position: static; margin-bottom: 2.5rem; padding: 1.2rem 0; border-block: 1px solid var(--line); }
  .article-contents nav { display: grid; grid-template-columns: 1fr 1fr; gap: .75rem 1.5rem; }
  .writeup-body { max-width: none; }
}
@media (max-width: 720px) {
  .article-back { padding: 1.5rem 0; }
  .writeup-header { margin-top: .5rem; margin-bottom: 2rem; }
  .writeup-header h1 { font-size: clamp(2rem, 8vw, 3rem); }
  .article-lede { font-size: 1.1rem; }
  .article-contents nav { grid-template-columns: 1fr; }
}

.reading-progress { height: 2px; margin-bottom: 1.25rem; background: var(--line); overflow: hidden; }
.reading-progress span { display: block; width: 100%; height: 100%; background: var(--accent); transform: scaleX(0); transform-origin: left; }
.article-contents nav a { padding-left: .75rem; border-left: 1px solid transparent; transition: color .18s ease, border-color .18s ease; }
.article-contents nav a[aria-current] { color: var(--accent); border-left-color: var(--accent); text-decoration: none; }

/* Paper-specific components use the portfolio's shared palette and typography. */
.paper-page .writeup-header { margin-top: 1rem; }
.article-meta .tag + .tag { margin-left: 1rem; color: var(--muted); }
.writeup-body { overflow-wrap: break-word; }
.writeup-body h2 { margin: 3rem 0 1rem; font-size: 1.85rem; line-height: 1.25; letter-spacing: -.025em; text-wrap: pretty; }
.writeup-body p { text-wrap: pretty; }
.writeup-body strong { color: var(--ink); font-weight: 600; }
.writeup-body a, .paper-footer a { color: var(--accent); }
.writeup-body ul, .writeup-body ol { padding-left: 1.4rem; margin: 1.25rem 0; }
.writeup-body li + li { margin-top: .45rem; }
.callout-box { margin: 1.75rem 0; padding: .2rem 0 .2rem 1.25rem; border-left: 2px solid var(--accent); color: var(--muted); }
.writeup-body > .callout-box:first-child { margin-top: 0; }
.escalation-step { display: flex; gap: 1rem; align-items: baseline; margin: 1.25rem 0; }
.escalation-num { flex: 0 0 1.6rem; color: var(--accent); font: .875rem/1.7 var(--mono); background: none !important; }
.escalation-desc { min-width: 0; color: var(--muted); }
.writeup-body code { padding: .15em .35em; background: var(--surface); color: var(--accent); font: .85em/1.7 var(--mono); border-radius: 3px; overflow-wrap: anywhere; }
.comparison { width: 100%; margin: 1.75rem 0; border-collapse: collapse; font-size: .9rem; line-height: 1.6; }
.comparison th, .comparison td { text-align: left; vertical-align: top; padding: .8rem .65rem; border-bottom: 1px solid var(--line); }
.comparison th { color: var(--ink); font-weight: 600; border-top: 1px solid var(--line); }
.comparison td { color: var(--muted); }
.comparison th:first-child, .comparison td:first-child { padding-left: 0; }
.result-caught { color: #eba7a3; }
.result-mixed { color: #dbc790; }
.result-bypassed { color: #a5c5b3; }
.screenshot-block { margin: 1.8rem 0; }
.screenshot-block img { display: block; width: 100%; height: auto; border: 1px solid var(--line); border-radius: 4px; }
.screenshot-annotation { margin: .7rem 0 2rem; color: var(--muted); font: .875rem/1.6 var(--body); }
.paper-page .article-contents { max-height: calc(100dvh - 9rem); overflow-y: auto; scrollbar-width: thin; }
.paper-page .article-contents nav { gap: .55rem; }
.paper-footer { margin-top: 4rem; display: block; }
.paper-footer p { font-size: .875rem; }
@media (max-width: 900px) { .paper-page .article-contents { max-height: none; overflow: visible; } }
@media (max-width: 720px) {
  .writeup-body { font-size: 1rem; line-height: 1.8; }
  .writeup-body h2 { font-size: 1.6rem; margin-top: 2.2rem; }
  .comparison { font-size: .8rem; }
  .comparison th, .comparison td { padding: .6rem .4rem; }
  .article-meta .tag { display: inline-block; }
}
