/*! TYLER — Jedi Security Intelligence Network. Every rule is scoped under .tyler-root / .tyl-* so the host theme and menus are untouched. */
.tyler-root {
  --tyl-bg: #07090c; --tyl-panel: #0d1218; --tyl-panel2: #111821; --tyl-line: #1f2a37; --tyl-text: #dbe6f3; --tyl-dim: #93a4b8;
  --tyl-blue: #3ab4ff; --tyl-violet: #b38bff; --tyl-green: #39ff88; --tyl-red: #ff5d73; --tyl-amber: #ffc857;
  --tyl-radius: 10px; --tyl-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
  --tyl-sans: system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, sans-serif;
  position: relative; isolation: isolate; box-sizing: border-box; color: var(--tyl-text); background: var(--tyl-bg);
  font: 15px/1.55 var(--tyl-sans); border: 1px solid var(--tyl-line); border-radius: var(--tyl-radius); padding: 14px; margin: 1em 0; overflow: hidden;
}
.tyler-root *, .tyler-root *::before, .tyler-root *::after { box-sizing: border-box; }
.tyler-root > :not(canvas) { position: relative; z-index: 1; }
.tyler-root a { color: var(--tyl-blue); text-decoration: none; }
.tyler-root a:hover { text-decoration: underline; }
.tyler-root :focus-visible { outline: 2px solid var(--tyl-green); outline-offset: 2px; }
.tyler-root h2, .tyler-root h3, .tyler-root h4 { color: var(--tyl-text); margin: .2em 0 .4em; line-height: 1.3; font-family: var(--tyl-sans); }
.tyler-root code { font-family: var(--tyl-mono); font-size: .85em; color: var(--tyl-green); word-break: break-all; }
.tyl-matrix { position: absolute; inset: 0; width: 100%; height: 100%; opacity: .11; pointer-events: none; z-index: 0; }
.tyl-dim { color: var(--tyl-dim); }
.tyl-h { font-family: var(--tyl-mono); letter-spacing: .04em; text-transform: uppercase; font-size: .95rem; color: var(--tyl-green); }
.tyl-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.tyl-brand { font-family: var(--tyl-mono); font-weight: 700; letter-spacing: .14em; color: var(--tyl-green); text-shadow: 0 0 10px rgba(57,255,136,.35); }
.tyl-nav { display: flex; flex-wrap: wrap; gap: 6px 14px; font-family: var(--tyl-mono); font-size: .85rem; }
.tyl-nav a { color: var(--tyl-violet); }

/* controls */
.tyl-toolbar, .tyl-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 0 0 12px; }
.tyl-input { background: var(--tyl-panel2); color: var(--tyl-text); border: 1px solid var(--tyl-line); border-radius: 8px; padding: 8px 10px; font: inherit; min-width: 0; max-width: 100%; }
.tyl-toolbar .tyl-input[type=search] { flex: 1 1 240px; }
textarea.tyl-input { width: 100%; resize: vertical; }
.tyl-input:focus { border-color: var(--tyl-blue); outline: none; box-shadow: 0 0 0 2px rgba(58,180,255,.25); }
.tyl-btn { background: linear-gradient(135deg, rgba(58,180,255,.18), rgba(179,139,255,.18)); color: var(--tyl-text); border: 1px solid var(--tyl-blue); border-radius: 8px; padding: 7px 14px; font: 600 .9rem var(--tyl-sans); cursor: pointer; }
.tyl-btn:hover { border-color: var(--tyl-green); color: #fff; }
.tyl-btn:disabled { opacity: .5; cursor: progress; }
.tyl-btn-ghost { background: transparent; border-color: var(--tyl-line); padding: 4px 10px; font-weight: 500; }
.tyl-active { border-color: var(--tyl-green) !important; color: var(--tyl-green) !important; }
.tyl-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; opacity: 0; }
.tyl-flash { padding: 8px 12px; border-radius: 8px; margin: 6px 0; font-size: .9rem; border: 1px solid var(--tyl-line); }
.tyl-flash-ok { border-color: var(--tyl-green); color: var(--tyl-green); }
.tyl-flash-error, .tyl-error { border-color: var(--tyl-red); color: var(--tyl-red); }

