.companion{--panel:#121b17;--line:#2b382e}.companion-header{height:94px;display:flex;justify-content:space-between;align-items:center;padding:0 5%;border-bottom:1px solid var(--line)}.back-series{font-size:.875rem;color:var(--muted)}.back-series span{margin-left:22px;color:var(--accent)}.companion-hero{position:relative;min-height:495px;overflow:hidden;border-bottom:1px solid var(--line);background:#101a17}.city-art{position:absolute;inset:0;background-image:linear-gradient(90deg,#0b100ffa 0%,#0b100fdb 27%,#0b100f25 66%),linear-gradient(0deg,#0b100fdf,transparent 40%),url('assets/kettleburn.webp');background-position:center;background-size:cover}.companion-intro{position:relative;padding:62px 6% 65px;max-width:860px}.companion-intro .eyebrow{margin-bottom:25px}.companion-intro h1{font-size:clamp(60px,5.8vw,92px);line-height:1.02;margin-bottom:23px}.companion-intro>p:not(.eyebrow){font-size:1rem;line-height:1.8;color:#bfcbbf}.explore-link{display:inline-flex;align-items:center;gap:28px;margin-top:4px;font-size:.875rem;color:var(--accent);border-bottom:1px solid #698460;padding:9px 0}.city-stamp{position:absolute;bottom:35px;right:5%;font: .75rem var(--mono);letter-spacing:1.4px;color:#dbe7d7;display:flex;gap:10px;align-items:center}.city-stamp>span:last-child{display:block;color:#b4c1b1;margin-left:12px}.status-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0;box-shadow:0 0 12px #badca83b}.archive-shell{max-width:1680px;margin:auto;padding:55px 5% 60px;scroll-margin-top:20px}.archive-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:29px}.archive-heading .eyebrow{margin-bottom:9px;letter-spacing:1.2px}.archive-heading h2{font-size:clamp(35px,3.3vw,49px)}.archive-heading>p{font: .75rem var(--mono);color:var(--muted);margin:0 0 4px;text-align:right}.progress-panel{padding:23px 25px;border:1px solid #3c4a39;display:grid;grid-template-columns:minmax(260px,.8fr) 1.2fr;gap:36px;background:#162016;margin-bottom:32px}.progress-select label{display:flex;gap:9px;align-items:center;font-size:.875rem;color:var(--accent);margin-bottom:10px}.companion select{color:var(--text);font: .875rem var(--sans);border:1px solid #53634a;border-radius:0;padding:11px 35px 11px 12px;background:#101910;max-width:100%;min-height:44px;cursor:pointer}.progress-select select{width:100%}.progress-description p{font-size:.875rem;line-height:1.65;color:#bbc8b5;margin:0 0 8px;max-width:620px}.progress-description>span{font: .75rem var(--mono);letter-spacing:.3px;color:var(--accent)}.archive-controls{display:flex;justify-content:space-between;align-items:center;gap:28px;border-bottom:1px solid var(--line)}.archive-tabs{display:flex;gap:28px;align-self:stretch}.archive-tabs button{background:none;display:flex;gap:9px;align-items:center;border-bottom:2px solid transparent;padding:15px 0 20px;font-size:1rem;white-space:nowrap}.archive-tabs button[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}.archive-tabs button>span{font: .75rem var(--mono);color:var(--muted)}.archive-tabs button:hover{color:var(--accent)}.search-field{position:relative;display:flex;align-items:center;gap:11px;min-width:200px;max-width:360px;flex:1;padding-bottom:7px}.search-field svg{width:20px;height:20px;flex-shrink:0;fill:none;stroke:var(--accent);stroke-width:1.3}.search-field input{width:100%;background:none;border:0;min-height:44px;font: .875rem var(--sans);color:var(--text);outline-offset:0;padding:0 4px}.search-field input::placeholder{color:#9eac9f}.search-field kbd{font: .75rem var(--mono);color:#879a87;border:1px solid #354533;padding:2px 6px}.filter-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:24px;min-height:42px}.filter-group{display:flex;align-items:center;gap:9px}.filter-group label{font: .75rem var(--mono);color:var(--muted)}.filter-bar select{background:var(--bg);border-color:#35422f;padding-top:9px;padding-bottom:9px}.filter-chips{display:flex;gap:8px;flex-wrap:wrap}.filter-chip{border:1px solid #34422f;background:none;padding:10px 14px;font-size:.875rem;min-height:42px}.filter-chip[aria-pressed=true]{background:var(--accent);color:#152112;border-color:var(--accent)}.filter-chip:hover{border-color:var(--accent)}.results-heading{display:flex;justify-content:space-between;align-items:center;min-height:51px;gap:15px}.results-heading p{font-size:.875rem;color:var(--muted);margin:0}.subtle-button{color:var(--accent);background:none;font-size:.875rem;padding:9px 0;text-align:left}.subtle-button:hover{text-decoration:underline}.character-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:28px 20px}.character-card{background:transparent;text-align:left;display:block;padding:0;width:100%;min-width:0;position:relative}.portrait-wrap{position:relative;overflow:hidden;aspect-ratio:3/4;background:#19241c;border:1px solid #334331}.portrait-wrap img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .4s,filter .4s}.character-card:hover .portrait-wrap img{transform:scale(1.035);filter:brightness(1.06)}.portrait-wrap:after{content:'';position:absolute;inset:55% 0 0;background:linear-gradient(0deg,#0a120ae8,transparent);pointer-events:none}.portrait-kind{position:absolute;bottom:13px;left:13px;z-index:1;font: .75rem var(--mono);letter-spacing:1px;color:#d0e2c6;display:flex;align-items:center;gap:7px}.portrait-kind:before{content:'';width:5px;height:5px;background:#c0b599}.character-card[data-kind=Vigil] .portrait-kind:before{background:#bbe5a9;box-shadow:0 0 8px #a4e588}.portrait-open{position:absolute;bottom:8px;right:12px;color:var(--accent);font-size:1.5rem;z-index:1}.character-card h3{font-family:var(--serif);font-size:1.8rem;line-height:1.07;font-weight:400;margin:15px 0 7px;overflow-wrap:anywhere}.character-card:hover h3{color:var(--accent)}.character-role{font-size:.875rem;line-height:1.5;color:var(--muted);margin:0 0 10px}.character-book{font:.75rem var(--mono);color:#a7ba9e;letter-spacing:.3px}.lore-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.lore-card{border:1px solid var(--line);background:#101812;text-align:left;padding:26px;min-height:245px;display:flex;flex-direction:column;align-items:flex-start;position:relative}.lore-card:before{content:'';height:2px;width:33px;background:#6a895d;display:block;margin-bottom:20px}.lore-card:hover{background:#182317;border-color:#5b7650}.lore-card .eyebrow{font-size:.75rem;letter-spacing:.6px;margin-bottom:10px;color:#afc8a3}.lore-card h3{font:400 2rem/1.07 var(--serif);margin:0 0 13px}.lore-card p:not(.eyebrow){font-size:1rem;line-height:1.6;color:#a9b6a4;margin:0 0 18px}.lore-card .card-end{font: .75rem var(--mono);color:var(--accent);margin-top:auto;display:flex;width:100%;justify-content:space-between}.lore-card .card-end span:last-child{font:1.3rem var(--sans)}.lore-card.place-card{background:linear-gradient(120deg,#16251b,#101813)}.lore-card.featured-lore{background:linear-gradient(90deg,#0c170fdd,#0c170fc9),url('assets/kettleburn.webp') center/cover;border-color:#557048}.timeline-list{max-width:1000px;margin:12px auto 0}.timeline-event{display:grid;grid-template-columns:160px 1fr;gap:35px;position:relative;padding:0 0 38px}.timeline-year{font:.875rem var(--mono);color:var(--accent);text-align:right;padding-top:8px}.timeline-event>div{position:relative;padding-left:32px;border-left:1px solid #3b5331}.timeline-event>div:before{content:'';position:absolute;left:-4px;top:12px;width:7px;height:7px;background:var(--accent)}.timeline-event h3{font:400 2rem/1.1 var(--serif);margin:0 0 13px}.timeline-event p{font-size:1rem;line-height:1.7;color:var(--muted);margin:0 0 12px}.timeline-links{display:flex;gap:9px;flex-wrap:wrap}.timeline-links button,.related-lore button{background:#1b2918;border:1px solid #354830;color:#bbd4ae;font-size:.875rem;padding:8px 12px;text-align:left}.timeline-links button:hover,.related-lore button:hover{border-color:var(--accent)}.timeline-lock{margin:0 auto;padding:22px;max-width:800px;border:1px dashed #3b4d32;color:var(--muted);font-size:.875rem;line-height:1.65}.pagination{display:flex;gap:16px;align-items:center;justify-content:center;margin-top:35px;min-height:45px}.pagination button{background:none;border:1px solid #415338;min-width:44px;min-height:44px;padding:10px 17px;color:var(--accent);font-size:.875rem}.pagination span{font:.75rem var(--mono);color:var(--muted)}.archive-loading,.empty-state{padding:75px 24px;text-align:center;border:1px dashed #34432d;color:var(--muted)}.empty-state h3{font:400 2rem var(--serif);color:var(--text);margin-top:0}.empty-state p{font-size:1rem;line-height:1.7}.companion-note{margin-top:60px;border-top:1px solid var(--line);padding-top:26px;display:grid;grid-template-columns:190px 1fr 1fr;gap:30px}.companion-note .eyebrow{font-size:.75rem;letter-spacing:.7px}.companion-note p{font-size:.875rem;line-height:1.7;color:var(--muted);margin:0}.companion-footer{border-top:1px solid var(--line);padding:30px 5%;display:flex;align-items:center;justify-content:space-between;gap:25px;font-size:.875rem;letter-spacing:.5px}.companion-footer span{display:block;font:.75rem var(--mono);color:var(--muted);margin-top:8px}.companion-footer>a:last-child{color:var(--accent);letter-spacing:0}.record-dialog{padding:0;color:var(--text);background:#101812;border:1px solid #4b6140;width:min(1050px,calc(100% - 40px));max-height:92svh;overscroll-behavior:contain}.record-dialog::backdrop{background:#030a05dc;backdrop-filter:blur(8px)}.record-toolbar{position:sticky;top:0;z-index:3;background:#101812;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:12px 25px;border-bottom:1px solid var(--line)}.record-toolbar>.eyebrow{font-size:.75rem;letter-spacing:.8px;margin:0 auto 0 0}.record-toolbar .close-button{flex-shrink:0}.record-toolbar #record-back:not([hidden])+.eyebrow{display:none}.person-layout{display:grid;grid-template-columns:35% 1fr}.person-art{padding:30px 0 30px 30px;min-width:0}.person-art img{width:100%;aspect-ratio:3/4;object-fit:cover;display:block;border:1px solid #394c30}.person-art>p{font-size:.75rem;line-height:1.65;color:#97a88e;margin:15px 0 0}.person-copy{padding:35px}.record-heading .eyebrow{font-size:.75rem;letter-spacing:.7px;margin-bottom:13px}.record-heading h2{font:400 clamp(35px,4vw,53px)/1.04 var(--serif);margin:0 0 12px;overflow-wrap:anywhere}.record-role{color:var(--accent);font-size:1rem;line-height:1.5;margin:0 0 24px}.record-prose p{font-size:1rem;line-height:1.8;color:#bcc8b5;margin-bottom:20px}.record-prose .intro{color:#e0e6d9;font-size:1.0625rem}.record-section{border-top:1px solid var(--line);padding-top:23px;margin-top:27px}.record-section h3{font:400 1.7rem var(--serif);margin:0 0 17px}.record-lock{background:#192417;border:1px dashed #46563c;padding:18px;margin-top:24px}.record-lock p{font-size:.875rem;line-height:1.6;color:#b1c2a6;margin:0}.record-lock strong{font-weight:500;color:var(--accent)}.record-lock button{margin-top:10px}.related-people{display:grid;gap:12px}.person-link{display:flex;align-items:center;gap:13px;background:transparent;width:100%;text-align:left;padding:0;color:var(--text)}.person-link img{width:53px;height:64px;object-fit:cover;border:1px solid #3d5034;flex-shrink:0}.person-link strong{font-size:1rem;font-weight:500;display:block;line-height:1.4}.person-link small{font-size:.75rem;color:var(--muted);display:block;line-height:1.5;margin-top:3px}.person-link:hover strong{color:var(--accent)}.related-lore{display:flex;flex-wrap:wrap;gap:8px}.source-list{color:var(--muted);font-size:.875rem;line-height:1.8;padding-left:20px;margin:13px 0 0}.record-section details summary{cursor:pointer;font-size:.875rem;color:var(--accent);line-height:1.5}.record-section details+details{margin-top:13px}.lore-layout{padding:40px clamp(24px,6vw,75px) 50px}.lore-layout .record-heading{max-width:800px}.lore-layout .record-heading h2{font-size:clamp(42px,5vw,70px)}.lore-layout .record-prose{max-width:800px}.lore-layout .record-prose .intro{font:400 1.6rem/1.35 var(--serif);color:var(--accent);margin-top:24px}.lore-scene{width:100%;max-height:280px;object-fit:cover;margin:4px 0 23px;border:1px solid var(--line)}.lore-layout .related-people{grid-template-columns:repeat(2,minmax(0,1fr))}.revelation{margin-top:26px;border-left:2px solid #8aad76;padding-left:23px}.revelation .eyebrow{font-size:.75rem;letter-spacing:.7px;margin-bottom:12px}.revelation h3{font:400 1.9rem var(--serif);margin:0 0 14px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.companion input:focus-visible,.companion select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.companion [hidden]{display:none!important}.no-script{padding:30px;line-height:1.8}.no-script a{color:var(--accent);text-decoration:underline}.archive-panel-enter{animation:panel-in .25s ease-out}
@media(min-width:1500px){.character-grid{grid-template-columns:repeat(6,minmax(0,1fr))}}
@media(max-width:1150px){.character-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.archive-controls{flex-wrap:wrap;gap:4px}.search-field{flex-basis:100%;max-width:none;border-top:1px solid var(--line);padding-top:7px}.archive-tabs{gap:30px}.archive-tabs button{padding-bottom:15px}.lore-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.companion-note{grid-template-columns:1fr 2fr}.companion-note>p:last-child{grid-column:2}.city-stamp>span:last-child{display:none}}
@media(max-width:760px){.companion-header{height:82px;padding:0 6%}.companion-header .wordmark small{font-size:.625rem;letter-spacing:.6px}.back-series{font-size:.75rem;max-width:90px;text-align:right;line-height:1.6}.back-series span{margin-left:5px}.companion-hero{min-height:480px}.companion-intro{padding:52px 6% 90px}.companion-intro h1{font-size:clamp(51px,9.8vw,72px)}.companion-intro .eyebrow{font-size:.75rem;letter-spacing:.6px}.companion-intro>p:not(.eyebrow){font-size:1rem}.city-art{background-image:linear-gradient(90deg,#0b100fe8,#0b100f96),linear-gradient(0deg,#0b100f,transparent),url('assets/kettleburn.webp');background-position:60%}.city-stamp{left:6%;right:auto;bottom:25px}.archive-shell{padding:36px 6% 40px}.archive-heading{display:block}.archive-heading h2{font-size:2.4rem}.archive-heading>p{text-align:left;margin-top:16px}.progress-panel{grid-template-columns:1fr;padding:19px;gap:16px;margin-bottom:18px}.progress-description p{font-size:.875rem}.archive-tabs{gap:23px;justify-content:space-between;width:100%}.archive-tabs button{font-size:.875rem;padding:14px 0;gap:5px}.archive-tabs button>span{display:none}.filter-bar{gap:10px;margin-top:19px;align-items:flex-start}.filter-group{flex-direction:column;align-items:flex-start;gap:7px;flex:1}.filter-group select{width:100%;padding-left:8px;padding-right:20px;min-width:85px}.character-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:25px 14px}.character-card h3{font-size:1.5rem}.character-role{font-size:.875rem}.portrait-kind{font-size:.625rem;left:9px;bottom:10px}.character-book{font-size:.75rem}.portrait-open{font-size:1.2rem;right:8px;bottom:7px}.lore-card{padding:22px;min-height:240px}.lore-card h3{font-size:1.8rem}.timeline-event{grid-template-columns:100px 1fr;gap:18px}.timeline-event>div{padding-left:21px}.timeline-year{font-size:.75rem;line-height:1.7}.timeline-event h3{font-size:1.8rem}.companion-note{grid-template-columns:1fr;gap:17px;margin-top:40px}.companion-note .eyebrow{margin:0}.companion-note>p:last-child{grid-column:auto}.companion-footer{align-items:flex-start;padding:28px 6%}.companion-footer>a:last-child{max-width:110px;text-align:right;line-height:1.6}.record-dialog{width:calc(100% - 20px);max-height:95svh}.record-toolbar{padding:9px 17px}.record-toolbar>.eyebrow{font-size:.75rem}.person-layout{grid-template-columns:1fr}.person-art{padding:24px 25px 0;display:grid;grid-template-columns:130px 1fr;gap:18px;align-items:end}.person-art>p{font-size:.75rem;line-height:1.7;max-width:250px}.person-copy{padding:28px 25px}.record-heading h2{font-size:2.7rem}.lore-layout{padding:30px 25px}.lore-layout .related-people{grid-template-columns:1fr}.lore-layout .record-heading h2{font-size:2.7rem}}
@media(max-width:520px){.character-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.character-card h3{font-size:1.6rem}.lore-grid{grid-template-columns:1fr}.lore-card{min-height:215px}.companion-header .wordmark{font-size:.75rem;letter-spacing:1px}.companion-header .wordmark small{font-size:.625rem}.companion-intro h1{font-size:clamp(48px,10.6vw,62px);letter-spacing:-.8px}.timeline-event{grid-template-columns:1fr;gap:12px;padding-left:10px}.timeline-year{text-align:left;padding-left:22px}.timeline-event>div{padding-bottom:0}.filter-chip{padding:10px 11px}.archive-tabs{gap:15px}.results-heading{padding:12px 0}.results-heading p{font-size:.875rem;line-height:1.6}.record-role{font-size:1rem}.person-art{grid-template-columns:115px 1fr;gap:14px}.record-lock{padding:15px}.companion-note p{font-size:.875rem}}
.portrait-pending{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;aspect-ratio:3/4;background:linear-gradient(135deg,#263524,#101b13);color:#94b185;text-align:center;padding:15px}.portrait-pending>span{font:400 3.5rem var(--serif);letter-spacing:2px}.portrait-pending>small{font:.75rem/1.7 var(--mono);letter-spacing:.7px;margin-top:16px;color:#9caf91;max-width:150px}.person-link>.portrait-pending{width:53px;height:64px;flex-shrink:0;padding:4px}.person-link>.portrait-pending>span{font-size:1.2rem}.person-link>.portrait-pending>small{display:none}.source-hint,.timeline-context{font-size:.875rem;line-height:1.7;color:var(--muted);margin:12px 0}.timeline-context{margin:0}.companion-header .wordmark small,.portrait-kind{font-size:.75rem}
.lore-card-copy{display:flex;flex-direction:column;width:100%;height:100%}.lore-card.with-scene{padding:0}.lore-card.with-scene:before{display:none}.with-scene .lore-card-copy{padding:23px 25px;flex:1}.world-card-image{width:100%;aspect-ratio:16/10;overflow:hidden;position:relative;border-bottom:1px solid var(--line)}.world-card-image img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .45s}.lore-card:hover .world-card-image img{transform:scale(1.035)}.world-card-image>span{position:absolute;right:14px;bottom:13px;display:grid;place-items:center;width:34px;height:34px;background:#13220de8;color:var(--accent);font-size:1.4rem}.record-scene{margin:0 0 26px}.record-scene .lore-scene{max-height:none;margin-bottom:12px}.record-scene figcaption,.record-prose .gallery-caption{font-size:.875rem;line-height:1.65;color:#a4b89a}.world-gallery{margin:27px 0 34px;border:1px solid #3c5132;padding-bottom:20px;background:#121e12}.gallery-image-wrap{position:relative;touch-action:pan-y;aspect-ratio:16/9;overflow:hidden}.gallery-image-wrap img{width:100%;height:100%;object-fit:cover;display:block}.gallery-image-wrap:after{content:'';position:absolute;inset:65% 0 0;background:linear-gradient(0deg,#061006dc,transparent);pointer-events:none}.gallery-location{position:absolute;bottom:17px;left:23px;z-index:1;font:400 2rem var(--serif);color:#ecf0e6}.gallery-controls{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:15px 20px 6px}.gallery-controls>div{display:flex;align-items:center;gap:15px}.gallery-controls>div button{background:none;border:1px solid #4d673f;min-height:44px;min-width:44px;color:var(--accent);font-size:1.2rem}.gallery-controls>div span{font:.75rem var(--mono);color:#b8cea8;min-width:40px;text-align:center}.gallery-controls .subtle-button{font-size:.875rem}.record-prose .gallery-caption{padding:8px 23px 0;margin:0}#gallery-explore{margin:8px 23px 0}.world-gallery:focus-visible{outline-offset:5px}
@media(max-width:520px){.with-scene .lore-card-copy{padding:22px}.gallery-controls{flex-wrap:wrap;padding:13px 15px 3px;gap:5px}.gallery-location{left:16px;bottom:12px;font-size:1.7rem}.record-prose .gallery-caption{padding:8px 16px 0}.gallery-controls .subtle-button{font-size:.875rem}#gallery-explore{margin-left:16px}.gallery-image-wrap{aspect-ratio:4/3}}
  .character-profile{margin-top:28px}.character-profile h3{font:400 1.7rem/1.2 var(--serif);color:var(--accent);margin:0 0 15px}.character-profile p:last-child{margin-bottom:0}
  .character-card:hover .portrait-wrap img{transform:none}
  /* A button's native content alignment must never reposition a portrait when
   another name wraps. Shared row tracks keep each visual/text band aligned. */
.character-grid{row-gap:0;align-items:start}
.character-card{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;align-self:start}
.character-card .portrait-wrap{width:100%;flex-shrink:0;align-self:start}
.character-card h3{min-height:2.14em;overflow-wrap:anywhere}
.character-card .character-role{min-height:3em}
.character-card .character-book{display:block;line-height:1.65;padding-bottom:30px}
@supports(grid-template-rows:subgrid){.character-card{display:grid;grid-row:span 4;grid-template-rows:subgrid;grid-template-columns:minmax(0,1fr);row-gap:0;align-items:start}.character-card h3,.character-card .character-role{align-self:stretch}}
@media(max-width:520px){.filter-group:first-child{flex:1 0 100%}.filter-group:not(:first-child){flex:1 1 calc(50% - 10px)}}
.person-art>img{height:auto}.record-scene .lore-scene{height:auto;aspect-ratio:16/9}
@media(prefers-reduced-motion:reduce){.companion *{animation:none!important;transition:none!important}}
