Look base stylesheet
Base CSS rules paired with LookRenderer's HTML emission — class names here are a contract with the renderer's <header class="kan-hero">, <nav class="kan-site-nav">, etc.
- Media Type
- text/css
- Content
- * { box-sizing: border-box; } body { background: var(--kan-bg); color: var(--kan-text); font-family: var(--kan-font-body); line-height: var(--kan-line-height-body); margin: 0; } a { color: var(--kan-accent); text-decoration: none; } a:hover { color: var(--kan-accent-hover); text-decoration: underline; } /* Page layout */ .kan-main { max-width: 860px; margin: 0 auto; padding: 0 24px 64px; } /* Site navigation chrome */ .kan-site-nav { border-bottom: 1px solid var(--kan-border); background: var(--kan-bg-card); padding: 12px 24px; margin-bottom: 24px; } .kan-site-nav ul { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 4px 24px; max-width: 860px; margin: 0 auto; } .kan-site-nav .kan-nav-link { font-family: var(--kan-font-mono); font-size: 13px; color: var(--kan-text-dim); letter-spacing: 0.04em; padding: 4px 0; text-decoration: none; } .kan-site-nav .kan-nav-link:hover { color: var(--kan-accent); } .kan-site-nav .kan-nav-link[aria-current="page"] { color: var(--kan-text); border-bottom: 1px solid var(--kan-accent); } /* Site-wide footer (from the publisher's look.footer) */ .kan-site-footer { border-top: 1px solid var(--kan-border); margin-top: 48px; padding: 28px 24px; max-width: 860px; margin-left: auto; margin-right: auto; text-align: center; color: var(--kan-text-faint); font-size: 13px; } .kan-site-footer .kan-footer-links { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 20px; margin-bottom: 10px; } .kan-site-footer .kan-footer-link { font-family: var(--kan-font-mono); color: var(--kan-text-dim); letter-spacing: 0.04em; text-decoration: none; } .kan-site-footer .kan-footer-link:hover { color: var(--kan-accent); } .kan-site-footer .kan-footer-text { margin: 0; } /* Breadcrumb — publisher → package → resource on every page */ .kan-breadcrumb { max-width: 860px; margin: 0 auto; padding: 16px 24px 0; } .kan-breadcrumb ol { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 8px; font-family: var(--kan-font-mono); font-size: 12px; color: var(--kan-text-faint); letter-spacing: 0.04em; } .kan-breadcrumb li { display: flex; align-items: center; } .kan-breadcrumb li + li::before { content: "/"; margin-right: 8px; color: var(--kan-text-faint); opacity: 0.5; } .kan-breadcrumb a { color: var(--kan-text-dim); text-decoration: none; } .kan-breadcrumb a:hover { color: var(--kan-accent); } .kan-breadcrumb li[aria-current="page"] { color: var(--kan-text); } /* Figure (per-resource SVG) */ .kan-figure { margin: 24px 0; text-align: center; } .kan-figure img { max-width: 100%; height: auto; } /* Markdown band */ .kan-markdown { margin: 16px 0 32px; } .kan-markdown h2 { font-family: var(--kan-font-display); font-size: 22px; color: var(--kan-text); margin: 32px 0 12px; } .kan-markdown h3 { font-family: var(--kan-font-display); font-size: 18px; color: var(--kan-text); margin: 24px 0 10px; } .kan-markdown p { margin: 12px 0; color: var(--kan-text-dim); } .kan-markdown ul, .kan-markdown ol { color: var(--kan-text-dim); padding-left: 24px; } .kan-markdown li { margin: 6px 0; } .kan-markdown strong { color: var(--kan-text); font-weight: 600; } .kan-markdown code { font-family: var(--kan-font-mono); font-size: 0.9em; background: var(--kan-bg-card); padding: 1px 6px; border-radius: var(--kan-radius-sm); color: var(--kan-text); } .kan-markdown a { color: var(--kan-accent); } .kan-markdown a:hover { color: var(--kan-accent-hover); text-decoration: underline; } /* Fenced code block — the container styling pairs with the declarative code-grammars highlighter, which wraps tokens in kan-tok-<class> spans (theme colors below). */ .kan-markdown pre.kan-code { font-family: var(--kan-font-mono); font-size: 0.82rem; line-height: 1.55; background: var(--kan-bg-card); border: 1px solid var(--kan-border); border-radius: var(--kan-radius-sm); padding: 12px 14px; margin: 14px 0; overflow-x: auto; tab-size: 2; } .kan-markdown pre.kan-code code { background: none; padding: 0; border-radius: 0; font-size: inherit; color: var(--kan-text-dim); } /* Syntax token palette (the THEME). A publisher reskins highlighting by overriding just these — grammars and the scanner are untouched. */ .kan-tok-comments { color: #6b7280; font-style: italic; } .kan-tok-string { color: #86efac; } .kan-tok-number { color: #fbbf24; } .kan-tok-boolean { color: #fbbf24; } .kan-tok-key { color: #7dd3fc; } .kan-tok-keyword { color: #c4b5fd; } .kan-tok-punctuation { color: var(--kan-text-faint); } .kan-tok-operator { color: #f0abfc; } .kan-tok-flag { color: #7dd3fc; } /* Links band — a resource's outbound (external) links as a row of anchor pills. Distinct from .kan-link (internal reference links). */ .kan-extlink-row { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0; } .kan-extlink { display: inline-flex; align-items: center; font-family: var(--kan-font-mono); font-size: 13px; color: var(--kan-text-dim); border: 1px solid var(--kan-border); border-radius: var(--kan-radius-sm); padding: 4px 11px; text-decoration: none; } .kan-extlink:hover { color: var(--kan-accent); border-color: var(--kan-accent); } /* Details band — generic recursive property sheet */ .kan-details { margin: 12px 0; display: grid; grid-template-columns: max-content 1fr; gap: 6px 18px; align-items: baseline; } .kan-details-key { font-family: var(--kan-font-mono); font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--kan-text-dim); } .kan-details-val { font-size: 14px; color: var(--kan-text); min-width: 0; line-height: 1.5; } .kan-details-embed { border-left: 2px solid var(--kan-border); padding-left: 12px; margin: 2px 0; } .kan-details-embed .kan-details { margin: 4px 0; gap: 4px 14px; } .kan-details-type { font-family: var(--kan-font-mono); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--kan-accent); } /* Inline chip-tier SemanticSvg shown to the LEFT of a resolved [[reference]] link's label (e.g. a security's ticker). */ .kan-md-chip { display: inline-block; width: 1.45em; height: 1.45em; vertical-align: -0.32em; margin: 0 0.32em 0 0.05em; border-radius: 4px; } /* Hero band */ .kan-hero { padding: 32px 0 24px; border-bottom: 1px solid var(--kan-border); margin-bottom: 32px; } /* Hero with an identity icon: glyph beside the title block */ .kan-hero-has-icon { display: flex; align-items: center; gap: 22px; } .kan-hero-has-icon .kan-hero-text { flex: 1; min-width: 0; } .kan-hero-icon { flex: none; width: 56px; height: 56px; } /* Hero with a profile-picture avatar: a larger, card-styled portrait beside the title block (the title/subtitle wrap next to it). The 176px width keeps the SemanticSvg in its detailed card tier. */ .kan-hero-has-avatar { display: flex; align-items: center; gap: 28px; flex-wrap: wrap; } .kan-hero-has-avatar .kan-hero-text { flex: 1; min-width: 240px; } .kan-hero-avatar { flex: none; width: 176px; height: 176px; border-radius: var(--kan-radius-md, 12px); border: 1px solid var(--kan-border); background: var(--kan-bg-card); box-shadow: 0 1px 3px rgba(0,0,0,0.25); } .kan-hero-eyebrow { font-family: var(--kan-font-mono); font-size: 11px; color: var(--kan-accent); letter-spacing: 0.18em; text-transform: uppercase; margin-bottom: 12px; display: block; } .kan-hero-title { font-family: var(--kan-font-display); font-size: 32px; font-weight: 600; letter-spacing: -0.015em; margin: 0 0 12px; line-height: var(--kan-line-height-heading); color: var(--kan-text); } .kan-hero-subtitle { font-size: 17px; color: var(--kan-text-dim); font-weight: 300; line-height: 1.55; margin: 0 0 16px; } .kan-hero-badges { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; } /* PropertyList band */ .kan-property-list { margin: 24px 0; } .kan-property-list-title { font-family: var(--kan-font-mono); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--kan-text-dim); margin: 0 0 12px; font-weight: 600; } .kan-property-list-items { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; } .kan-property-list-items > li { color: var(--kan-text); } .kan-property-list-items > li.kan-empty { color: var(--kan-text-faint); font-style: italic; } /* Embedded resource — an ObjectProperty value serialized inline as an anonymous resource renders as a nested definition list of its own predicate/value pairs (LookRenderer.renderEmbeddedInline). Nests inside PropertyList items, chip values, and ReferenceList rows. */ dl.kan-embedded { display: grid; grid-template-columns: max-content 1fr; gap: 2px 16px; margin: 4px 0; padding-left: 12px; border-left: 2px solid var(--kan-border-soft); } dl.kan-embedded > dt { color: var(--kan-text-dim); font-family: var(--kan-font-mono); font-size: 11px; letter-spacing: 0.04em; } dl.kan-embedded > dd { margin: 0; color: var(--kan-text); } dl.kan-embedded dl.kan-embedded { margin: 0; } /* BadgeRow band */ .kan-badge-row { display: flex; flex-wrap: wrap; gap: 6px; margin: 16px 0; } /* Badge (used by Hero badges + BadgeRow) */ .kan-badge { display: inline-block; padding: 2px 8px; background: var(--kan-badge-bg); color: var(--kan-badge-fg); border-radius: var(--kan-radius-sm); font-size: 11px; font-weight: 500; text-decoration: none; letter-spacing: 0.02em; } .kan-badge:hover { filter: brightness(1.1); text-decoration: none; } /* ChipRow band */ .kan-chip-row { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0; } .kan-chip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; background: var(--kan-bg-card); border: 1px solid var(--kan-border); border-radius: var(--kan-radius-sm); font-family: var(--kan-font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; } .kan-chip-key { color: var(--kan-text-faint); } .kan-chip-val { color: var(--kan-text); font-weight: 500; } /* ReferenceList band */ dl.kan-reference-list { display: grid; grid-template-columns: max-content 1fr; gap: 8px 16px; margin: 16px 0; padding: 16px 18px; background: var(--kan-bg-card); border: 1px solid var(--kan-border); border-radius: var(--kan-radius); } dl.kan-reference-list dt { font-family: var(--kan-font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--kan-text-faint); align-self: center; } dl.kan-reference-list dd { margin: 0; align-self: center; } /* Link (used by reference values across bands) */ .kan-link { color: var(--kan-accent); text-decoration: none; } .kan-link:hover { color: var(--kan-accent-hover); text-decoration: underline; } /* ResourceGrid band */ .kan-resource-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; margin: 24px 0; } .kan-resource-card { display: block; padding: 16px 18px; background: var(--kan-bg-card); border: 1px solid var(--kan-border); border-radius: var(--kan-radius); color: var(--kan-text); text-decoration: none; transition: border-color 120ms, transform 120ms; } .kan-resource-card:hover { border-color: var(--kan-accent); text-decoration: none; transform: translateY(-1px); } .kan-resource-card-title { font-family: var(--kan-font-display); font-size: 16px; font-weight: 600; color: var(--kan-text); margin: 0 0 8px; line-height: 1.3; } .kan-resource-card-subtitle { font-size: 13px; color: var(--kan-text-dim); margin: 0; line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } /* Timeline band */ .kan-timeline { margin: 24px 0; overflow-x: auto; } .kan-timeline ol { list-style: none; padding: 0; margin: 0; display: flex; gap: 0; align-items: stretch; } .kan-timeline-node { position: relative; flex: 1 1 0; min-width: 120px; } .kan-timeline-node a { display: flex; flex-direction: column; gap: 4px; padding: 14px 16px; background: var(--kan-bg-card); border: 1px solid var(--kan-border); border-radius: var(--kan-radius); margin: 0 6px; text-decoration: none; transition: border-color 120ms, transform 120ms; } .kan-timeline-node a:hover { border-color: var(--kan-accent); transform: translateY(-1px); text-decoration: none; } .kan-timeline-node:not(:last-child)::after { content: ""; position: absolute; top: 50%; right: -6px; width: 12px; height: 2px; background: var(--kan-border); } .kan-timeline-key { font-family: var(--kan-font-mono); font-size: 15px; font-weight: 600; color: var(--kan-accent); } .kan-timeline-date { font-family: var(--kan-font-mono); font-size: 11px; color: var(--kan-text-dim); } /* Timeline trajectory (fan chart) */ .kan-fan { margin: 24px 0; } .kan-fan-chart { background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); padding: 16px; overflow-x: auto; } .kan-fan-svg { display: block; width: 100%; height: auto; min-width: 640px; } .kan-fan-grid { stroke: var(--kan-border-soft); stroke-width: 1; } .kan-fan-vline { stroke: var(--kan-border-soft); stroke-width: 1; stroke-dasharray: 2 4; } .kan-fan-axis { fill: var(--kan-text-faint); font-family: var(--kan-font-mono); font-size: 11px; } .kan-fan-xlabel { fill: var(--kan-accent); font-family: var(--kan-font-mono); font-size: 12px; font-weight: 600; } .kan-fan-xdate { fill: var(--kan-text-faint); font-family: var(--kan-font-mono); font-size: 10px; } .kan-fan-xtick { cursor: pointer; } .kan-fan-xtick:hover .kan-fan-xlabel { fill: var(--kan-accent-hover); } .kan-fan-series polyline { transition: stroke-width 120ms; } .kan-fan-svg:hover .kan-fan-series { opacity: 0.35; transition: opacity 120ms; } .kan-fan-svg .kan-fan-series:hover { opacity: 1; } .kan-fan-svg .kan-fan-series:hover polyline { stroke-width: 3; } .kan-fan-legend { margin-top: 16px; display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 8px; } .kan-fan-legend-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); font-size: 13px; } .kan-fan-swatch { width: 12px; height: 12px; border-radius: 3px; flex-shrink: 0; background: hsl(var(--kan-fan-hue), 65%, 60%); } .kan-fan-legend-label { flex: 1; color: var(--kan-text-dim); line-height: 1.4; } .kan-fan-legend-label a { color: var(--kan-text); text-decoration: none; } .kan-fan-legend-label a:hover { color: var(--kan-accent); } .kan-fan-legend-cur { font-family: var(--kan-font-mono); font-size: 12px; color: var(--kan-text); flex-shrink: 0; display: inline-flex; align-items: center; gap: 6px; } .kan-fan-delta { font-size: 11px; letter-spacing: 0.04em; } .kan-fan-delta.up { color: #34d399; } .kan-fan-delta.down { color: #f87171; } .kan-fan-delta.flat { color: var(--kan-text-faint); } .kan-fan-band { fill-opacity: 0.12; stroke: none; } .kan-fan-svg:hover .kan-fan-band { fill-opacity: 0.06; } /* VersionDiff band — per-series trend rows */ .kan-vdiff { margin: 24px 0; display: flex; flex-direction: column; gap: 2px; } .kan-vdiff-row { display: grid; grid-template-columns: 1fr auto 132px auto auto; align-items: center; gap: 14px; padding: 10px 14px; border-bottom: 1px solid var(--kan-border-soft); } .kan-vdiff-row:last-child { border-bottom: none; } .kan-vdiff-label { color: var(--kan-text); font-size: 14px; min-width: 0; } .kan-vdiff-label a { color: var(--kan-text); text-decoration: none; } .kan-vdiff-label a:hover { color: var(--kan-accent); } .kan-vdiff-start, .kan-vdiff-end { font-family: var(--kan-font-mono); font-size: 13px; } .kan-vdiff-start { color: var(--kan-text-faint); } .kan-vdiff-end { color: var(--kan-text); } .kan-vdiff-spark { width: 132px; height: 30px; display: block; } .kan-vdiff-delta { font-family: var(--kan-font-mono); font-size: 12px; letter-spacing: 0.04em; text-align: right; min-width: 78px; } .kan-vdiff-delta.up { color: #34d399; } .kan-vdiff-delta.down { color: #f87171; } .kan-vdiff-delta.flat { color: var(--kan-text-faint); } @media (max-width: 640px) { .kan-vdiff-row { grid-template-columns: 1fr auto auto; } .kan-vdiff-spark, .kan-vdiff-start { display: none; } } /* Figure band — the resource's own SemanticSvg, full tier */ .kan-figure { margin: 24px 0; display: flex; justify-content: center; } .kan-figure-img { width: 100%; max-width: 440px; height: auto; border-radius: var(--kan-radius); } /* Figure size variants — width also picks the responsive SVG tier */ .kan-figure-small .kan-figure-img { max-width: 150px; } .kan-figure-medium .kan-figure-img { max-width: 300px; } .kan-figure-large .kan-figure-img { max-width: 440px; } /* StatRow band — labeled stat strip */ .kan-stat-row { display: flex; flex-wrap: wrap; gap: 10px; margin: 20px 0; } .kan-stat { display: flex; flex-direction: column; gap: 2px; padding: 10px 14px; background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); min-width: 84px; } .kan-stat-label { font-family: var(--kan-font-mono); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--kan-text-dim); } .kan-stat-val { font-family: var(--kan-font-mono); font-size: 18px; font-weight: 600; color: var(--kan-text); } /* ReferenceList detail rows (labelPath) — icon + text + badge */ .kan-ref-rows { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 2px; } .kan-ref-row { margin: 0; } .kan-ref-rowlink { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); text-decoration: none; transition: border-color 120ms, background 120ms; } .kan-ref-rowlink:hover { border-color: var(--kan-accent); background: var(--kan-bg-card); text-decoration: none; } .kan-ref-icon { width: 26px; height: 26px; flex-shrink: 0; border-radius: 4px; } .kan-ref-text { flex: 1; min-width: 0; color: var(--kan-text-dim); font-size: 13px; line-height: 1.5; } .kan-ref-badge { flex-shrink: 0; font-family: var(--kan-font-mono); font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--kan-badge-fg); background: var(--kan-badge-bg); border-radius: 4px; padding: 2px 8px; } /* Horizon band — condition tree (branch = operator, leaf = card) */ .kan-horizon { margin: 20px 0; } .kan-cond { margin: 8px 0; } /* Operator (branch) nodes: a pill + a connector spine for the children. */ .kan-cond-op { display: inline-block; font-family: var(--kan-font-mono); font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--kan-bg); background: var(--kan-accent); border-radius: 999px; padding: 3px 12px; } .kan-cond-branch > .kan-cond-children { margin: 8px 0 0 14px; padding-left: 16px; border-left: 2px solid var(--kan-border); } /* Leaf nodes: a self-contained condition card. */ .kan-cond-leaf { background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); padding: 10px 12px; } .kan-cond-type { font-family: var(--kan-font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--kan-accent); margin-bottom: 8px; } .kan-cond-fields { display: flex; flex-wrap: wrap; gap: 8px; } .kan-cond-field { display: inline-flex; align-items: baseline; gap: 6px; font-size: 13px; color: var(--kan-text); background: var(--kan-bg-elev); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); padding: 3px 9px; } .kan-cond-key { font-family: var(--kan-font-mono); font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--kan-text-dim); } .kan-cond-children { margin-top: 4px; } /* SectionHeading band — subtle labeled section break */ .kan-section { margin: 40px 0 16px; } .kan-section-title { font-family: var(--kan-font-mono); font-size: 12px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--kan-text-dim); margin: 0; display: flex; align-items: center; gap: 12px; } .kan-section-title::after { content: ""; flex: 1; height: 1px; background: var(--kan-border); } .kan-section-note { margin: 6px 0 0; font-size: 13px; color: var(--kan-text-faint); line-height: 1.5; } /* SectionNav band — in-page table of contents: a row of anchor pills jumping to each section heading. */ .kan-section-nav { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0 28px; } .kan-section-nav-link { font-family: var(--kan-font-mono); font-size: 12px; letter-spacing: 0.03em; text-decoration: none; color: var(--kan-text-dim); background: var(--kan-bg-elev); border: 1px solid var(--kan-border); border-radius: 999px; padding: 5px 13px; transition: color 0.15s, border-color 0.15s; } .kan-section-nav-link:hover { color: var(--kan-accent); border-color: var(--kan-accent); } /* PropertyTable band — a list of dict-keyed embeddeds as a table: caption from the source property, one row per item (dict-key as a mono row-header), nested tables for embedded-list cells. */ .kan-property-table { width: 100%; border-collapse: collapse; margin: 10px 0 24px; font-size: 14px; } .kan-property-table caption { position: relative; text-align: left; font-family: var(--kan-font-mono); font-size: 12px; letter-spacing: 0.03em; text-transform: uppercase; color: var(--kan-text-dim); margin-bottom: 8px; } .kan-property-table caption .kan-anchor { position: absolute; right: 0; top: 0; } .kan-property-table:hover > caption .kan-anchor { opacity: 1; } .kan-property-table:target { outline: 2px solid var(--kan-accent); outline-offset: 4px; } .kan-section-title .kan-count { color: var(--kan-text-faint); font-weight: 400; font-size: 0.78em; margin-left: 6px; } /* ReferencedBy — incoming references grouped by the connecting property; each group marked with a direction arrow (← incoming). */ .kan-rel-group { margin: 0 0 18px; } .kan-rel-prop { font-family: var(--kan-font-mono); font-size: 13px; font-weight: 500; color: var(--kan-text-dim); margin: 14px 0 8px; } .kan-rel-dir { color: var(--kan-accent); font-weight: 700; margin-right: 4px; } .kan-property-table th, .kan-property-table td { text-align: left; vertical-align: top; padding: 8px 12px; border: 1px solid var(--kan-border-soft); } .kan-property-table thead th { font-family: var(--kan-font-mono); font-size: 12px; letter-spacing: 0.03em; font-weight: 600; color: var(--kan-text-dim); background: var(--kan-bg-elev); } .kan-property-table tbody th { font-family: var(--kan-font-mono); font-size: 13px; font-weight: 500; white-space: nowrap; color: var(--kan-accent); } .kan-property-table td p:first-child { margin-top: 0; } .kan-property-table td p:last-child { margin-bottom: 0; } .kan-property-table .kan-property-table { margin: 6px 0; font-size: 13px; } /* Copy-link anchors on embedded sections and table rows — faint, shown on hover; right-click -> Copy Link Address gives the full deep URL to that exact resource. :target highlights the linked row/section. */ .kan-anchor { text-decoration: none; color: var(--kan-text-faint); font-weight: 600; opacity: 0; transition: opacity 0.15s, color 0.15s; } .kan-embedded-view { position: relative; } .kan-embedded-view > .kan-anchor { position: absolute; top: 32px; right: 0; font-size: 16px; } .kan-embedded-view:hover > .kan-anchor, .kan-property-table tr:hover .kan-anchor { opacity: 1; } .kan-anchor:hover { color: var(--kan-accent); } .kan-anchor-col { width: 1%; white-space: nowrap; text-align: center; } .kan-embedded-view:target { outline: 2px solid var(--kan-accent); outline-offset: 4px; } .kan-property-table tr:target td, .kan-property-table tr:target th { background: var(--kan-bg-elev); } /* VersionDelta band — visual change vs the previous version: a rounded card floated beside the rationale prose (article-style), like .kan-dist. */ .kan-delta { float: right; width: 340px; max-width: 46%; margin: 4px 0 14px 26px; padding: 14px 16px; background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); } .kan-delta-first { font-family: var(--kan-font-mono); font-size: 12px; color: var(--kan-text-faint); } .kan-delta-head { display: flex; align-items: center; gap: 12px; margin-bottom: 4px; } .kan-delta-vs { font-family: var(--kan-font-mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--kan-text-dim); } .kan-delta-badge { font-family: var(--kan-font-mono); font-size: 12px; font-weight: 600; padding: 2px 8px; border-radius: 4px; } .kan-delta-badge.up { color: #34d399; background: rgba(52,211,153,0.12); } .kan-delta-badge.down { color: #f87171; background: rgba(248,113,113,0.12); } .kan-delta-badge.flat { color: var(--kan-text-faint); } .kan-delta-track { display: block; width: 100%; max-width: 360px; height: auto; } .kan-delta-base { stroke: var(--kan-border); stroke-width: 2; } .kan-delta-prev { fill: var(--kan-bg); stroke: var(--kan-text-faint); stroke-width: 2; } .kan-delta-tick { fill: var(--kan-text); font-family: var(--kan-font-mono); font-size: 11px; font-weight: 600; } .kan-delta-tick-prev { fill: var(--kan-text-faint); font-weight: 400; } /* TimePlot band — dated points in category lanes, hover for detail */ .kan-plot { margin: 14px 0 20px; padding: 12px 8px; background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); overflow-x: auto; } .kan-plot-svg { display: block; width: 100%; min-width: 520px; height: auto; } .kan-plot-guide { stroke: var(--kan-border-soft); stroke-width: 1; } .kan-plot-lane { fill: var(--kan-text-dim); font-family: var(--kan-font-mono); font-size: 11px; letter-spacing: 0.04em; } .kan-plot-axis { fill: var(--kan-text-faint); font-family: var(--kan-font-mono); font-size: 10px; } .kan-plot-pt { cursor: pointer; transition: r 100ms; } .kan-plot-pt:hover { stroke: var(--kan-text); stroke-width: 2; } /* PackageContents band — default package member cards */ .kan-pkg-grid { margin: 24px 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; } .kan-pkg-card { display: flex; align-items: flex-start; gap: 12px; padding: 14px; background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); text-decoration: none; transition: border-color 120ms, transform 120ms; } .kan-pkg-card:hover { border-color: var(--kan-accent); transform: translateY(-1px); text-decoration: none; } .kan-pkg-card-svg { width: 44px; height: 44px; flex-shrink: 0; border-radius: 6px; } .kan-pkg-card-body { min-width: 0; display: flex; flex-direction: column; gap: 4px; } .kan-pkg-card-title { font-family: var(--kan-font-display); font-size: 15px; font-weight: 600; color: var(--kan-text); line-height: 1.25; } .kan-pkg-card-comment { font-size: 12px; color: var(--kan-text-dim); line-height: 1.5; } /* Type chip(s) on a card — one per rdf:type, above the title. */ .kan-card-types { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 3px; } .kan-card-type { font-family: var(--kan-font-mono); font-size: 9px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--kan-text-dim); background: var(--kan-bg-elev); border: 1px solid var(--kan-border-soft); border-radius: 4px; padding: 1px 6px; } /* Card with a package@version footer: stack the main link over the foot. */ .kan-pkg-card--foot { flex-direction: column; align-items: stretch; gap: 0; } .kan-pkg-card-link { display: flex; align-items: flex-start; gap: 12px; min-width: 0; text-decoration: none; color: inherit; } .kan-pkg-card-foot { display: flex; align-items: baseline; gap: 2px; margin-top: 10px; max-width: 100%; overflow: hidden; white-space: nowrap; font-family: var(--kan-font-mono); font-size: 11px; text-decoration: none; transition: opacity 120ms; } /* Served-publisher: a hover-revealed package link. */ a.kan-pkg-card-foot { opacity: 0; } .kan-pkg-card:hover a.kan-pkg-card-foot { opacity: 1; } /* Other publisher: full URI, always shown (dimmed) so the source is clear. */ span.kan-pkg-card-foot { opacity: 0.6; } .kan-card-pub { color: var(--kan-text-faint); overflow: hidden; text-overflow: ellipsis; } .kan-card-pkg { color: var(--kan-text-dim); overflow: hidden; text-overflow: ellipsis; } a.kan-pkg-card-foot:hover .kan-card-pkg { color: var(--kan-accent); text-decoration: underline; } .kan-card-at { color: var(--kan-text-faint); flex-shrink: 0; } .kan-card-ver { flex-shrink: 0; color: var(--kan-badge-fg); background: var(--kan-badge-bg); border-radius: 999px; padding: 0 6px; font-size: 10px; } /* FeaturedResource band — embedded resource view on the root page */ .kan-featured { margin: 24px 0 40px; padding: 24px; background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); position: relative; } .kan-featured-permalink { display: inline-block; font-family: var(--kan-font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--kan-accent); text-decoration: none; margin-bottom: 12px; } .kan-featured-permalink:hover { color: var(--kan-accent-hover); } /* The embedded view's own hero sheds its top padding inside the feature. */ .kan-featured .kan-hero { padding-top: 0; } /* Distribution band — small Beta-density infographic, floated beside prose */ .kan-dist { float: right; width: 260px; max-width: 42%; margin: 4px 0 14px 26px; padding: 14px 14px 8px; background: var(--kan-bg-card); border: 1px solid var(--kan-border-soft); border-radius: var(--kan-radius); } .kan-dist-svg { display: block; width: 100%; height: auto; } .kan-dist-base { stroke: var(--kan-border); stroke-width: 1; } .kan-dist-mean { fill: var(--kan-text); font-family: var(--kan-font-mono); font-size: 12px; font-weight: 600; } .kan-dist-axis { fill: var(--kan-text-faint); font-family: var(--kan-font-mono); font-size: 10px; } .kan-dist-caption { margin-top: 6px; font-family: var(--kan-font-mono); font-size: 10px; letter-spacing: 0.04em; color: var(--kan-text-dim); text-align: center; } /* Non-prose bands start below a floated infographic rather than wrapping it. */ .kan-stat-row, .kan-horizon, .kan-vdiff, .kan-fan, .kan-pkg-grid, .kan-reference-list, .kan-resource-grid, .kan-section, .kan-plot { clear: both; } @media (max-width: 560px) { .kan-dist, .kan-delta { float: none; width: 100%; max-width: 360px; margin: 16px 0; } }