/* cards */
.tyl-feed { display: grid; gap: 10px; }
.tyl-card { background: var(--tyl-panel); border: 1px solid var(--tyl-line); border-left: 3px solid var(--tyl-blue); border-radius: var(--tyl-radius); padding: 12px 14px; }
.tyl-card:hover { border-left-color: var(--tyl-green); }
.tyl-title { font-size: 1.04rem; margin: 0 0 4px; }
.tyl-title a { color: var(--tyl-text); }
.tyl-meta { display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: center; font: .8rem var(--tyl-mono); color: var(--tyl-dim); }
.tyl-src { color: var(--tyl-violet); }
.tyl-summary { margin: 6px 0; color: #c3d1e1; }
.tyl-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.tyl-tag { background: transparent; border: 1px solid var(--tyl-line); color: var(--tyl-dim); border-radius: 999px; padding: 1px 9px; font: .75rem var(--tyl-mono); cursor: pointer; }
.tyl-tag:hover { color: var(--tyl-green); border-color: var(--tyl-green); }
.tyl-chip { display: inline-block; border: 1px solid var(--tyl-line); border-radius: 6px; padding: 0 6px; font: .72rem var(--tyl-mono); color: var(--tyl-dim); }
.tyl-upd { color: var(--tyl-amber); border-color: rgba(255,200,87,.4); }
.tyl-adv { color: var(--tyl-blue); }
.tyl-badge { display: inline-block; border-radius: 6px; padding: 0 7px; font: 600 .72rem var(--tyl-mono); letter-spacing: .03em; border: 1px solid; }
.tyl-v-unreviewed { color: var(--tyl-dim); border-color: var(--tyl-line); }
.tyl-v-corroborated { color: var(--tyl-blue); border-color: var(--tyl-blue); }
.tyl-v-verified { color: var(--tyl-green); border-color: var(--tyl-green); }
.tyl-v-disputed { color: var(--tyl-amber); border-color: var(--tyl-amber); }
.tyl-v-retracted { color: var(--tyl-red); border-color: var(--tyl-red); text-decoration: line-through; }
.tyl-v-opinion { color: var(--tyl-violet); border-color: var(--tyl-violet); }
.tyl-more { background: none; border: 0; color: var(--tyl-blue); font: .8rem var(--tyl-mono); cursor: pointer; padding: 6px 0 0; }
.tyl-details { border-top: 1px dashed var(--tyl-line); margin-top: 8px; padding-top: 8px; font-size: .9rem; }
.tyl-prov { display: grid; grid-template-columns: max-content 1fr; gap: 2px 12px; font-size: .82rem; margin: 6px 0; }
.tyl-prov dt { color: var(--tyl-dim); font-family: var(--tyl-mono); }
.tyl-prov dd { margin: 0; overflow-wrap: anywhere; }
.tyl-note { font-size: .82rem; color: var(--tyl-amber); margin: 0 0 6px; }
.tyl-list { margin: 4px 0 8px; padding-left: 18px; }
.tyl-list li { margin: 3px 0; }
.tyl-claim { font: 700 .7rem var(--tyl-mono); padding: 0 5px; border-radius: 4px; border: 1px solid var(--tyl-line); }
.tyl-c-alleged { color: var(--tyl-amber); } .tyl-c-supported { color: var(--tyl-blue); } .tyl-c-contradicted { color: var(--tyl-red); } .tyl-c-contested { color: var(--tyl-violet); }
.tyl-ents { display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: center; font-size: .8rem; margin: 6px 0; }
.tyl-ent { font-family: var(--tyl-mono); border-bottom: 1px dotted var(--tyl-dim); }
.tyl-ent-cve, .tyl-ent-attack { color: var(--tyl-red); } .tyl-ent-domain, .tyl-ent-ip { color: var(--tyl-blue); } .tyl-ent-org { color: var(--tyl-violet); }
.tyl-docs { font-size: .82rem; display: flex; gap: 8px; flex-wrap: wrap; }
.tyl-empty { color: var(--tyl-dim); font-style: italic; }
.tyl-submit { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--tyl-line); }
.tyl-submit .tyl-input { flex: 1 1 200px; }
.tyl-submit small { flex-basis: 100%; }

