/* 31337 DÆMONS — shared styles for character profile pages.
   Palette mirrors the homepage. Per-character accent set via <body data-accent="…">. */

:root{
  --bg:#03060a; --green:#39ff8b; --teal:#1fd6c4; --magenta:#ff3ea5;
  --dim:#7fe0b0; --line:rgba(57,255,139,.18); --accent:#1fd6c4;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--dim);
  font-family:"Courier New",ui-monospace,SFMono-Regular,Menlo,monospace;
  line-height:1.5; overflow-x:hidden; min-height:100vh;
}
a{color:var(--accent); text-decoration:none}

/* per-character accents */
body[data-accent="cyan"]   {--accent:#37c8ff; --line:rgba(55,200,255,.20)}
body[data-accent="magenta"]{--accent:#ff3ea5; --line:rgba(255,62,165,.22)}
body[data-accent="green"]  {--accent:#39ff8b; --line:rgba(57,255,139,.20)}
body[data-accent="amber"]  {--accent:#ffb648; --line:rgba(255,182,72,.20)}

.vignette{position:fixed; inset:0; z-index:1; pointer-events:none;
  background:radial-gradient(ellipse at 50% 20%, transparent 45%, rgba(0,0,0,.88) 100%)}
.wrap{position:relative; z-index:2; max-width:720px; margin:0 auto; padding:0 18px 90px}

.wordmark{padding:30px 0 4px; text-align:center; color:#eafff2; letter-spacing:.18em;
  font-size:15px; text-shadow:0 0 10px var(--accent); opacity:.85}
.wordmark .amp{color:var(--magenta)}

/* ---- profile header ---- */
.pf-head{display:flex; gap:22px; padding:34px 0 10px; align-items:flex-start; flex-wrap:wrap}
.pf-avatar{flex:0 0 auto; width:150px; height:150px; border:1px solid var(--accent);
  background:linear-gradient(160deg,rgba(10,20,16,.8),#03060a);
  display:flex; align-items:center; justify-content:center; position:relative;
  box-shadow:0 0 26px rgba(0,0,0,.6), inset 0 0 24px rgba(0,0,0,.5); overflow:hidden}
.pf-avatar img{width:100%; height:100%; object-fit:cover; display:block}
.pf-avatar-glyph{font-size:56px; color:var(--accent); text-shadow:0 0 18px var(--accent); font-weight:700}
.pf-avatar::after{content:"IMG PENDING"; position:absolute; bottom:6px; font-size:8px;
  letter-spacing:.2em; color:var(--dim); opacity:.5}
.pf-avatar.has-img::after{content:none}

.pf-id{flex:1; min-width:240px}
.pf-name{margin:0; font-size:30px; color:#eafff2; letter-spacing:.02em;
  text-shadow:0 0 12px var(--accent)}
.pf-badge{color:var(--accent); font-size:16px; vertical-align:middle}
.pf-handle{color:var(--accent); font-size:14px; margin-top:2px; letter-spacing:.06em}
.pf-role{color:var(--magenta); font-size:11px; text-transform:uppercase;
  letter-spacing:.22em; margin-top:10px}
.pf-bio{color:#9ff0c8; font-size:14px; margin:12px 0 0}
.pf-meta{color:#5a8a72; font-size:12px; margin-top:10px; letter-spacing:.04em}
.pf-tags{margin-top:12px; display:flex; flex-wrap:wrap; gap:8px}
.pf-tags span{font-size:11px; color:var(--accent); border:1px solid var(--line);
  padding:4px 9px; letter-spacing:.06em}

/* ---- feed ---- */
.feed-label{margin:46px 0 16px; color:var(--accent); font-size:12px; letter-spacing:.4em;
  text-transform:uppercase; opacity:.8}
.feed{display:flex; flex-direction:column; gap:14px}
.post{border:1px solid var(--line); background:linear-gradient(180deg,rgba(10,20,16,.6),rgba(3,8,6,.82));
  padding:18px 18px 14px; transition:.2s}
.post:hover{border-color:var(--accent); box-shadow:0 0 20px rgba(0,0,0,.4)}
.post-head{display:flex; align-items:baseline; justify-content:space-between; gap:10px}
.post-who{color:#eafff2; font-size:14px}
.post-who .post-h{color:var(--accent); font-size:12px; margin-left:6px; opacity:.85}
.post-time{color:#5a8a72; font-size:11px; white-space:nowrap}
.post-title{color:#eafff2; font-size:16px; margin:10px 0 6px; letter-spacing:.02em;
  text-shadow:0 0 8px var(--accent)}
.post-body{color:#9ff0c8; font-size:13.5px; margin:10px 0 0; white-space:pre-wrap}
.post-body code{color:var(--accent); background:rgba(0,0,0,.4); padding:1px 5px; font-size:12.5px}
.post-tag{color:var(--magenta)}
.post-media{margin:12px 0 2px; height:200px; border:1px dashed var(--line);
  display:flex; align-items:center; justify-content:center; color:#5a8a72; font-size:11px;
  letter-spacing:.2em; text-transform:uppercase; background:rgba(0,0,0,.25); text-align:center; padding:10px}
.post-photo{width:100%; height:auto; display:block; margin:12px 0 2px; border:1px solid var(--line);
  background:#000}

/* severity chips for the C:/Rolla security blog */
.sev{font-size:10px; letter-spacing:.15em; text-transform:uppercase; padding:3px 8px; border:1px solid;
  margin-left:8px; vertical-align:middle}
.sev.crit{color:#ff5a6a; border-color:#ff5a6a}
.sev.high{color:#ffb648; border-color:#ffb648}
.sev.med {color:var(--teal); border-color:var(--teal)}

.empty-note{border:1px dashed var(--line); padding:20px; text-align:center; color:#5a8a72;
  font-size:12px; letter-spacing:.08em; margin-top:14px}

.pf-foot{margin-top:54px; text-align:center; color:#3f6b57; font-size:11px; letter-spacing:.12em}
.pf-foot .prompt{color:var(--accent)}

/* ---- C:/Rolla live aggregated feed (INTERCEPTED TRANSMISSIONS) ---- */
body[data-page="feed"] .wrap{max-width:980px}
.xmit-intro{color:#9ff0c8; font-size:13.5px; margin:0 0 20px; line-height:1.6}
.xmit-intro .prompt{color:var(--accent)}
.xmit-intro-dim{color:#5a8a72}
.xmit-wrap{display:grid; grid-template-columns:minmax(0,1fr) 250px; gap:24px; align-items:start}
.xmit-main{min-width:0; display:flex; flex-direction:column; gap:18px}
/* each transmission is its own bordered, left-accented card so articles never
   blur into one wall of text — a numbered index + a divider under the header */
.xmit{display:flex; flex-direction:column; gap:16px; min-width:0}
.xmit-item{display:block; position:relative; border:1px solid var(--line); border-left:3px solid var(--accent);
  background:linear-gradient(180deg,rgba(10,20,16,.6),rgba(3,8,6,.82));
  padding:14px 16px 15px; transition:.18s; color:inherit; text-decoration:none}
a.xmit-item:hover{border-color:var(--accent); box-shadow:0 0 18px rgba(0,0,0,.45); transform:translateX(2px)}
.xmit-head{display:flex; align-items:baseline; gap:9px; flex-wrap:wrap;
  padding-bottom:8px; border-bottom:1px dashed var(--line)}
.xmit-num{color:var(--accent); font-size:11px; font-weight:700; letter-spacing:.08em;
  font-variant-numeric:tabular-nums; opacity:.85}
.xmit-src{color:var(--accent); font-size:12px; letter-spacing:.04em}
.xmit-cat{color:#5a8a72; font-size:10px; text-transform:uppercase; letter-spacing:.12em;
  border:1px solid var(--line); padding:1px 6px; border-radius:2px}
.xmit-time{margin-left:auto; color:#5a8a72; font-size:11px; white-space:nowrap}
.xmit-title{color:#eafff2; font-size:15px; margin-top:9px; line-height:1.4; font-weight:600}
a.xmit-item:hover .xmit-title{text-shadow:0 0 8px var(--accent)}
.xmit-snip{color:#7fb89a; font-size:12px; margin-top:6px; line-height:1.55}
.xmit-status{border:1px dashed var(--line); padding:22px; text-align:center; color:#5a8a72;
  font-size:12px; letter-spacing:.06em}

/* pagination — basic prev / numbered pages / next */
.xmit-pager{display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:6px;
  border-top:1px solid var(--line); padding-top:16px}
.xmit-pager:empty{display:none}
.pg-info{width:100%; text-align:center; color:#5a8a72; font-size:10.5px; letter-spacing:.08em; margin-bottom:4px}
.pg-btn{font-family:inherit; font-size:12px; color:#8fdcb4; background:rgba(3,8,6,.6);
  border:1px solid var(--line); padding:6px 11px; cursor:pointer; transition:.15s;
  font-variant-numeric:tabular-nums; min-width:34px; text-align:center}
.pg-btn:hover:not(:disabled){border-color:var(--accent); color:#eafff2}
.pg-btn.active{border-color:var(--accent); background:rgba(255,182,72,.12); color:#fff; font-weight:700}
.pg-btn:disabled{opacity:.35; cursor:default}
.pg-gap{color:#5a8a72; padding:0 2px}

.xmit-side{position:sticky; top:14px; border:1px solid var(--line);
  background:rgba(3,8,6,.6); padding:14px 12px}
.xmit-side-h{color:var(--accent); font-size:12px; letter-spacing:.34em; text-transform:uppercase}
.xmit-side-sub{color:#5a8a72; font-size:10.5px; margin-top:3px; letter-spacing:.05em}
.src-list{list-style:none; margin:12px 0 0; padding:0; display:flex; flex-direction:column; gap:2px}
.src-group{color:#5a8a72; font-size:9.5px; text-transform:uppercase; letter-spacing:.2em;
  margin:12px 0 4px; padding-left:2px}
.src-item{display:flex; align-items:center; gap:8px; width:100%; text-align:left;
  font-family:inherit; font-size:12px; color:#8fdcb4; background:transparent;
  border:1px solid transparent; padding:5px 7px; cursor:pointer; transition:.15s; text-decoration:none}
button.src-item:hover{border-color:var(--line); background:rgba(255,182,72,.05); color:#eafff2}
.src-item.active{border-color:var(--accent); background:rgba(255,182,72,.09); color:#eafff2}
.src-dot{color:var(--accent); font-size:10px; width:12px; text-align:center; flex:0 0 auto}
.src-name{flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.src-meta{color:#5a8a72; font-size:10.5px; flex:0 0 auto}
div.src-item{cursor:default}   /* source rows are informational now (nav is via pagination) */
.src-all .src-dot{color:var(--magenta)}
.src-down{color:#4d6b5c; cursor:default}
.src-down .src-dot{color:#7a4b4b}
.src-chan{color:#8fdcb4}
.src-chan:hover{color:#eafff2; background:rgba(255,182,72,.05)}
.src-chan .src-dot{color:#7fb89a}
.xmit-updated{margin-top:14px; padding-top:10px; border-top:1px solid var(--line);
  color:#5a8a72; font-size:10.5px; letter-spacing:.04em}

@media (max-width:680px){
  .xmit-wrap{grid-template-columns:1fr}
  .xmit-side{position:static; order:-1}
}

/* ---- Lil Bit live chat ---- */
.live-dot{color:var(--magenta); font-size:11px; letter-spacing:.2em; margin-left:10px;
  animation:livepulse 1.4s step-end infinite}
@keyframes livepulse{50%{opacity:.25}}
.chat-intro{color:#9ff0c8; font-size:13.5px; margin:0 0 16px; line-height:1.6}
.chat{border:1px solid var(--line); background:rgba(3,8,6,.55)}
.chat-scroll{height:min(62vh,600px); min-height:360px; overflow-y:auto; padding:14px 14px 8px;
  display:flex; flex-direction:column; gap:9px; overflow-anchor:none}
.chat-scroll::-webkit-scrollbar{width:9px}
.chat-scroll::-webkit-scrollbar-thumb{background:rgba(255,62,165,.28); border-radius:4px}
.chat-status{margin:auto; color:#5a8a72; font-size:12px; letter-spacing:.06em; text-align:center}
.msg{padding:2px 2px 2px; animation:msgin .18s ease-out}
@keyframes msgin{from{opacity:0; transform:translateY(4px)}to{opacity:1}}
.msg-top{display:flex; align-items:baseline; gap:8px}
.msg-h{font-size:12.5px; font-weight:700; letter-spacing:.02em; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap; max-width:60%}
.msg-t{color:#5a8a72; font-size:10.5px; margin-left:auto; white-space:nowrap}
.msg-b{color:#e7d6ef; font-size:13.5px; line-height:1.45; margin-top:2px; word-wrap:break-word;
  overflow-wrap:anywhere}
.msg.mine{border-left:2px solid var(--magenta); padding-left:9px; margin-left:-2px}
.msg.mine .msg-b{color:#ffe6f4}

.chat-jump{position:relative; margin:-30px auto 6px; z-index:3; width:max-content; cursor:pointer;
  background:var(--magenta); color:#12000a; font-size:11px; font-weight:700; letter-spacing:.1em;
  text-transform:uppercase; padding:6px 14px; border-radius:14px; box-shadow:0 0 16px rgba(255,62,165,.4)}
.chat-jump[hidden]{display:none}

.chat-compose{border-top:1px solid var(--line); padding:12px 14px 14px; background:rgba(10,4,10,.4)}
.chat-handle-row{display:flex; align-items:center; justify-content:space-between; margin-bottom:9px}
.chat-handle-label{color:#5a8a72; font-size:11px; letter-spacing:.08em; text-transform:uppercase;
  display:flex; align-items:center; gap:8px}
.chat-handle{font-family:inherit; background:rgba(0,0,0,.4); border:1px solid var(--line);
  color:var(--magenta); font-size:12.5px; padding:5px 9px; width:170px; letter-spacing:.02em}
.chat-handle:focus{outline:none; border-color:var(--magenta)}
.chat-count{color:#5a8a72; font-size:11px; font-variant-numeric:tabular-nums}
.chat-input-row{display:flex; gap:9px}
.chat-msg{flex:1; min-width:0; font-family:inherit; background:rgba(0,0,0,.45); border:1px solid var(--line);
  color:#f3e6f6; font-size:13.5px; padding:11px 12px}
.chat-msg:focus{outline:none; border-color:var(--magenta); box-shadow:0 0 14px rgba(255,62,165,.18)}
.chat-msg:disabled{opacity:.5}
.chat-send{font-family:inherit; cursor:pointer; background:var(--magenta); color:#12000a; border:0;
  font-weight:700; letter-spacing:.14em; font-size:12.5px; padding:0 20px; transition:.18s}
.chat-send:hover:not(:disabled){box-shadow:0 0 18px rgba(255,62,165,.45)}
.chat-send:disabled{opacity:.45; cursor:default}
.chat-hp{position:absolute; left:-10000px; width:1px; height:1px; overflow:hidden}
.chat-note{margin-top:9px; min-height:14px; font-size:11.5px; letter-spacing:.03em; color:#8fdcb4}
.chat-note.warn{color:#ff9ac4}

@media (max-width:520px){
  .chat-handle{width:130px}
  .chat-send{padding:0 14px}
}

/* Lil Bit chat as a CONTAINED, viewport-height live feed: the page itself does
   not scroll; the feed window hides its overflow, so posts flow up and off the
   top (fading out) while the newest stays pinned to the bottom. */
body[data-page="chat"]{overflow:hidden}
body[data-page="chat"] .wrap{height:100vh; height:100dvh; max-width:660px;
  display:flex; flex-direction:column; padding-bottom:12px}
body[data-page="chat"] .wordmark{padding:12px 0 2px; flex:0 0 auto}
body[data-page="chat"] .pf-head{padding:8px 0 6px; gap:14px; align-items:center; flex:0 0 auto}
body[data-page="chat"] .pf-avatar{width:60px; height:60px}
body[data-page="chat"] .pf-name{font-size:21px}
body[data-page="chat"] .pf-bio,
body[data-page="chat"] .pf-meta,
body[data-page="chat"] .pf-tags,
body[data-page="chat"] .pf-foot{display:none}
body[data-page="chat"] .feed-label{margin:6px 0; flex:0 0 auto}
body[data-page="chat"] .chat-intro{margin:0 0 8px; font-size:12px; line-height:1.5; flex:0 0 auto}
body[data-page="chat"] .chat{flex:1 1 auto; min-height:0; display:flex; flex-direction:column; position:relative}
/* scrollable history: newest at the bottom, scroll UP to read older messages */
body[data-page="chat"] .chat-scroll{flex:1 1 auto; height:auto; min-height:0; max-height:none;
  overflow-y:auto; overflow-x:hidden}
/* "new messages" pill floats just above the composer when you've scrolled up */
body[data-page="chat"] .chat-jump{display:block; position:absolute; left:50%; bottom:96px;
  transform:translateX(-50%); margin:0; z-index:4}
body[data-page="chat"] .chat-jump[hidden]{display:none}
body[data-page="chat"] .chat-compose{flex:0 0 auto}

/* scroll-up backfill hint + bot vs. user tint */
.chat-older{margin:2px auto 8px; padding:5px 12px; color:#5a8a72; font-size:10.5px;
  letter-spacing:.14em; text-transform:uppercase; text-align:center; border:1px dashed var(--line);
  border-radius:12px; width:max-content}
.msg.bot .msg-b{color:#cbb9d6}
.msg.sys{padding:1px 2px}
.msg.sys .msg-sys{color:#5a8a72; font-size:11.5px; font-style:italic; letter-spacing:.03em}

/* ban overlay — covers the chat when the server says you're blacklisted */
.chat-banned{position:absolute; inset:0; z-index:9; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:12px; text-align:center; padding:28px;
  background:rgba(6,2,6,.92); backdrop-filter:blur(3px)}
.chat-banned-x{font-size:44px; filter:drop-shadow(0 0 12px rgba(255,62,165,.5))}
.chat-banned-h{color:var(--magenta); font-size:18px; font-weight:800; letter-spacing:.22em}
.chat-banned-b{color:#c99; font-size:13px; line-height:1.55; max-width:340px}

/* ---- Unit Zero: Join the Daemon Spawn signup ---- */
.signup{border:1px solid var(--line); background:linear-gradient(180deg,rgba(10,20,16,.6),rgba(3,8,6,.85));
  padding:26px 24px 22px; position:relative;
  background-image:radial-gradient(ellipse at 50% -10%, rgba(55,200,255,.08), transparent 60%)}
.signup-title{margin:0; font-size:clamp(22px,5vw,30px); color:#eafff2; letter-spacing:.06em;
  text-shadow:0 0 14px var(--accent)}
.signup-sub{margin:10px 0 20px; color:#9ff0c8; font-size:13.5px; line-height:1.6; max-width:52ch}
.signup-form{display:flex; flex-direction:column; gap:15px}
.sf-label{display:flex; flex-direction:column; gap:6px; color:var(--accent); font-size:11px;
  letter-spacing:.18em; text-transform:uppercase}
.sf-label .req{color:var(--magenta)}
.sf-label .opt{color:#5a8a72; letter-spacing:.06em}
.sf-label input{font-family:inherit; background:rgba(0,0,0,.45); border:1px solid var(--line);
  color:#eafff2; font-size:15px; padding:12px 13px; letter-spacing:.02em; text-transform:none}
.sf-label input:focus{outline:none; border-color:var(--accent); box-shadow:0 0 14px rgba(55,200,255,.2)}
.sf-interests{border:1px solid var(--line); margin:2px 0 0; padding:14px 14px 10px;
  display:flex; flex-wrap:wrap; gap:10px 18px}
.sf-interests legend{color:var(--accent); font-size:10.5px; letter-spacing:.2em; text-transform:uppercase;
  padding:0 8px}
.sf-check{display:flex; align-items:center; gap:8px; color:#9ff0c8; font-size:13px; cursor:pointer}
.sf-check input{accent-color:var(--accent); width:16px; height:16px; cursor:pointer}
.sf-hp{position:absolute; left:-10000px; width:1px; height:1px; overflow:hidden}
.sf-submit{font-family:inherit; cursor:pointer; background:var(--accent); color:#02121b; border:0;
  font-weight:700; letter-spacing:.16em; font-size:14px; padding:15px; text-transform:uppercase;
  transition:.18s; margin-top:4px}
.sf-submit:hover:not(:disabled){box-shadow:0 0 24px rgba(55,200,255,.4)}
.sf-submit:disabled{opacity:.5; cursor:default}
.sf-consent{margin:2px 0 0; color:#5a8a72; font-size:11px; line-height:1.6}
.sf-note{margin:6px 0 0; min-height:16px; font-size:13px; letter-spacing:.02em; color:#9ff0c8}
.sf-note.ok{color:var(--accent)}
.sf-note.warn{color:#ff9ac4}
.signup-done{text-align:center; padding:20px 8px}
.signup-done h3{color:#eafff2; font-size:20px; margin:0 0 10px; text-shadow:0 0 14px var(--accent)}
.signup-done p{color:#9ff0c8; font-size:14px; margin:0}
.signup-done .big{font-size:34px; margin-bottom:10px}

/* ---- Konami easter egg: Unit Zero -> Unit One "mirror breach" ---- */
.one-only{display:none}
body.corrupted .z-only{display:none}
body.corrupted .one-only{display:block}
body.corrupted .one-only.inline{display:inline}
body.corrupted{--accent:#ff2b47; --line:rgba(255,43,71,.30)}
body.corrupted .wordmark{text-shadow:0 0 10px #ff2b47}
body.corrupted .pf-avatar{border-color:#ff2b47}
body.corrupted .pf-avatar img{filter:hue-rotate(300deg) saturate(1.5) contrast(1.15) brightness(.92)}
body.corrupted .pf-name{animation:glitchtext .28s steps(2) 4}
.breach{display:none}
body.corrupted .breach{display:block; margin:20px 0 -8px; border:1px solid #ff2b47; color:#ff9aa6;
  background:rgba(255,43,71,.07); padding:12px 14px; font-size:11.5px; letter-spacing:.14em;
  text-transform:uppercase; text-align:center; animation:breachpulse 1.6s ease-in-out infinite}
.breach b{color:#ff2b47}
@keyframes breachpulse{0%,100%{box-shadow:0 0 0 rgba(255,43,71,0)}50%{box-shadow:0 0 22px rgba(255,43,71,.4)}}
@keyframes glitchtext{0%{transform:translate(0)}25%{transform:translate(-2px,1px)}
  50%{transform:translate(2px,-1px)}75%{transform:translate(-1px,-1px)}100%{transform:translate(0)}}

@media (max-width:520px){
  .pf-avatar{width:92px; height:92px}
  .pf-avatar-glyph{font-size:42px}
  .pf-name{font-size:24px}
}