/* ticker */
.tyl-ticker { display: flex; align-items: center; gap: 10px; padding: 6px 10px; }
.tyl-ticker-label { font: 700 .75rem var(--tyl-mono); color: #000; background: var(--tyl-green); border-radius: 4px; padding: 2px 8px; flex: none; }
.tyl-ticker-view { overflow: hidden; flex: 1; mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent); }
.tyl-ticker-track { display: inline-flex; gap: 36px; white-space: nowrap; animation: tyl-scroll 90s linear infinite; }
.tyl-ticker-item { padding-right: 36px; border-right: 1px solid var(--tyl-line); }
.tyl-ticker-view:hover .tyl-ticker-track, .tyl-ticker-view:focus-within .tyl-ticker-track { animation-play-state: paused; }
.tyl-ticker-item { font-size: .88rem; }
@keyframes tyl-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* media */
.tyl-media-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.tyl-media { border-left-color: var(--tyl-violet); padding: 0 0 10px; overflow: hidden; }
.tyl-media .tyl-title, .tyl-media .tyl-meta { padding: 0 12px; }
.tyl-video { position: relative; aspect-ratio: 16 / 9; background: #000; margin-bottom: 8px; }
.tyl-video iframe, .tyl-play img { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; object-fit: cover; }
.tyl-play { position: absolute; inset: 0; width: 100%; border: 0; padding: 0; background: #000; cursor: pointer; }
.tyl-play-icon { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); font-size: 2rem; color: #fff; background: rgba(0,0,0,.6); border: 2px solid var(--tyl-green); border-radius: 50%; width: 64px; height: 64px; display: grid; place-items: center; }

/* status */
.tyl-agents { display: grid; gap: 8px; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); margin-bottom: 12px; }
.tyl-agent { background: var(--tyl-panel); border: 1px solid var(--tyl-line); border-radius: 8px; padding: 10px; font-size: .85rem; }
.tyl-agent p { margin: 4px 0 0; font-size: .78rem; }
.tyl-dot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; background: var(--tyl-dim); margin-right: 6px; vertical-align: middle; }
.tyl-st-idle .tyl-dot { background: var(--tyl-green); box-shadow: 0 0 8px var(--tyl-green); }
.tyl-st-running .tyl-dot { background: var(--tyl-blue); box-shadow: 0 0 8px var(--tyl-blue); }
.tyl-st-degraded .tyl-dot, .tyl-stale .tyl-dot { background: var(--tyl-amber); }
.tyl-st-paused .tyl-dot { background: var(--tyl-red); }
.tyl-st-standby { opacity: .7; }
.tyl-table { width: 100%; border-collapse: collapse; font-size: .85rem; }
.tyl-table th, .tyl-table td { text-align: left; padding: 6px 8px; border-bottom: 1px solid var(--tyl-line); }
.tyl-table th { color: var(--tyl-dim); font: 600 .75rem var(--tyl-mono); text-transform: uppercase; }
.tyl-health { font: .75rem var(--tyl-mono); }
.tyl-h-ok { color: var(--tyl-green); } .tyl-h-degraded, .tyl-h-pending { color: var(--tyl-amber); } .tyl-h-failing { color: var(--tyl-red); } .tyl-h-disabled { color: var(--tyl-dim); }

/* chat */
.tyl-chat { display: flex; flex-direction: column; gap: 6px; }
.tyl-chat-head { display: flex; justify-content: space-between; gap: 8px; align-items: center; }
.tyl-chat-tabs { display: flex; gap: 4px; overflow-x: auto; scrollbar-width: thin; }
.tyl-tab { background: transparent; color: var(--tyl-dim); border: 1px solid var(--tyl-line); border-radius: 6px; padding: 3px 10px; font: .82rem var(--tyl-mono); cursor: pointer; white-space: nowrap; }
.tyl-tab-dm { color: var(--tyl-violet); }
.tyl-unread { color: var(--tyl-green); border-color: var(--tyl-green); }
.tyl-chat-topic { font-size: .78rem; min-height: 1em; }
.tyl-chat-body { display: flex; gap: 8px; min-height: 0; }
.tyl-chat-log { list-style: none; margin: 0; padding: 8px; flex: 1; height: 360px; overflow-y: auto; background: #05080a; border: 1px solid var(--tyl-line); border-radius: 8px; font: .88rem/1.45 var(--tyl-mono); overscroll-behavior: contain; }
.tyl-msg { padding: 1px 0; overflow-wrap: anywhere; position: relative; }
.tyl-msg:hover .tyl-x { visibility: visible; }
.tyl-ts { color: #5f7186; margin-right: 6px; font-size: .78em; }
.tyl-nick { background: none; border: 0; padding: 0; font: inherit; color: var(--tyl-blue); cursor: pointer; }
.tyl-nick.tyl-member { color: var(--tyl-green); }
.tyl-nick.tyl-mod { color: var(--tyl-violet); font-weight: 700; }
.tyl-check { color: var(--tyl-green); font-size: .8em; margin-left: 2px; }
.tyl-k-me { color: var(--tyl-violet); font-style: italic; }
.tyl-k-system, .tyl-k-notice { color: var(--tyl-dim); font-style: italic; }
.tyl-k-notice.tyl-error { color: var(--tyl-red); }
.tyl-x { visibility: hidden; background: none; border: 0; color: var(--tyl-red); cursor: pointer; margin-left: 6px; }
.tyl-chat-users { list-style: none; margin: 0; padding: 8px; width: 170px; max-height: 360px; overflow-y: auto; border: 1px solid var(--tyl-line); border-radius: 8px; font: .82rem var(--tyl-mono); }
.tyl-chat-users .tyl-idle { opacity: .6; }
.tyl-users-toggle { display: none; }
.tyl-chat-form { display: flex; gap: 6px; }
.tyl-chat-form .tyl-input { flex: 1; }
.tyl-chat-me { background: var(--tyl-panel2); color: var(--tyl-green); border: 1px solid var(--tyl-line); border-radius: 8px; font: .8rem var(--tyl-mono); padding: 0 8px; cursor: pointer; max-width: 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tyl-menu { position: absolute; z-index: 5; right: 14px; top: 56px; background: var(--tyl-panel2); border: 1px solid var(--tyl-blue); border-radius: 8px; padding: 6px; display: flex; flex-direction: column; min-width: 180px; box-shadow: 0 10px 30px rgba(0,0,0,.6); }
.tyl-menu strong { padding: 4px 8px; font-family: var(--tyl-mono); color: var(--tyl-green); }
.tyl-menu button { background: none; border: 0; color: var(--tyl-text); text-align: left; padding: 6px 8px; border-radius: 6px; cursor: pointer; font: .85rem var(--tyl-sans); }
.tyl-menu button:hover, .tyl-menu button:focus { background: rgba(58,180,255,.15); }

/* dock (persistent bar). Uses its own root so it never inherits page layout. */
.tyler-root.tyl-dock { position: fixed; right: 16px; bottom: 0; z-index: 99990; width: min(440px, calc(100vw - 32px)); margin: 0; padding: 0; border-radius: 10px 10px 0 0; border-bottom: 0; box-shadow: 0 -6px 30px rgba(0,0,0,.55); }
.tyl-dock-bar { display: flex; width: 100%; align-items: center; gap: 8px; padding: 10px 14px; background: linear-gradient(90deg, #0b1118, #121a26); color: var(--tyl-text); border: 0; font: 600 .9rem var(--tyl-mono); cursor: pointer; letter-spacing: .05em; }
.tyl-dock-bar .tyl-dot { background: var(--tyl-green); box-shadow: 0 0 8px var(--tyl-green); }
.tyl-dock-caret { margin-left: auto; transition: transform .2s; }
.tyl-dock-open .tyl-dock-caret { transform: rotate(180deg); }
.tyl-dock-panel { padding: 10px; }
.tyl-dock-panel .tyl-chat-users { width: 120px; }

/* board */
.tyl-board .tyl-new { margin-bottom: 12px; }
.tyl-board .tyl-new > summary { display: inline-block; list-style: none; margin-bottom: 8px; }
.tyl-board .tyl-new > summary::-webkit-details-marker { display: none; }
.tyl-board-form { display: grid; gap: 8px; background: var(--tyl-panel); border: 1px solid var(--tyl-line); border-radius: var(--tyl-radius); padding: 12px; margin: 12px 0; }
.tyl-threads { display: grid; gap: 8px; }
.tyl-thread, .tyl-post { background: var(--tyl-panel); border: 1px solid var(--tyl-line); border-radius: 8px; padding: 10px 12px; }
.tyl-thread-head { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 10px; }
.tyl-modbar { display: inline-flex; gap: 4px; margin-left: auto; }
.tyl-posts { display: grid; gap: 8px; }
.tyl-post.tyl-hl { border-color: var(--tyl-green); }
.tyl-deleted { opacity: .55; }
.tyl-pname { color: var(--tyl-green); }
.tyl-pid { color: var(--tyl-violet); }
.tyl-body { margin-top: 6px; overflow-wrap: anywhere; white-space: normal; }
.tyl-green { color: #7dff9b; }
.tyl-quote { color: var(--tyl-red) !important; }
.tyl-file { margin: 6px 0; font-size: .82rem; }
.tyl-file img { max-width: 240px; height: auto; border-radius: 6px; border: 1px solid var(--tyl-line); display: block; }
.tyl-evidence { border: 1px solid var(--tyl-violet); background: rgba(179,139,255,.06); border-radius: 8px; padding: 10px 12px; margin-bottom: 12px; }
.tyl-evidence h3 { font-size: .9rem; color: var(--tyl-violet); }
.tyl-pager { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 10px; }

@media (max-width: 640px) {
  .tyler-root { padding: 10px; font-size: 14px; border-radius: 0; border-left: 0; border-right: 0; }
  .tyl-chat-users { display: none; position: absolute; right: 10px; top: 46px; z-index: 4; background: var(--tyl-panel2); }
  .tyl-chat-users.tyl-open { display: block; }
  .tyl-users-toggle { display: inline-block; }
  .tyl-chat-log { height: 52vh; }
  .tyler-root.tyl-dock { right: 0; width: 100vw; }
  .tyl-prov { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .tyl-ticker-track { animation: none; flex-wrap: wrap; white-space: normal; gap: 6px 20px; }
  .tyl-ticker-item[aria-hidden="true"] { display: none; }
  .tyl-dock-caret { transition: none; }
}
@media (forced-colors: active) { .tyl-badge, .tyl-btn, .tyl-tab { border: 1px solid CanvasText; } }
