bzl

self-hosted ephemeral community engine
Log | Files | Refs | README | LICENSE

styles.css (87061B)


      1 :root {
      2   --bg: #060611;
      3   --panel: #0c0c18;
      4   --text: #f6f0ff;
      5   --muted-pct: 65;
      6   --line-pct: 10;
      7   --panel2-pct: 2;
      8   --muted: color-mix(in srgb, var(--text) calc(var(--muted-pct) * 1%), transparent);
      9   --line: color-mix(in srgb, var(--text) calc(var(--line-pct) * 1%), transparent);
     10   --panel2: color-mix(in srgb, var(--text) calc(var(--panel2-pct) * 1%), transparent);
     11   --accent: #ff3ea5;
     12   --accent2: #b84bff;
     13   --warn: #ffb84d;
     14   --warn2: #ff7a18;
     15   --font-body: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
     16   --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
     17   --good: #3ddc97;
     18   --bad: #ff4d8a;
     19   --sidebar-width: 320px;
     20   --sidebar-min: 240px;
     21   --chat-width: 640px;
     22   --chat-min: 380px;
     23   --mod-width: 360px;
     24   --mod-min: 280px;
     25   --people-width: 360px;
     26   --people-min: 320px;
     27   --dur-fast: 110ms;
     28   --dur-med: 180ms;
     29   --dur-slow: 260ms;
     30   --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
     31   --ease-soft: cubic-bezier(0.2, 0.8, 0.2, 1);
     32   --shadow-panel: 0 20px 70px rgba(0, 0, 0, 0.45);
     33   --shadow-soft: 0 12px 34px rgba(0, 0, 0, 0.35);
     34   --font-size-base: 15px;
     35   --font-size-small: 11px;
     36   --app-gap: 12px;
     37   --app-pad: 12px;
     38   --panel-pad: 14px;
     39   --panel-header-pad-y: 10px;
     40   --panel-header-pad-x: 12px;
     41   --label-font-size: 12px;
     42   --label-gap: 6px;
     43   --control-pad-y: 10px;
     44   --control-pad-x: 10px;
     45   --btn-pad-y: 10px;
     46   --btn-pad-x: 12px;
     47   --chat-rail-inset: 12px;
     48   --chat-rail-side-max: 66%;
     49   --chat-rail-center-max: 70%;
     50   --hotbar-safe-lane: 0px;
     51 }
     52 
     53 :root[data-ui-scale="xs"] {
     54   --font-size-base: 12px;
     55   --font-size-small: 9px;
     56   --app-gap: 7px;
     57   --app-pad: 7px;
     58   --panel-pad: 10px;
     59   --panel-header-pad-y: 8px;
     60   --panel-header-pad-x: 10px;
     61   --label-font-size: 11px;
     62   --label-gap: 5px;
     63   --control-pad-y: 8px;
     64   --control-pad-x: 9px;
     65   --btn-pad-y: 8px;
     66   --btn-pad-x: 10px;
     67 }
     68 
     69 :root[data-ui-scale="sm"] {
     70   --font-size-base: 13px;
     71   --font-size-small: 10px;
     72   --app-gap: 9px;
     73   --app-pad: 9px;
     74   --panel-pad: 12px;
     75   --panel-header-pad-y: 9px;
     76   --panel-header-pad-x: 11px;
     77   --label-font-size: 12px;
     78   --label-gap: 6px;
     79   --control-pad-y: 9px;
     80   --control-pad-x: 10px;
     81   --btn-pad-y: 9px;
     82   --btn-pad-x: 11px;
     83 }
     84 
     85 :root[data-ui-scale="md"] {
     86   --font-size-base: 15px;
     87   --font-size-small: 11px;
     88   --app-gap: 12px;
     89   --app-pad: 12px;
     90 }
     91 
     92 :root[data-ui-scale="lg"] {
     93   --font-size-base: 16px;
     94   --font-size-small: 12px;
     95   --app-gap: 14px;
     96   --app-pad: 14px;
     97 }
     98 
     99 :root[data-aspect="threeTwo"] {
    100   --sidebar-width: 300px;
    101   --sidebar-min: 230px;
    102   --chat-width: 600px;
    103   --chat-min: 360px;
    104   --people-width: 340px;
    105   --people-min: 300px;
    106   --mod-width: 340px;
    107   --mod-min: 280px;
    108   --app-gap: 10px;
    109   --app-pad: 10px;
    110   --chat-rail-side-max: 70%;
    111   --chat-rail-center-max: 74%;
    112 }
    113 
    114 :root[data-aspect="fourThree"] {
    115   --sidebar-width: 280px;
    116   --sidebar-min: 220px;
    117   --chat-width: 560px;
    118   --chat-min: 340px;
    119   --people-width: 320px;
    120   --people-min: 280px;
    121   --mod-width: 320px;
    122   --mod-min: 260px;
    123   --app-gap: 10px;
    124   --app-pad: 10px;
    125   --chat-rail-side-max: 74%;
    126   --chat-rail-center-max: 78%;
    127 }
    128 
    129 :root[data-aspect="portrait"] {
    130   --sidebar-width: 300px;
    131   --sidebar-min: 230px;
    132   --chat-width: 520px;
    133   --chat-min: 320px;
    134   --people-width: 320px;
    135   --people-min: 260px;
    136   --mod-width: 320px;
    137   --mod-min: 260px;
    138   --app-gap: 10px;
    139   --app-pad: 10px;
    140   --chat-rail-inset: 10px;
    141   --chat-rail-side-max: 88%;
    142   --chat-rail-center-max: 88%;
    143 }
    144 
    145 :root[data-aspect="ultrawide"] {
    146   --sidebar-width: 340px;
    147   --sidebar-min: 260px;
    148   --chat-width: 720px;
    149   --chat-min: 420px;
    150   --people-width: 400px;
    151   --people-min: 340px;
    152   --mod-width: 400px;
    153   --mod-min: 320px;
    154   --chat-rail-side-max: 62%;
    155   --chat-rail-center-max: 66%;
    156 }
    157 
    158 :root[data-viewport="xs"] {
    159   --sidebar-width: 230px;
    160   --sidebar-min: 210px;
    161   --chat-width: 480px;
    162   --chat-min: 300px;
    163   --people-width: 260px;
    164   --people-min: 250px;
    165   --mod-width: 260px;
    166   --mod-min: 250px;
    167   --app-gap: 8px;
    168   --app-pad: 8px;
    169   --chat-rail-inset: 10px;
    170   --chat-rail-side-max: 92%;
    171   --chat-rail-center-max: 92%;
    172 }
    173 
    174 :root[data-viewport="sm"] {
    175   --sidebar-width: 290px;
    176   --sidebar-min: 220px;
    177   --chat-width: 600px;
    178   --chat-min: 340px;
    179   --people-width: 320px;
    180   --people-min: 280px;
    181   --mod-width: 320px;
    182   --mod-min: 260px;
    183   --app-gap: 11px;
    184   --app-pad: 11px;
    185   --chat-rail-side-max: 78%;
    186   --chat-rail-center-max: 82%;
    187 }
    188 
    189 * {
    190   box-sizing: border-box;
    191 }
    192 
    193 body {
    194   margin: 0;
    195   height: 100vh;
    196   font-family: var(--font-body);
    197   font-size: var(--font-size-base);
    198   background: radial-gradient(1200px 800px at 10% 0%, color-mix(in srgb, var(--accent) 18%, transparent), transparent 55%),
    199     radial-gradient(900px 700px at 90% 10%, color-mix(in srgb, var(--accent2) 14%, transparent), transparent 50%), var(--bg);
    200   color: var(--text);
    201 }
    202 
    203 .app * {
    204   -webkit-tap-highlight-color: transparent;
    205 }
    206 
    207 .app {
    208   color-scheme: dark;
    209 }
    210 
    211 .app,
    212 .sidebar,
    213 .main,
    214 .chat,
    215 .moderation,
    216 .feed,
    217 .chatMessages,
    218 .modBody,
    219 .peopleDrawer,
    220 .peopleList,
    221 .modalBody {
    222   scrollbar-gutter: stable;
    223 }
    224 
    225 * {
    226   scrollbar-width: thin;
    227   scrollbar-color: color-mix(in srgb, var(--accent) 28%, transparent) rgba(0, 0, 0, 0);
    228 }
    229 
    230 ::-webkit-scrollbar {
    231   width: 10px;
    232   height: 10px;
    233 }
    234 
    235 ::-webkit-scrollbar-thumb {
    236   background: color-mix(in srgb, var(--accent) 22%, transparent);
    237   border-radius: 999px;
    238   border: 2px solid rgba(0, 0, 0, 0);
    239   background-clip: content-box;
    240 }
    241 
    242 ::-webkit-scrollbar-thumb:hover {
    243   background: color-mix(in srgb, var(--accent) 34%, transparent);
    244   border: 2px solid rgba(0, 0, 0, 0);
    245   background-clip: content-box;
    246 }
    247 
    248 ::-webkit-scrollbar-corner {
    249   background: transparent;
    250 }
    251 
    252 .app ::selection {
    253   background: color-mix(in srgb, var(--accent) 25%, transparent);
    254 }
    255 
    256 .app a {
    257   color: #ffd2ea;
    258   text-decoration: none;
    259 }
    260 
    261 .app a:hover {
    262   text-decoration: underline;
    263 }
    264 
    265 .app a:focus-visible {
    266   outline: none;
    267   box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent), 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent) inset;
    268   border-radius: 10px;
    269 }
    270 
    271 .hidden {
    272   display: none !important;
    273 }
    274 
    275 .small {
    276   font-size: var(--font-size-small);
    277 }
    278 
    279 .muted {
    280   color: var(--muted);
    281 }
    282 
    283 .app {
    284   display: grid;
    285   grid-template-columns: minmax(var(--sidebar-min), var(--sidebar-width)) 10px minmax(var(--chat-min), var(--chat-width)) 10px 1fr;
    286   grid-template-areas: "sidebar sidebarResize chat chatResize main";
    287   gap: 0;
    288   padding: var(--app-pad);
    289   padding-bottom: calc(var(--app-pad) + var(--hotbar-safe-lane));
    290   height: 100vh;
    291   overflow: hidden;
    292   position: relative;
    293 }
    294 
    295 .app.hotbarVisible {
    296   --hotbar-safe-lane: calc(82px + env(safe-area-inset-bottom, 0px));
    297 }
    298 
    299 .app.rackMode {
    300   grid-template-columns: minmax(var(--sidebar-min), var(--sidebar-width)) 10px 1fr 10px minmax(var(--people-min), var(--people-width));
    301   grid-template-areas: "sidebar sidebarResize main mainResize rightRack";
    302 }
    303 
    304 .app.rackMode .peopleToggle {
    305   display: none !important;
    306 }
    307 
    308 .app.rackMode.rightCollapsed,
    309 .app.rackMode.hasMod.rightCollapsed {
    310   grid-template-columns: minmax(var(--sidebar-min), var(--sidebar-width)) 10px 1fr;
    311   grid-template-areas: "sidebar sidebarResize main";
    312 }
    313 
    314 .app.rackMode.rightCollapsed #rightRack {
    315   display: none !important;
    316 }
    317 
    318 .app.rackMode.rightCollapsed .mainResizeHandle {
    319   display: none !important;
    320 }
    321 
    322 .app.sideCollapsed #mainSideRack {
    323   display: none !important;
    324 }
    325 
    326 .app.sideRackEmpty #mainSideRack {
    327   display: none !important;
    328 }
    329 
    330 .sideRackToggle {
    331   position: absolute;
    332   top: 12px;
    333   right: 12px;
    334   z-index: 60;
    335 }
    336 
    337 .app.rackMode.rightCollapsed .sideRackToggle {
    338   right: 64px;
    339 }
    340 
    341 .app.rackMode.sideCollapsed .sideRackToggle {
    342   display: block !important;
    343 }
    344 
    345 .app.rackMode:not(.sideCollapsed) .sideRackToggle {
    346   display: none !important;
    347 }
    348 
    349 .rightRackToggle {
    350   position: absolute;
    351   top: 12px;
    352   right: 12px;
    353   z-index: 70;
    354 }
    355 
    356 .app.rackMode.rightCollapsed .rightRackToggle {
    357   display: block !important;
    358 }
    359 
    360 .app.rackMode:not(.rightCollapsed) .rightRackToggle {
    361   display: none !important;
    362 }
    363 
    364 .pluginPanel .panelBody {
    365   display: flex;
    366   flex-direction: column;
    367   min-height: 0;
    368 }
    369 
    370 .pluginRackPanel .pluginRackBody {
    371   display: flex;
    372   flex-direction: column;
    373   min-height: 0;
    374 }
    375 
    376 .pluginRackToolbar {
    377   display: flex;
    378   align-items: center;
    379   gap: 10px;
    380   padding: 8px 10px;
    381   border-bottom: 1px solid color-mix(in srgb, var(--text) 10%, transparent);
    382 }
    383 
    384 .pluginRackWidgets {
    385   flex: 1;
    386   min-height: 0;
    387   overflow: auto;
    388   display: flex;
    389   flex-direction: column;
    390   gap: var(--app-gap);
    391   padding: 10px;
    392 }
    393 
    394 .pluginRackWidgets > .rackPanel {
    395   flex: 0 0 auto;
    396   min-height: 0;
    397 }
    398 
    399 .app.rackMode.hasMod {
    400   /* In rack mode, mod is just another panel inside the right rack. */
    401   grid-template-columns: minmax(var(--sidebar-min), var(--sidebar-width)) 10px 1fr 10px minmax(var(--people-min), var(--people-width));
    402   grid-template-areas: "sidebar sidebarResize main mainResize rightRack";
    403 }
    404 
    405 .app.hasMod {
    406   grid-template-columns: minmax(var(--sidebar-min), var(--sidebar-width)) 10px minmax(var(--chat-min), var(--chat-width)) 10px 1fr 10px minmax(var(--mod-min), var(--mod-width));
    407   grid-template-areas: "sidebar sidebarResize chat chatResize main mainResize moderation";
    408 }
    409 
    410 .app.chatRight {
    411   grid-template-columns: minmax(var(--sidebar-min), var(--sidebar-width)) 10px 1fr 10px minmax(var(--chat-min), var(--chat-width));
    412   grid-template-areas: "sidebar sidebarResize main chatResize chat";
    413 }
    414 
    415 .app.hasMod.chatRight {
    416   grid-template-columns: minmax(var(--sidebar-min), var(--sidebar-width)) 10px 1fr 10px minmax(var(--chat-min), var(--chat-width)) 10px minmax(var(--mod-min), var(--mod-width));
    417   grid-template-areas: "sidebar sidebarResize main chatResize chat mainResize moderation";
    418 }
    419 
    420 .app.rackMode.chatRight,
    421 .app.rackMode.hasMod.chatRight {
    422   grid-template-columns: minmax(var(--sidebar-min), var(--sidebar-width)) 10px 1fr 10px minmax(var(--people-min), var(--people-width));
    423   grid-template-areas: "sidebar sidebarResize main mainResize rightRack";
    424 }
    425 
    426 @media (hover: none) and (pointer: coarse) and (max-width: 900px), (hover: none) and (pointer: coarse) and (max-height: 520px) {
    427   .app {
    428     grid-template-columns: 300px 1fr;
    429     grid-template-rows: 1fr auto;
    430     grid-template-areas:
    431       "sidebar main"
    432       "chat chat";
    433     gap: var(--app-gap);
    434   }
    435   .app.hasMod {
    436     grid-template-columns: 300px 1fr;
    437     grid-template-rows: 1fr 45vh;
    438     grid-template-areas:
    439       "sidebar main"
    440       "chat moderation";
    441   }
    442   .chat {
    443     height: 45vh;
    444   }
    445   .moderation {
    446     height: 45vh;
    447   }
    448   .panelResizeHandle,
    449   .peopleResizeHandle {
    450     display: none;
    451   }
    452 
    453   .mainRack {
    454     flex-direction: column;
    455   }
    456   .sideRack {
    457     flex: 0 0 auto;
    458     min-width: 0;
    459     max-width: none;
    460   }
    461 }
    462 
    463 @media (max-width: 760px), (hover: none) and (pointer: coarse) and (max-width: 900px), (hover: none) and (pointer: coarse) and (max-height: 520px) {
    464   .app.sidebarHidden {
    465     grid-template-columns: 1fr;
    466     grid-template-rows: 1fr auto;
    467     grid-template-areas:
    468       "main"
    469       "chat";
    470   }
    471 }
    472 
    473 .sidebar,
    474 .main,
    475 .chat,
    476 .moderation,
    477 .panelResizeHandle {
    478   min-width: 0;
    479   min-height: 0;
    480 }
    481 
    482 .sidebar {
    483   grid-area: sidebar;
    484   display: flex;
    485   flex-direction: column;
    486   gap: 0;
    487   overflow: hidden;
    488 }
    489 
    490 .rightRack {
    491   grid-area: rightRack;
    492   min-width: 0;
    493   min-height: 0;
    494   display: flex;
    495   flex-direction: column;
    496   gap: var(--app-gap);
    497   overflow: hidden;
    498 }
    499 
    500 .rightRack .rackPanel {
    501   flex: 1;
    502   min-height: 0;
    503 }
    504 
    505 .sideRack .rackPanel {
    506   flex: 1;
    507   min-height: 0;
    508 }
    509 
    510 .rightRack .rackPanel.panelCollapsed,
    511 .sideRack .rackPanel.panelCollapsed {
    512   flex: 0 0 auto;
    513 }
    514 
    515 .rightRack .rackPanel > .panelBody,
    516 .rightRack .rackPanel > .panelFill,
    517 .rightRack .rackPanel .panelBody,
    518 .sideRack .rackPanel > .panelBody,
    519 .sideRack .rackPanel > .panelFill,
    520 .sideRack .rackPanel .panelBody {
    521   min-height: 0;
    522 }
    523 
    524 .panel.panelCollapsed {
    525   overflow: hidden;
    526 }
    527 
    528 .panel.panelCollapsed > :not(.panelHeader) {
    529   display: none !important;
    530 }
    531 
    532 .rackDragHandle {
    533   cursor: grab;
    534   user-select: none;
    535 }
    536 
    537 .rackDragHandle:active {
    538   cursor: grabbing;
    539 }
    540 
    541 .rackDragging {
    542   opacity: 0.86;
    543   box-shadow: 0 26px 90px rgba(0, 0, 0, 0.65);
    544 }
    545 
    546 .rackPlaceholder {
    547   border: 1px dashed color-mix(in srgb, var(--accent) 40%, transparent);
    548   border-radius: 18px;
    549   background: color-mix(in srgb, var(--accent) 10%, transparent);
    550 }
    551 
    552 .app.rackMode .panelHeader {
    553   /* Slightly stronger header affordance in rack mode */
    554   background: linear-gradient(180deg, color-mix(in srgb, var(--text) 5%, transparent), transparent);
    555 }
    556 
    557 .app.rackMode .chat,
    558 .app.rackMode .moderation,
    559 .app.rackMode .peopleDrawer {
    560   position: static;
    561   grid-area: unset !important;
    562   height: auto;
    563   min-height: 0;
    564 }
    565 
    566 .app.rackMode .chatResizeHandle,
    567 .app.rackMode .peopleResizeHandle {
    568   display: none !important;
    569 }
    570 
    571 .app.rackMode .peopleDrawer {
    572   display: flex;
    573   flex-direction: column;
    574   overflow: hidden;
    575   border: 1px solid var(--line);
    576   border-radius: 18px;
    577   background: linear-gradient(180deg, color-mix(in srgb, var(--panel) 96%, transparent), color-mix(in srgb, var(--panel) 90%, transparent));
    578   box-shadow: var(--shadow-panel);
    579 }
    580 
    581 .dockHotbar {
    582   position: fixed;
    583   left: 50%;
    584   bottom: 10px;
    585   transform: translateX(-50%) translateY(28px);
    586   opacity: 0;
    587   pointer-events: none;
    588   z-index: 60;
    589   display: flex;
    590   gap: 12px;
    591   padding: 10px 12px;
    592   max-width: calc(100vw - 24px);
    593   overflow-x: auto;
    594   overscroll-behavior: contain;
    595   border-radius: 999px;
    596   border: 1px solid color-mix(in srgb, var(--text) 12%, transparent);
    597   background: color-mix(in srgb, var(--panel) 92%, transparent);
    598   box-shadow: 0 16px 50px rgba(0, 0, 0, 0.45);
    599   transition: transform var(--dur-med) var(--ease-out), opacity var(--dur-med) var(--ease-out);
    600 }
    601 
    602 .dockHotbar.show {
    603   transform: translateX(-50%) translateY(0);
    604   opacity: 1;
    605   pointer-events: auto;
    606 }
    607 
    608 .dockHotbar.dockTarget {
    609   border-color: color-mix(in srgb, var(--accent) 45%, transparent);
    610   box-shadow: 0 22px 70px rgba(0, 0, 0, 0.6), 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent);
    611 }
    612 
    613 .dockOrb.dragging {
    614   opacity: 0.6;
    615 }
    616 
    617 .dockOrb {
    618   display: inline-flex;
    619   align-items: center;
    620   gap: 9px;
    621   flex: 0 0 auto;
    622   max-width: 220px;
    623   min-height: 38px;
    624   padding: 8px 13px;
    625   border-radius: 999px;
    626   border: 1px solid var(--line);
    627   background: color-mix(in srgb, var(--text) 6%, transparent);
    628   color: var(--text);
    629   cursor: grab;
    630   user-select: none;
    631   font-size: 13px;
    632   font-weight: 600;
    633   white-space: nowrap;
    634 }
    635 
    636 .dockOrb:hover {
    637   background: color-mix(in srgb, var(--accent) 14%, transparent);
    638   border-color: color-mix(in srgb, var(--accent) 25%, transparent);
    639 }
    640 
    641 .dockOrb:active {
    642   cursor: grabbing;
    643 }
    644 
    645 .dockOrb .dockOrbIcon {
    646   width: 22px;
    647   height: 22px;
    648   border-radius: 6px;
    649   display: inline-flex;
    650   align-items: center;
    651   justify-content: center;
    652   background: color-mix(in srgb, var(--accent) 22%, transparent);
    653 }
    654 
    655 .hotbarHint {
    656   display: inline-flex;
    657   align-items: center;
    658   gap: 7px;
    659   flex: 0 0 auto;
    660   min-height: 38px;
    661   padding: 8px 12px;
    662   border-radius: 999px;
    663   border: 1px dashed color-mix(in srgb, var(--text) 22%, transparent);
    664   background: color-mix(in srgb, var(--text) 4%, transparent);
    665   color: color-mix(in srgb, var(--text) 82%, transparent);
    666   font-size: 12px;
    667   white-space: nowrap;
    668 }
    669 
    670 .hotbarHintGrip {
    671   font-weight: 700;
    672   opacity: 0.9;
    673 }
    674 
    675 .hotbarHintSep {
    676   opacity: 0.66;
    677 }
    678 
    679 .hotbarAddMenu {
    680   position: fixed;
    681   z-index: 90;
    682   width: 260px;
    683   max-height: min(320px, 70vh);
    684   overflow: hidden;
    685   border: 1px solid rgba(246, 240, 255, 0.16);
    686   border-radius: 14px;
    687   background: rgba(8, 8, 16, 0.92);
    688   backdrop-filter: blur(12px);
    689   box-shadow: 0 16px 60px rgba(0, 0, 0, 0.45);
    690   animation: popFloat var(--dur-med) var(--ease-out) both;
    691 }
    692 
    693 .hotbarAddMenuList {
    694   overflow: auto;
    695   padding: 6px;
    696   display: flex;
    697   flex-direction: column;
    698   gap: 6px;
    699 }
    700 
    701 .dockOrbPlus .dockOrbIcon {
    702   background: color-mix(in srgb, var(--accent) 30%, transparent);
    703 }
    704 
    705 .sidebarScroll {
    706   flex: 1;
    707   min-height: 0;
    708   overflow: auto;
    709   padding-right: 4px;
    710   display: flex;
    711   flex-direction: column;
    712   gap: 12px;
    713 }
    714 
    715 .sidebarFooter {
    716   flex: 0 0 auto;
    717   display: flex;
    718   align-items: flex-end;
    719   justify-content: space-between;
    720   gap: 10px;
    721   padding: 12px 14px 14px;
    722   border-top: 1px solid var(--line);
    723   background: linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.22));
    724 }
    725 
    726 .poweredByTile {
    727   text-decoration: none;
    728   color: inherit;
    729   width: 220px;
    730   height: 84px;
    731   border-radius: 16px;
    732   border: 1px solid rgba(246, 240, 255, 0.14);
    733   background: linear-gradient(180deg, rgba(255, 62, 165, 0.10), rgba(184, 75, 255, 0.06) 55%), rgba(255, 255, 255, 0.02);
    734   box-shadow: 0 14px 46px rgba(0, 0, 0, 0.32);
    735   padding: 10px 12px;
    736   display: flex;
    737   flex-direction: row;
    738   align-items: center;
    739   justify-content: flex-start;
    740   gap: 12px;
    741   transition: transform 120ms ease, box-shadow 120ms ease, border-color 120ms ease;
    742 }
    743 
    744 a.poweredByTile:hover {
    745   transform: translateY(-1px);
    746   border-color: rgba(246, 240, 255, 0.24);
    747   box-shadow: 0 18px 52px rgba(0, 0, 0, 0.36);
    748 }
    749 
    750 .poweredByLogo {
    751   width: 56px;
    752   height: 56px;
    753   object-fit: contain;
    754   border-radius: 14px;
    755   filter: drop-shadow(0 10px 18px rgba(0, 0, 0, 0.42));
    756 }
    757 
    758 .poweredByText {
    759   display: flex;
    760   flex-direction: column;
    761   gap: 2px;
    762   min-width: 0;
    763 }
    764 
    765 .poweredByTitle {
    766   font-weight: 900;
    767   font-size: 13px;
    768   letter-spacing: 0.2px;
    769   line-height: 1.1;
    770 }
    771 
    772 .poweredByByline {
    773   font-size: 10px;
    774   color: rgba(246, 240, 255, 0.62);
    775   line-height: 1.1;
    776 }
    777 
    778 .poweredByVersion {
    779   font-size: 10px;
    780   color: rgba(246, 240, 255, 0.82);
    781   line-height: 1.1;
    782 }
    783 
    784 .appearanceWorkbench {
    785   margin-top: 12px;
    786   padding: 10px;
    787   border: 1px solid var(--line);
    788   border-radius: 12px;
    789   background: color-mix(in srgb, var(--panel2) 80%, transparent);
    790   display: flex;
    791   flex-direction: column;
    792   gap: 10px;
    793 }
    794 
    795 .appearanceWorkbenchHeader {
    796   display: flex;
    797   align-items: baseline;
    798   justify-content: space-between;
    799   gap: 10px;
    800 }
    801 
    802 .appearanceWorkbenchRow {
    803   display: flex;
    804   gap: 10px;
    805   flex-wrap: wrap;
    806 }
    807 
    808 .appearanceColorGrid {
    809   display: grid;
    810   gap: 10px;
    811   grid-template-columns: repeat(3, minmax(0, 1fr));
    812 }
    813 
    814 .appearanceWorkbenchActions {
    815   display: flex;
    816   gap: 8px;
    817   flex-wrap: wrap;
    818 }
    819 
    820 @media (max-width: 980px) {
    821   .appearanceColorGrid {
    822     grid-template-columns: repeat(2, minmax(0, 1fr));
    823   }
    824 }
    825 
    826 .main {
    827   grid-area: main;
    828   display: flex;
    829   flex-direction: column;
    830   gap: var(--app-gap);
    831   overflow: hidden;
    832 }
    833 
    834 .mainRack {
    835   flex: 1;
    836   min-height: 0;
    837   display: flex;
    838   flex-direction: row;
    839   gap: var(--app-gap);
    840   overflow: hidden;
    841 }
    842 
    843 .workspaceRack {
    844   flex: 1;
    845   min-width: 0;
    846   min-height: 0;
    847   display: flex;
    848   flex-direction: column;
    849   gap: var(--app-gap);
    850   overflow: hidden;
    851 }
    852 
    853 .app.rackMode.workspaceInfinite .workspaceRack {
    854   display: flex;
    855   flex-direction: row;
    856   align-items: stretch;
    857   gap: var(--app-gap);
    858   overflow-x: auto;
    859   overflow-y: hidden;
    860   scroll-snap-type: x mandatory;
    861   scroll-behavior: smooth;
    862   padding-bottom: 2px;
    863 }
    864 
    865 .app.rackMode.workspaceInfinite .workspaceRack > .rackPanel {
    866   flex: 0 0 min(640px, 74vw);
    867   min-width: 280px;
    868   max-width: min(96vw, 1120px);
    869   min-height: 0;
    870   scroll-snap-align: start;
    871 }
    872 
    873 .app.rackMode.workspaceInfinite .workspaceRack > .rackPanel.workspaceSizeSkinny {
    874   flex-basis: min(360px, 42vw);
    875 }
    876 
    877 .app.rackMode.workspaceInfinite .workspaceRack > .rackPanel.workspaceSizeHalf {
    878   flex-basis: min(680px, 74vw);
    879 }
    880 
    881 .app.rackMode.workspaceInfinite .workspaceRack > .rackPanel.workspaceSizeFull {
    882   flex-basis: min(1040px, 92vw);
    883 }
    884 
    885 .app.rackMode .workspaceRack > .rackPanel.workspaceArrivalGlow {
    886   animation: workspaceArrivalGlow 780ms ease-out;
    887 }
    888 
    889 .app.rackMode.workspaceInfinite .workspaceRack > .workspaceMinSpacer {
    890   flex: 0 0 auto;
    891   width: 0;
    892   min-width: 0;
    893   pointer-events: none;
    894 }
    895 
    896 .app.rackMode.workspaceInfinite .workspaceSlot {
    897   display: none !important;
    898 }
    899 
    900 .app.rackMode.workspaceInfinite .sideRack {
    901   display: none !important;
    902 }
    903 
    904 .app.rackMode.workspaceInfinite .rightRack {
    905   display: flex;
    906 }
    907 
    908 .panelSizeControls {
    909   display: inline-flex;
    910   align-items: center;
    911   gap: 3px;
    912   padding: 1px;
    913   border-radius: 999px;
    914   border: 1px solid color-mix(in srgb, var(--text) 12%, transparent);
    915   background: color-mix(in srgb, var(--text) 5%, transparent);
    916 }
    917 
    918 .panelSizeBtn {
    919   min-width: 24px;
    920   padding: 4px 7px;
    921   font-size: 11px;
    922   line-height: 1;
    923 }
    924 
    925 .panelSizeBtn.isActive {
    926   border-color: color-mix(in srgb, var(--accent) 30%, transparent);
    927   background: color-mix(in srgb, var(--accent) 22%, transparent);
    928   color: var(--text);
    929 }
    930 
    931 /* Workspace 4x2 grid (rack mode) */
    932 .app.rackMode .workspaceRack {
    933   display: grid;
    934   grid-template-columns: repeat(4, minmax(0, 1fr));
    935   grid-template-rows: repeat(2, minmax(0, 1fr));
    936   gap: var(--app-gap);
    937 }
    938 
    939 .workspaceSlot {
    940   min-width: 0;
    941   min-height: 0;
    942   display: flex;
    943   flex-direction: column;
    944   overflow: hidden;
    945 }
    946 
    947 .workspaceSlot.workspaceSlotEmpty {
    948   border: 1px dashed color-mix(in srgb, var(--text) 16%, transparent);
    949   border-radius: 14px;
    950   background: color-mix(in srgb, var(--panel) 88%, transparent);
    951   align-items: center;
    952   justify-content: center;
    953 }
    954 
    955 .workspaceEmptyAdd {
    956   display: inline-flex;
    957   align-items: center;
    958   gap: 8px;
    959   border-radius: 999px;
    960   padding: 10px 14px;
    961   border: 1px dashed color-mix(in srgb, var(--accent) 30%, transparent);
    962   background: color-mix(in srgb, var(--accent) 10%, transparent);
    963 }
    964 
    965 .workspaceEmptyAddPlus {
    966   width: 20px;
    967   height: 20px;
    968   border-radius: 999px;
    969   display: inline-flex;
    970   align-items: center;
    971   justify-content: center;
    972   background: color-mix(in srgb, var(--accent) 24%, transparent);
    973   font-weight: 900;
    974 }
    975 
    976 .workspaceSlot > .rackPanel {
    977   flex: 1;
    978   min-height: 0;
    979 }
    980 
    981 .workspaceSlot > .rackPanel > .panelBody,
    982 .workspaceSlot > .rackPanel > .panelFill,
    983 .workspaceSlot > .rackPanel .panelBody {
    984   min-height: 0;
    985 }
    986 
    987 .workspaceSlotLeft {
    988   grid-column: 1 / span 2;
    989   grid-row: 1 / span 2;
    990 }
    991 
    992 .workspaceSlotRight {
    993   grid-column: 3 / span 2;
    994   grid-row: 1 / span 2;
    995 }
    996 
    997 .app.rackMode.workspaceExpandedLeft #workspaceLeftSlot,
    998 .app.rackMode.workspaceExpandedRight #workspaceRightSlot {
    999   grid-column: 1 / span 4;
   1000 }
   1001 
   1002 .app.rackMode.workspaceExpandedLeft #workspaceRightSlot,
   1003 .app.rackMode.workspaceExpandedRight #workspaceLeftSlot {
   1004   display: none;
   1005 }
   1006 
   1007 .app.rackMode:not(.rackIsDragging).workspaceSingleLeft #workspaceLeftSlot {
   1008   grid-column: 1 / span 4;
   1009 }
   1010 
   1011 .app.rackMode:not(.rackIsDragging).workspaceSingleLeft #workspaceRightSlot {
   1012   display: none;
   1013 }
   1014 
   1015 .app.rackMode:not(.rackIsDragging).workspaceSingleRight #workspaceRightSlot {
   1016   grid-column: 1 / span 4;
   1017 }
   1018 
   1019 .app.rackMode:not(.rackIsDragging).workspaceSingleRight #workspaceLeftSlot {
   1020   display: none;
   1021 }
   1022 
   1023 .app:not(.rackMode) .workspaceSlot {
   1024   display: none;
   1025 }
   1026 
   1027 .sideRack {
   1028   flex: 0 0 min(380px, 30vw);
   1029   min-width: 260px;
   1030   max-width: 420px;
   1031   min-height: 0;
   1032   display: flex;
   1033   flex-direction: column;
   1034   gap: var(--app-gap);
   1035   overflow: hidden;
   1036 }
   1037 
   1038 .chat {
   1039   grid-area: chat;
   1040   display: flex;
   1041   flex-direction: column;
   1042   gap: 0;
   1043   overflow: hidden;
   1044   background: linear-gradient(180deg, rgba(255, 62, 165, 0.06), transparent 40%), var(--panel);
   1045   border: 1px solid var(--line);
   1046   border-radius: 16px;
   1047   box-shadow: var(--shadow-soft);
   1048 }
   1049 
   1050 .moderation {
   1051   grid-area: moderation;
   1052   display: flex;
   1053   flex-direction: column;
   1054   gap: 10px;
   1055   overflow: hidden;
   1056   background: linear-gradient(180deg, rgba(255, 62, 165, 0.06), transparent 40%), var(--panel);
   1057   border: 1px solid var(--line);
   1058   border-radius: 16px;
   1059   padding: 10px;
   1060   box-shadow: var(--shadow-soft);
   1061 }
   1062 
   1063 .panelResizeHandle {
   1064   grid-area: chatResize;
   1065   display: block;
   1066   position: relative;
   1067   z-index: 3;
   1068   border-radius: 999px;
   1069   background: linear-gradient(180deg, rgba(255, 62, 165, 0.24), rgba(255, 255, 255, 0.12));
   1070   border: 1px solid rgba(246, 240, 255, 0.26);
   1071   box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.25) inset;
   1072   cursor: col-resize;
   1073   align-self: stretch;
   1074 }
   1075 
   1076 .panelResizeHandle:hover {
   1077   background: linear-gradient(180deg, rgba(255, 62, 165, 0.35), rgba(255, 255, 255, 0.16));
   1078 }
   1079 
   1080 .panelResizeHandle::before {
   1081   content: "";
   1082   position: absolute;
   1083   left: 50%;
   1084   top: 50%;
   1085   width: 2px;
   1086   height: 34px;
   1087   transform: translate(-50%, -50%);
   1088   border-radius: 999px;
   1089   background: rgba(246, 240, 255, 0.55);
   1090 }
   1091 
   1092 .sidebarResizeHandle {
   1093   grid-area: sidebarResize;
   1094 }
   1095 
   1096 .chatResizeHandle {
   1097   grid-area: chatResize;
   1098 }
   1099 
   1100 .mainResizeHandle {
   1101   grid-area: mainResize;
   1102 }
   1103 
   1104 .app.sidebarHidden .sidebarResizeHandle,
   1105 .app:not(.hasMod) .mainResizeHandle {
   1106   display: none;
   1107 }
   1108 
   1109 .app.isResizing {
   1110   user-select: none;
   1111   cursor: col-resize;
   1112 }
   1113 
   1114 .app.isDocking {
   1115   user-select: none;
   1116 }
   1117 
   1118 .chat .panelHeader {
   1119   cursor: grab;
   1120 }
   1121 
   1122 .app.isDocking .chat .panelHeader {
   1123   cursor: grabbing;
   1124 }
   1125 
   1126 .moderation .panelHeader,
   1127 .moderation .modTabs,
   1128 .moderation .modFilters {
   1129   flex: 0 0 auto;
   1130 }
   1131 
   1132 .brand {
   1133   padding: 14px 14px 0;
   1134 }
   1135 
   1136 .smallBtn {
   1137   padding: 6px 10px;
   1138   border-radius: 999px;
   1139   white-space: nowrap;
   1140   line-height: 1;
   1141 }
   1142 
   1143 .mapChatToggle {
   1144   display: inline-flex;
   1145   gap: 6px;
   1146   margin-left: 6px;
   1147   vertical-align: middle;
   1148 }
   1149 
   1150 .sidebarToggle {
   1151   position: fixed;
   1152   bottom: calc(12px + env(safe-area-inset-bottom, 0px));
   1153   left: 12px;
   1154   top: auto;
   1155   z-index: 20;
   1156 }
   1157 
   1158 .peopleToggle {
   1159   position: absolute;
   1160   top: 12px;
   1161   right: 12px;
   1162   z-index: 70;
   1163 }
   1164 
   1165 .app.sidebarHidden {
   1166   grid-template-columns: minmax(var(--chat-min), var(--chat-width)) 10px 1fr;
   1167   grid-template-areas: "chat chatResize main";
   1168 }
   1169 
   1170 .app.sidebarHidden.hasMod {
   1171   grid-template-columns: minmax(var(--chat-min), var(--chat-width)) 10px 1fr 10px minmax(var(--mod-min), var(--mod-width));
   1172   grid-template-areas: "chat chatResize main mainResize moderation";
   1173 }
   1174 
   1175 .app.rackMode.sidebarHidden,
   1176 .app.rackMode.hasMod.sidebarHidden {
   1177   grid-template-columns: 1fr 10px minmax(var(--people-min), var(--people-width));
   1178   grid-template-areas: "main mainResize rightRack";
   1179 }
   1180 
   1181 .app.rackMode.sidebarHidden.rightCollapsed,
   1182 .app.rackMode.hasMod.sidebarHidden.rightCollapsed {
   1183   grid-template-columns: 1fr;
   1184   grid-template-areas: "main";
   1185 }
   1186 
   1187 .peopleDrawer {
   1188   position: fixed;
   1189   top: 12px;
   1190   right: 12px;
   1191   bottom: 12px;
   1192   width: min(var(--people-width), calc(100vw - 24px));
   1193   z-index: 75;
   1194   display: flex;
   1195   flex-direction: column;
   1196   gap: 10px;
   1197   border: 1px solid var(--line);
   1198   border-radius: 16px;
   1199   background: linear-gradient(180deg, rgba(255, 62, 165, 0.06), transparent 40%), var(--panel);
   1200   box-shadow: var(--shadow-panel);
   1201   overflow: hidden;
   1202 }
   1203 
   1204 .peopleResizeHandle {
   1205   position: absolute;
   1206   left: 0;
   1207   top: 0;
   1208   bottom: 0;
   1209   width: 10px;
   1210   z-index: 3;
   1211   cursor: col-resize;
   1212   border-right: 1px solid rgba(246, 240, 255, 0.26);
   1213   background: linear-gradient(180deg, rgba(255, 62, 165, 0.24), rgba(255, 255, 255, 0.12));
   1214 }
   1215 
   1216 .peopleResizeHandle:hover {
   1217   background: linear-gradient(180deg, rgba(255, 62, 165, 0.35), rgba(255, 255, 255, 0.16));
   1218 }
   1219 
   1220 .peopleResizeHandle::before {
   1221   content: "";
   1222   position: absolute;
   1223   left: 50%;
   1224   top: 50%;
   1225   width: 2px;
   1226   height: 36px;
   1227   transform: translate(-50%, -50%);
   1228   border-radius: 999px;
   1229   background: rgba(246, 240, 255, 0.55);
   1230 }
   1231 
   1232 .peopleDrawer:not(.hidden) {
   1233   animation: drawerIn var(--dur-slow) var(--ease-out) both;
   1234 }
   1235 
   1236 .modal {
   1237   position: fixed;
   1238   inset: 0;
   1239   z-index: 120;
   1240   display: grid;
   1241   place-items: center;
   1242   padding: 16px;
   1243 }
   1244 
   1245 .modal:not(.hidden) .modalBackdrop {
   1246   animation: fadeIn var(--dur-slow) var(--ease-out) both;
   1247 }
   1248 
   1249 .modal:not(.hidden) .modalCard {
   1250   animation: modalIn var(--dur-slow) var(--ease-out) both;
   1251 }
   1252 
   1253 .modalBackdrop {
   1254   position: absolute;
   1255   inset: 0;
   1256   background: rgba(0, 0, 0, 0.55);
   1257   backdrop-filter: blur(6px);
   1258 }
   1259 
   1260 .modalCard {
   1261   position: relative;
   1262   width: min(920px, calc(100vw - 24px));
   1263   max-height: calc(100vh - 24px);
   1264   overflow: hidden;
   1265   display: flex;
   1266   flex-direction: column;
   1267   z-index: 1;
   1268 }
   1269 
   1270 .modalBody {
   1271   padding: 12px;
   1272   overflow: auto;
   1273   display: flex;
   1274   flex-direction: column;
   1275   gap: 10px;
   1276   min-height: 0;
   1277 }
   1278 
   1279 .editModalEditor {
   1280   min-height: 180px;
   1281   max-height: 45vh;
   1282   overflow: auto;
   1283 }
   1284 
   1285 .modalActions {
   1286   justify-content: flex-end;
   1287 }
   1288 
   1289 .shortcutHelpBody {
   1290   display: flex;
   1291   flex-direction: column;
   1292   gap: 10px;
   1293 }
   1294 
   1295 .editMetaGrid {
   1296   display: grid;
   1297   grid-template-columns: 1fr 1fr;
   1298   gap: 10px;
   1299 }
   1300 
   1301 .checkRow {
   1302   display: flex;
   1303   align-items: center;
   1304   justify-content: space-between;
   1305   gap: 10px;
   1306   padding: 10px 12px;
   1307   border: 1px solid var(--line);
   1308   border-radius: 14px;
   1309   background: rgba(255, 255, 255, 0.02);
   1310 }
   1311 
   1312 .checkRow input[type="checkbox"] {
   1313   width: 18px;
   1314   height: 18px;
   1315 }
   1316 
   1317 .roleRow {
   1318   display: flex;
   1319   align-items: center;
   1320   justify-content: space-between;
   1321   gap: 10px;
   1322   padding: 8px 10px;
   1323   border: 1px solid var(--line);
   1324   border-radius: 14px;
   1325   background: rgba(255, 255, 255, 0.02);
   1326 }
   1327 
   1328 .roleRowLeft {
   1329   display: flex;
   1330   align-items: center;
   1331   gap: 10px;
   1332   min-width: 0;
   1333 }
   1334 
   1335 .roleSwatch {
   1336   width: 12px;
   1337   height: 12px;
   1338   border-radius: 999px;
   1339   border: 1px solid rgba(255, 255, 255, 0.18);
   1340   flex: 0 0 auto;
   1341 }
   1342 
   1343 .roleMeta {
   1344   display: flex;
   1345   flex-direction: column;
   1346   min-width: 0;
   1347 }
   1348 
   1349 .roleKey {
   1350   font-size: 12px;
   1351   opacity: 0.75;
   1352 }
   1353 
   1354 .roleCreateRow {
   1355   display: grid;
   1356   grid-template-columns: 1fr 1fr 120px auto;
   1357   gap: 8px;
   1358   align-items: end;
   1359 }
   1360 
   1361 .roleCreateRow input[type="color"] {
   1362   height: 40px;
   1363   width: 100%;
   1364   padding: 0;
   1365   border: 1px solid var(--line);
   1366   border-radius: 12px;
   1367   background: transparent;
   1368 }
   1369 
   1370 .gateList {
   1371   display: flex;
   1372   flex-direction: column;
   1373   gap: 8px;
   1374 }
   1375 
   1376 .gateOption {
   1377   display: flex;
   1378   align-items: center;
   1379   justify-content: space-between;
   1380   gap: 10px;
   1381   padding: 10px 12px;
   1382   border: 1px solid var(--line);
   1383   border-radius: 14px;
   1384   background: rgba(255, 255, 255, 0.02);
   1385 }
   1386 
   1387 .gateOptionLeft {
   1388   display: flex;
   1389   align-items: center;
   1390   gap: 10px;
   1391 }
   1392 
   1393 @media (max-width: 900px) {
   1394   .modal {
   1395     padding: 0;
   1396   }
   1397   .modalCard {
   1398     width: 100%;
   1399     height: 100%;
   1400     border-radius: 0;
   1401   }
   1402   .editModalEditor {
   1403     max-height: none;
   1404     flex: 1;
   1405   }
   1406   .editMetaGrid {
   1407     grid-template-columns: 1fr;
   1408   }
   1409   .roleCreateRow {
   1410     grid-template-columns: 1fr;
   1411   }
   1412 }
   1413 
   1414 .peopleTabs {
   1415   display: flex;
   1416   gap: 8px;
   1417   padding: 0 10px;
   1418 }
   1419 
   1420 .peopleTabs button {
   1421   flex: 1;
   1422   padding: 8px 10px;
   1423 }
   1424 
   1425 .peopleFilters {
   1426   padding: 0 10px;
   1427 }
   1428 
   1429 .peopleList {
   1430   padding: 10px;
   1431   overflow: auto;
   1432   min-height: 0;
   1433   flex: 1;
   1434   display: flex;
   1435   flex-direction: column;
   1436   gap: 8px;
   1437 }
   1438 
   1439 #peopleMembersView {
   1440   display: flex;
   1441   flex-direction: column;
   1442   min-height: 0;
   1443   flex: 1;
   1444 }
   1445 
   1446 .peopleCard {
   1447   border: 1px solid rgba(246, 240, 255, 0.14);
   1448   border-radius: 12px;
   1449   padding: 8px;
   1450   background: rgba(255, 255, 255, 0.02);
   1451   display: flex;
   1452   flex-direction: column;
   1453   gap: 4px;
   1454   transition: border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
   1455   cursor: pointer;
   1456 }
   1457 
   1458 .peopleCard:hover {
   1459   border-color: rgba(246, 240, 255, 0.22);
   1460   background: rgba(255, 255, 255, 0.03);
   1461   box-shadow: 0 12px 34px rgba(0, 0, 0, 0.25);
   1462 }
   1463 
   1464 .peopleCard:active {
   1465   transform: scale(0.99);
   1466 }
   1467 
   1468 .peopleCard:focus-visible {
   1469   outline: none;
   1470   box-shadow: 0 0 0 4px rgba(255, 62, 165, 0.12), 0 12px 34px rgba(0, 0, 0, 0.22);
   1471   border-color: rgba(255, 62, 165, 0.28);
   1472 }
   1473 
   1474 .peopleCardActions {
   1475   display: flex;
   1476   justify-content: flex-end;
   1477 }
   1478 
   1479 .peopleCardTop {
   1480   display: flex;
   1481   justify-content: space-between;
   1482   gap: 8px;
   1483   align-items: center;
   1484 }
   1485 
   1486 .peopleStatus {
   1487   font-size: 11px;
   1488   color: var(--muted);
   1489 }
   1490 
   1491 .peopleDms {
   1492   padding: 12px;
   1493 }
   1494 
   1495 .dmHeader {
   1496   display: flex;
   1497   flex-direction: column;
   1498   gap: 10px;
   1499   margin-bottom: 10px;
   1500 }
   1501 
   1502 .dmNewRow {
   1503   display: flex;
   1504   gap: 8px;
   1505   align-items: center;
   1506 }
   1507 
   1508 .dmToSelect {
   1509   flex: 1;
   1510   height: 34px;
   1511   padding: 6px 10px;
   1512   border-radius: 10px;
   1513 }
   1514 
   1515 .dmThreadList {
   1516   display: flex;
   1517   flex-direction: column;
   1518   gap: 10px;
   1519 }
   1520 
   1521 .dmThreadCard {
   1522   border: 1px solid rgba(246, 240, 255, 0.14);
   1523   border-radius: 12px;
   1524   padding: 10px;
   1525   background: rgba(255, 255, 255, 0.02);
   1526   display: flex;
   1527   flex-direction: column;
   1528   gap: 6px;
   1529 }
   1530 
   1531 .dmThreadTop {
   1532   display: flex;
   1533   justify-content: space-between;
   1534   gap: 10px;
   1535   align-items: center;
   1536 }
   1537 
   1538 .dmThreadLeft {
   1539   display: flex;
   1540   gap: 8px;
   1541   align-items: center;
   1542   flex-wrap: wrap;
   1543 }
   1544 
   1545 .dmTag {
   1546   font-size: 11px;
   1547   padding: 4px 10px;
   1548   border-radius: 999px;
   1549   border: 1px solid rgba(246, 240, 255, 0.16);
   1550   background: rgba(255, 255, 255, 0.03);
   1551 }
   1552 
   1553 .dmTagIncoming {
   1554   border-color: rgba(61, 220, 151, 0.28);
   1555   background: rgba(61, 220, 151, 0.10);
   1556   color: #c7ffe7;
   1557 }
   1558 
   1559 .dmTagActive {
   1560   border-color: rgba(255, 62, 165, 0.30);
   1561   background: rgba(255, 62, 165, 0.10);
   1562   color: #ffd2ea;
   1563 }
   1564 
   1565 .dmTagPending {
   1566   border-color: rgba(246, 240, 255, 0.16);
   1567   background: rgba(255, 255, 255, 0.03);
   1568   color: var(--muted);
   1569 }
   1570 
   1571 .dmTagDeclined {
   1572   border-color: rgba(255, 77, 138, 0.24);
   1573   background: rgba(255, 77, 138, 0.08);
   1574   color: #ffd2e2;
   1575 }
   1576 
   1577 .profileActions {
   1578   margin-left: auto;
   1579   display: flex;
   1580   align-items: center;
   1581 }
   1582 
   1583 .walkieBar {
   1584   padding: 10px 12px 12px;
   1585   border-top: 1px solid var(--line);
   1586   display: flex;
   1587   flex-direction: column;
   1588   gap: 8px;
   1589 }
   1590 
   1591 .walkieBar button {
   1592   width: 100%;
   1593   font-weight: 800;
   1594 }
   1595 
   1596 .walkieBar.isRecording button {
   1597   background: linear-gradient(180deg, rgba(61, 220, 151, 0.95), rgba(18, 168, 111, 0.90));
   1598   border-color: rgba(61, 220, 151, 0.30);
   1599 }
   1600 
   1601 .walkieHint .tag {
   1602   padding: 2px 8px;
   1603   font-size: 11px;
   1604 }
   1605 
   1606 .chat.walkie .chatForm {
   1607   display: none;
   1608 }
   1609 
   1610 .chat.walkie #typingIndicator {
   1611   display: none;
   1612 }
   1613 
   1614 .streamStage {
   1615   margin: 10px 12px 0;
   1616   padding: 10px;
   1617   border: 1px solid rgba(246, 240, 255, 0.14);
   1618   border-radius: 14px;
   1619   background: rgba(255, 255, 255, 0.02);
   1620   display: flex;
   1621   flex-direction: column;
   1622   gap: 8px;
   1623   position: sticky;
   1624   top: 0;
   1625   z-index: 4;
   1626   backdrop-filter: blur(2px);
   1627 }
   1628 
   1629 .streamStageHeader {
   1630   display: flex;
   1631   align-items: center;
   1632   justify-content: space-between;
   1633   gap: 8px;
   1634 }
   1635 
   1636 .streamStageTitle {
   1637   font-weight: 800;
   1638 }
   1639 
   1640 .streamStageVideo,
   1641 .streamStageAudio {
   1642   width: 100%;
   1643   border-radius: 12px;
   1644   border: 1px solid rgba(246, 240, 255, 0.12);
   1645   background: rgba(0, 0, 0, 0.25);
   1646 }
   1647 
   1648 .streamStageVideo {
   1649   max-height: min(42vh, 320px);
   1650   object-fit: contain;
   1651 }
   1652 
   1653 .streamStagePlaceholder {
   1654   padding: 8px 10px;
   1655   border: 1px dashed rgba(246, 240, 255, 0.16);
   1656   border-radius: 12px;
   1657   background: rgba(0, 0, 0, 0.12);
   1658 }
   1659 
   1660 .streamVoiceControls {
   1661   border: 1px solid rgba(246, 240, 255, 0.14);
   1662   border-radius: 12px;
   1663   background: rgba(0, 0, 0, 0.16);
   1664   padding: 8px;
   1665   display: flex;
   1666   flex-direction: column;
   1667   gap: 8px;
   1668 }
   1669 
   1670 .streamVoiceToggleRow {
   1671   padding: 8px 10px;
   1672 }
   1673 
   1674 .streamVoiceButtonsRow {
   1675   gap: 8px;
   1676 }
   1677 
   1678 .streamVoiceUsers {
   1679   display: flex;
   1680   flex-direction: column;
   1681   gap: 6px;
   1682 }
   1683 
   1684 .streamVoiceUserRow {
   1685   display: grid;
   1686   grid-template-columns: 1fr minmax(90px, 170px);
   1687   align-items: center;
   1688   gap: 8px;
   1689 }
   1690 
   1691 .app.sidebarHidden .sidebar {
   1692   display: none;
   1693 }
   1694 
   1695 .logo {
   1696   font-weight: 900;
   1697   letter-spacing: 0.6px;
   1698   font-size: 20px;
   1699 }
   1700 
   1701 .subtitle {
   1702   font-size: 12px;
   1703   color: var(--muted);
   1704   margin-top: 4px;
   1705 }
   1706 
   1707 .statusBlock {
   1708   padding: 0 14px;
   1709   display: flex;
   1710   flex-direction: column;
   1711   gap: 8px;
   1712 }
   1713 
   1714 .statusBlock .row {
   1715   margin-top: 4px;
   1716 }
   1717 
   1718 .notifOptions {
   1719   display: flex;
   1720   flex-direction: column;
   1721   gap: 6px;
   1722 }
   1723 
   1724 .notifCheckRow {
   1725   padding: 6px 10px;
   1726   border-radius: 10px;
   1727 }
   1728 
   1729 .notifCheckRow span {
   1730   font-size: 12px;
   1731 }
   1732 
   1733 .toastHost {
   1734   position: fixed;
   1735   right: 16px;
   1736   bottom: 16px;
   1737   display: flex;
   1738   flex-direction: column;
   1739   gap: 10px;
   1740   z-index: 50;
   1741 }
   1742 
   1743 .toast {
   1744   border: 1px solid rgba(246, 240, 255, 0.14);
   1745   background: rgba(12, 12, 24, 0.92);
   1746   backdrop-filter: blur(10px);
   1747   border-radius: 14px;
   1748   padding: 10px 12px;
   1749   max-width: min(360px, calc(100vw - 32px));
   1750   box-shadow: 0 16px 60px rgba(0, 0, 0, 0.45);
   1751   animation: toastIn var(--dur-slow) var(--ease-out) both;
   1752 }
   1753 
   1754 .toastTitle {
   1755   font-weight: 800;
   1756   font-size: 12px;
   1757   margin-bottom: 4px;
   1758 }
   1759 
   1760 .toastBody {
   1761   font-size: 12px;
   1762   color: var(--muted);
   1763   line-height: 1.15rem;
   1764 }
   1765 
   1766 .panel {
   1767   background: linear-gradient(180deg, rgba(255, 255, 255, 0.03), transparent 60%), var(--panel);
   1768   border: 1px solid var(--line);
   1769   border-radius: 16px;
   1770   padding: var(--panel-pad);
   1771   box-shadow: var(--shadow-soft);
   1772 }
   1773 
   1774 .panelFill {
   1775   flex: 1;
   1776   display: flex;
   1777   flex-direction: column;
   1778   min-height: 0;
   1779 }
   1780 
   1781 .panelHeader {
   1782   display: flex;
   1783   justify-content: space-between;
   1784   gap: 10px;
   1785   align-items: center;
   1786   padding: var(--panel-header-pad-y) var(--panel-header-pad-x) calc(var(--panel-header-pad-y) - 2px);
   1787   border-bottom: 1px solid var(--line);
   1788 }
   1789 
   1790 .panelTitle {
   1791   font-weight: 800;
   1792 }
   1793 
   1794 .uiHint {
   1795   margin-top: 8px;
   1796   margin-bottom: 8px;
   1797   padding: 8px 10px;
   1798   border-radius: 10px;
   1799   border: 1px solid rgba(246, 240, 255, 0.14);
   1800   background: rgba(120, 50, 190, 0.12);
   1801   color: var(--muted);
   1802   font-size: 12px;
   1803   line-height: 1.1rem;
   1804 }
   1805 
   1806 .app:not(.hintsEnabled) .uiHint {
   1807   display: none !important;
   1808 }
   1809 
   1810 .panelTitleSub {
   1811   font-weight: 800;
   1812   margin-top: 2px;
   1813 }
   1814 
   1815 .panelDivider {
   1816   height: 1px;
   1817   background: var(--line);
   1818   margin: 12px 0;
   1819 }
   1820 
   1821 .pluginInstallRow {
   1822   display: flex;
   1823   gap: 8px;
   1824   align-items: center;
   1825   margin-top: 8px;
   1826 }
   1827 
   1828 .pluginInstallRow input[type="file"] {
   1829   padding: 8px;
   1830 }
   1831 
   1832 .pluginsList {
   1833   display: flex;
   1834   flex-direction: column;
   1835   gap: 8px;
   1836   margin-top: 10px;
   1837 }
   1838 
   1839 .pluginRow {
   1840   border: 1px solid var(--line);
   1841   border-radius: 12px;
   1842   padding: 10px;
   1843   background: rgba(255, 255, 255, 0.02);
   1844   display: flex;
   1845   justify-content: space-between;
   1846   gap: 10px;
   1847   align-items: flex-start;
   1848 }
   1849 
   1850 .pluginName {
   1851   font-weight: 800;
   1852 }
   1853 
   1854 .pluginDesc {
   1855   color: var(--muted);
   1856   font-size: 12px;
   1857   line-height: 1.05rem;
   1858   margin-top: 4px;
   1859 }
   1860 
   1861 .pluginBadges {
   1862   display: flex;
   1863   gap: 6px;
   1864   flex-wrap: wrap;
   1865   margin-top: 8px;
   1866 }
   1867 
   1868 .pluginBadge {
   1869   font-size: 11px;
   1870   color: var(--muted);
   1871   border: 1px solid rgba(246, 240, 255, 0.14);
   1872   padding: 3px 7px;
   1873   border-radius: 999px;
   1874 }
   1875 
   1876 .pluginError {
   1877   color: #ffb3c6;
   1878   font-size: 12px;
   1879   margin-top: 8px;
   1880 }
   1881 
   1882 .form {
   1883   display: flex;
   1884   flex-direction: column;
   1885   gap: 10px;
   1886 }
   1887 
   1888 .row {
   1889   display: flex;
   1890   gap: 10px;
   1891 }
   1892 
   1893 .grow {
   1894   flex: 1;
   1895 }
   1896 
   1897 .onboardingCard {
   1898   margin-top: 10px;
   1899   border: 1px solid var(--line);
   1900   border-radius: 12px;
   1901   padding: 10px;
   1902   background: rgba(255, 255, 255, 0.02);
   1903 }
   1904 
   1905 .onboardingAbout {
   1906   max-height: 180px;
   1907   overflow: auto;
   1908   border: 1px solid var(--line);
   1909   border-radius: 10px;
   1910   padding: 8px;
   1911   background: rgba(255, 255, 255, 0.01);
   1912 }
   1913 
   1914 .onboardingRules {
   1915   margin: 8px 0 0 18px;
   1916   padding: 0;
   1917   display: flex;
   1918   flex-direction: column;
   1919   gap: 8px;
   1920 }
   1921 
   1922 .onboardingPanelBody {
   1923   padding: 10px;
   1924   overflow: auto;
   1925 }
   1926 
   1927 .onbTabs {
   1928   display: flex;
   1929   gap: 8px;
   1930   flex-wrap: wrap;
   1931 }
   1932 
   1933 .onbRuleList,
   1934 .onbRuleEditorList {
   1935   display: flex;
   1936   flex-direction: column;
   1937   gap: 10px;
   1938 }
   1939 
   1940 .onbRuleViewerCard,
   1941 .onbRuleEditorCard {
   1942   border: 1px solid var(--line);
   1943   border-radius: 12px;
   1944   padding: 10px;
   1945   background: rgba(255, 255, 255, 0.02);
   1946 }
   1947 
   1948 .onbRuleEditorBody {
   1949   display: flex;
   1950   flex-direction: column;
   1951   gap: 8px;
   1952   margin-top: 8px;
   1953 }
   1954 
   1955 .onbRoleGrid {
   1956   display: grid;
   1957   grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
   1958   gap: 8px;
   1959   margin-top: 8px;
   1960 }
   1961 
   1962 .onbSeverityInfo {
   1963   border-color: rgba(61, 220, 151, 0.55);
   1964   color: #9beac7;
   1965 }
   1966 
   1967 .onbSeverityWarn {
   1968   border-color: rgba(255, 166, 0, 0.55);
   1969   color: #ffd28d;
   1970 }
   1971 
   1972 .onbSeverityCritical {
   1973   border-color: rgba(255, 77, 138, 0.65);
   1974   color: #ffb3cb;
   1975 }
   1976 
   1977 .goodText {
   1978   color: var(--good);
   1979 }
   1980 
   1981 .badText {
   1982   color: var(--bad);
   1983 }
   1984 
   1985 label span {
   1986   display: block;
   1987   color: var(--muted);
   1988   font-size: var(--label-font-size);
   1989   margin-bottom: var(--label-gap);
   1990 }
   1991 
   1992 input,
   1993 textarea,
   1994 select {
   1995   width: 100%;
   1996   color: var(--text);
   1997   background: color-mix(in srgb, var(--text) 3%, transparent);
   1998   border: 1px solid color-mix(in srgb, var(--text) 14%, transparent);
   1999   border-radius: 12px;
   2000   padding: var(--control-pad-y) var(--control-pad-x);
   2001   outline: none;
   2002 }
   2003 
   2004 select option,
   2005 select optgroup {
   2006   color: #11131a;
   2007   background: #f4f6fb;
   2008 }
   2009 
   2010 select option:checked {
   2011   color: #0f1724;
   2012   background: #8eb8e6;
   2013 }
   2014 
   2015 select optgroup {
   2016   font-weight: 700;
   2017   background: #e7ebf3;
   2018 }
   2019 
   2020 input:focus,
   2021 textarea:focus,
   2022 select:focus,
   2023 .editor:focus-within {
   2024   border-color: color-mix(in srgb, var(--accent) 45%, transparent);
   2025   box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 10%, transparent);
   2026 }
   2027 
   2028 button {
   2029   border: 1px solid color-mix(in srgb, var(--text) 14%, transparent);
   2030   background: color-mix(in srgb, var(--text) 4%, transparent);
   2031   color: var(--text);
   2032   border-radius: 12px;
   2033   padding: var(--btn-pad-y) var(--btn-pad-x);
   2034   cursor: pointer;
   2035   transition: transform var(--dur-fast) var(--ease-soft), border-color var(--dur-fast) var(--ease-soft),
   2036     background var(--dur-fast) var(--ease-soft), box-shadow var(--dur-fast) var(--ease-soft), filter var(--dur-fast) var(--ease-soft);
   2037 }
   2038 
   2039 button.primary {
   2040   background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 95%, transparent), color-mix(in srgb, var(--accent2) 90%, transparent));
   2041   border-color: color-mix(in srgb, var(--accent) 30%, transparent);
   2042   color: #120013;
   2043   font-weight: 900;
   2044 }
   2045 
   2046 button.ghost {
   2047   background: transparent;
   2048 }
   2049 
   2050 button.danger {
   2051   border-color: rgba(255, 77, 138, 0.26);
   2052   background: color-mix(in srgb, var(--bad) 10%, transparent);
   2053 }
   2054 
   2055 button.danger:hover:not(:disabled) {
   2056   background: color-mix(in srgb, var(--bad) 14%, transparent);
   2057   border-color: color-mix(in srgb, var(--bad) 35%, transparent);
   2058 }
   2059 
   2060 button:hover {
   2061   transform: translateY(-1px);
   2062 }
   2063 
   2064 button:active {
   2065   transform: translateY(0px) scale(0.985);
   2066 }
   2067 
   2068 button:focus-visible {
   2069   outline: none;
   2070   box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 14%, transparent);
   2071   border-color: color-mix(in srgb, var(--accent) 35%, transparent);
   2072 }
   2073 
   2074 button:disabled {
   2075   opacity: 0.55;
   2076   cursor: not-allowed;
   2077   transform: none;
   2078 }
   2079 
   2080 .badge {
   2081   display: inline-flex;
   2082   align-items: center;
   2083   gap: 8px;
   2084   padding: 6px 10px;
   2085   border-radius: 999px;
   2086   font-size: 12px;
   2087   border: 1px solid color-mix(in srgb, var(--text) 14%, transparent);
   2088   background: color-mix(in srgb, var(--text) 2%, transparent);
   2089 }
   2090 
   2091 .badge-good {
   2092   border-color: color-mix(in srgb, var(--good) 25%, transparent);
   2093   background: color-mix(in srgb, var(--good) 10%, transparent);
   2094   color: #baf6dd;
   2095 }
   2096 
   2097 .badge-warn {
   2098   border-color: color-mix(in srgb, var(--accent) 30%, transparent);
   2099   background: color-mix(in srgb, var(--accent) 10%, transparent);
   2100   color: #ffd2ea;
   2101 }
   2102 
   2103 .badge-bad {
   2104   border-color: color-mix(in srgb, var(--bad) 30%, transparent);
   2105   background: color-mix(in srgb, var(--bad) 10%, transparent);
   2106   color: #ffd2e2;
   2107 }
   2108 
   2109 .filters {
   2110   display: flex;
   2111   gap: 6px;
   2112   align-items: center;
   2113   flex-wrap: nowrap;
   2114   padding: 6px;
   2115   border: 1px solid color-mix(in srgb, var(--text) 10%, transparent);
   2116   border-radius: 12px;
   2117   background: color-mix(in srgb, var(--text) 2%, transparent);
   2118   overflow-x: auto;
   2119   max-width: 100%;
   2120 }
   2121 
   2122 .filters input,
   2123 .filters select {
   2124   min-width: 0;
   2125   height: 34px;
   2126   padding: 6px 10px;
   2127   border-radius: 10px;
   2128   font-size: 13px;
   2129 }
   2130 
   2131 .filters #filterAuthor {
   2132   width: 170px;
   2133 }
   2134 
   2135 .filters #filterKeywords {
   2136   width: 210px;
   2137 }
   2138 
   2139 .filters #sortBy {
   2140   width: 170px;
   2141 }
   2142 
   2143 .filters button {
   2144   height: 34px;
   2145   padding: 6px 12px;
   2146   border-radius: 10px;
   2147   font-size: 13px;
   2148 }
   2149 
   2150 .hiveTabs {
   2151   display: flex;
   2152   gap: 10px;
   2153   padding: 14px 12px 12px;
   2154   flex-wrap: wrap;
   2155   border-bottom: 1px solid var(--line);
   2156   margin-bottom: 6px;
   2157   position: relative;
   2158 }
   2159 
   2160 .hiveTabs::before {
   2161   content: "";
   2162   position: absolute;
   2163   left: 12px;
   2164   right: 12px;
   2165   top: 0;
   2166   height: 1px;
   2167   background: linear-gradient(90deg, rgba(255, 62, 165, 0.26), rgba(184, 75, 255, 0.12), transparent);
   2168 }
   2169 
   2170 .hiveTabs button {
   2171   padding: 10px 16px;
   2172   font-size: 13px;
   2173   border-radius: 999px;
   2174   font-weight: 700;
   2175 }
   2176 
   2177 .mobileComposerToggle {
   2178   display: inline-flex;
   2179 }
   2180 
   2181 .mobileOnlyHiveControl {
   2182   display: none;
   2183 }
   2184 
   2185 #pollinatePanel.composerCollapsed {
   2186   display: none;
   2187 }
   2188 
   2189 .feed {
   2190   padding: 12px;
   2191   overflow: auto;
   2192   display: grid;
   2193   grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
   2194   gap: 12px;
   2195   align-content: start;
   2196   min-height: 0;
   2197 }
   2198 
   2199 .profileViewBody {
   2200   flex: 1;
   2201   min-height: 0;
   2202   overflow: auto;
   2203   padding: 12px;
   2204 }
   2205 
   2206 .profileCard {
   2207   border: 1px solid rgba(246, 240, 255, 0.12);
   2208   border-radius: 14px;
   2209   background: rgba(255, 255, 255, 0.02);
   2210   padding: 14px;
   2211   display: flex;
   2212   flex-direction: column;
   2213   gap: 12px;
   2214 }
   2215 
   2216 .profileHeader {
   2217   display: flex;
   2218   gap: 12px;
   2219   align-items: center;
   2220   border: 1px solid rgba(246, 240, 255, 0.12);
   2221   border-radius: 12px;
   2222   padding: 10px;
   2223   background: linear-gradient(180deg, rgba(255, 62, 165, 0.08), rgba(255, 255, 255, 0.02));
   2224 }
   2225 
   2226 .profileHeroPfp {
   2227   width: 72px;
   2228   height: 72px;
   2229   border-radius: 10px;
   2230 }
   2231 
   2232 .profileIdentity {
   2233   display: flex;
   2234   flex-direction: column;
   2235   gap: 4px;
   2236 }
   2237 
   2238 .profileHandle {
   2239   font-size: 21px;
   2240   font-weight: 900;
   2241 }
   2242 
   2243 .profileSection {
   2244   display: flex;
   2245   flex-direction: column;
   2246   gap: 8px;
   2247 }
   2248 
   2249 .profileBio {
   2250   line-height: 1.35rem;
   2251 }
   2252 
   2253 .profileBio img {
   2254   max-width: 100%;
   2255   max-height: min(420px, 55vh);
   2256   object-fit: contain;
   2257   border-radius: 12px;
   2258   display: block;
   2259   cursor: zoom-in;
   2260 }
   2261 
   2262 .editor img {
   2263   max-width: 100%;
   2264   max-height: min(420px, 55vh);
   2265   object-fit: contain;
   2266   border-radius: 12px;
   2267   display: block;
   2268   margin-top: 8px;
   2269   cursor: zoom-in;
   2270 }
   2271 
   2272 .ytEmbed {
   2273   margin-top: 8px;
   2274   border: 1px solid rgba(246, 240, 255, 0.12);
   2275   border-radius: 14px;
   2276   overflow: hidden;
   2277   background: rgba(255, 255, 255, 0.02);
   2278   aspect-ratio: 16 / 9;
   2279   box-shadow: 0 16px 50px rgba(0, 0, 0, 0.25);
   2280 }
   2281 
   2282 .ytEmbed iframe {
   2283   width: 100%;
   2284   height: 100%;
   2285   border: 0;
   2286   display: block;
   2287 }
   2288 
   2289 .profileBio audio {
   2290   width: 100%;
   2291   margin-top: 8px;
   2292 }
   2293 
   2294 .profileLinksWrap {
   2295   display: flex;
   2296   flex-wrap: wrap;
   2297   gap: 8px;
   2298 }
   2299 
   2300 .profileLinkTag {
   2301   text-decoration: none;
   2302 }
   2303 
   2304 .profileEditPanel {
   2305   border-top: 1px solid var(--line);
   2306   padding: 12px;
   2307   display: flex;
   2308   flex-direction: column;
   2309   gap: 10px;
   2310   max-height: 46vh;
   2311   overflow: auto;
   2312 }
   2313 
   2314 .profileBioEditor {
   2315   min-height: 120px;
   2316   max-height: 260px;
   2317   overflow: auto;
   2318 }
   2319 
   2320 .profileLinksHead {
   2321   display: flex;
   2322   justify-content: space-between;
   2323   align-items: center;
   2324   gap: 8px;
   2325 }
   2326 
   2327 .profileLinksEditor {
   2328   display: flex;
   2329   flex-direction: column;
   2330   gap: 8px;
   2331 }
   2332 
   2333 .profileLinkEditRow {
   2334   display: grid;
   2335   grid-template-columns: 1fr 1.4fr auto;
   2336   gap: 8px;
   2337   align-items: center;
   2338 }
   2339 
   2340 @media (max-width: 1100px) {
   2341   .panelHeader {
   2342     align-items: flex-start;
   2343   }
   2344 
   2345   .filters {
   2346     flex-wrap: wrap;
   2347     overflow-x: visible;
   2348   }
   2349 
   2350   .filters #filterAuthor,
   2351   .filters #filterKeywords,
   2352   .filters #sortBy {
   2353     width: 100%;
   2354   }
   2355 
   2356   .profileLinkEditRow {
   2357     grid-template-columns: 1fr;
   2358   }
   2359 }
   2360 
   2361 .post {
   2362   border: 1px solid rgba(246, 240, 255, 0.12);
   2363   border-radius: 14px;
   2364   padding: 12px;
   2365   background: var(--panel2);
   2366   display: flex;
   2367   flex-direction: column;
   2368   gap: 10px;
   2369   position: relative;
   2370   transition: transform var(--dur-med) var(--ease-out), border-color var(--dur-med) var(--ease-out),
   2371     background var(--dur-med) var(--ease-out), box-shadow var(--dur-med) var(--ease-out);
   2372 }
   2373 
   2374 .feed.hivesListView .post {
   2375   padding: 10px;
   2376   gap: 6px;
   2377 }
   2378 
   2379 .feed.hivesListView .postTop {
   2380   align-items: center;
   2381 }
   2382 
   2383 .feed.hivesListView .postTitleRow {
   2384   gap: 0;
   2385   min-width: 0;
   2386 }
   2387 
   2388 .feed.hivesListView .postTitle {
   2389   margin-bottom: 0;
   2390   white-space: nowrap;
   2391   overflow: hidden;
   2392   text-overflow: ellipsis;
   2393 }
   2394 
   2395 .feed.hivesListView .postMeta,
   2396 .feed.hivesListView .reactionsRow,
   2397 .feed.hivesListView .boostControls,
   2398 .feed.hivesListView .countdown.boost {
   2399   display: none !important;
   2400 }
   2401 
   2402 .feed.hivesListView .postMeta {
   2403   display: flex !important;
   2404   margin-top: 6px;
   2405   flex-wrap: nowrap;
   2406   overflow: hidden;
   2407   white-space: nowrap;
   2408   text-overflow: ellipsis;
   2409   gap: 6px;
   2410 }
   2411 
   2412 .feed.hivesListView .rightCol {
   2413   gap: 6px;
   2414 }
   2415 
   2416 .post:hover {
   2417   transform: translateY(-2px);
   2418   border-color: rgba(255, 62, 165, 0.22);
   2419   background: rgba(255, 255, 255, 0.03);
   2420   box-shadow: 0 16px 50px rgba(0, 0, 0, 0.25);
   2421 }
   2422 
   2423 .post.isUnread {
   2424   box-shadow: 0 0 0 1px rgba(255, 62, 165, 0.18), 0 14px 40px rgba(255, 62, 165, 0.10);
   2425 }
   2426 
   2427 .post.isNew {
   2428   animation: glowPop 900ms ease-out;
   2429 }
   2430 
   2431 .post.isBuzz {
   2432   animation: buzzPulse 700ms ease-out;
   2433 }
   2434 
   2435 @keyframes glowPop {
   2436   0% {
   2437     box-shadow: 0 0 0 1px rgba(255, 62, 165, 0.05), 0 0 0 rgba(255, 62, 165, 0.0);
   2438     transform: translateY(0px);
   2439   }
   2440   40% {
   2441     box-shadow: 0 0 0 1px rgba(255, 62, 165, 0.30), 0 18px 60px rgba(255, 62, 165, 0.18);
   2442     transform: translateY(-2px);
   2443   }
   2444   100% {
   2445     box-shadow: 0 0 0 1px rgba(246, 240, 255, 0.12), 0 0 0 rgba(255, 62, 165, 0.0);
   2446     transform: translateY(0px);
   2447   }
   2448 }
   2449 
   2450 @keyframes buzzPulse {
   2451   0% {
   2452     box-shadow: 0 0 0 1px rgba(246, 240, 255, 0.12), 0 0 0 rgba(255, 62, 165, 0);
   2453   }
   2454   40% {
   2455     box-shadow: 0 0 0 1px rgba(255, 62, 165, 0.18), 0 8px 22px rgba(255, 62, 165, 0.08);
   2456   }
   2457   100% {
   2458     box-shadow: 0 0 0 1px rgba(246, 240, 255, 0.12), 0 0 0 rgba(255, 62, 165, 0);
   2459   }
   2460 }
   2461 
   2462 @keyframes workspaceArrivalGlow {
   2463   0% {
   2464     box-shadow: 0 0 0 1px color-mix(in srgb, var(--text) 12%, transparent), 0 0 0 rgba(255, 62, 165, 0);
   2465   }
   2466   35% {
   2467     box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 48%, transparent), 0 18px 52px color-mix(in srgb, var(--accent) 22%, transparent);
   2468   }
   2469   100% {
   2470     box-shadow: 0 0 0 1px color-mix(in srgb, var(--text) 12%, transparent), 0 0 0 rgba(255, 62, 165, 0);
   2471   }
   2472 }
   2473 
   2474 .badgeDot {
   2475   width: 10px;
   2476   height: 10px;
   2477   border-radius: 999px;
   2478   background: rgba(255, 62, 165, 0.95);
   2479   box-shadow: 0 0 0 4px rgba(255, 62, 165, 0.15);
   2480 }
   2481 
   2482 .postTop {
   2483   display: flex;
   2484   justify-content: space-between;
   2485   gap: 12px;
   2486   align-items: flex-start;
   2487 }
   2488 
   2489 .postContent {
   2490   line-height: 1.25rem;
   2491 }
   2492 
   2493 .postTitle {
   2494   font-weight: 900;
   2495   letter-spacing: 0.2px;
   2496   margin-bottom: 6px;
   2497 }
   2498 
   2499 .postTitleRow {
   2500   display: flex;
   2501   flex-direction: column;
   2502   gap: 6px;
   2503 }
   2504 
   2505 .postContent p {
   2506   margin: 0 0 8px;
   2507 }
   2508 
   2509 .postContent p:last-child {
   2510   margin-bottom: 0;
   2511 }
   2512 
   2513 .postMeta {
   2514   display: flex;
   2515   gap: 8px;
   2516   flex-wrap: wrap;
   2517   margin-top: 10px;
   2518 }
   2519 
   2520 .postLastChat,
   2521 .postTypingLine {
   2522   margin-top: 6px;
   2523 }
   2524 
   2525 .postStreamLine {
   2526   margin-top: 6px;
   2527   color: color-mix(in srgb, var(--accent) 52%, var(--text));
   2528 }
   2529 
   2530 .reactionsRow {
   2531   display: flex;
   2532   gap: 6px;
   2533   flex-wrap: wrap;
   2534   align-items: center;
   2535   margin-top: 10px;
   2536 }
   2537 
   2538 .customRoleRow {
   2539   display: inline-flex;
   2540   gap: 4px;
   2541   margin-left: 6px;
   2542   flex-wrap: wrap;
   2543 }
   2544 
   2545 .reactBtn {
   2546   display: inline-flex;
   2547   align-items: center;
   2548   gap: 6px;
   2549   padding: 6px 10px;
   2550   border-radius: 999px;
   2551   border: 1px solid rgba(246, 240, 255, 0.12);
   2552   background: rgba(255, 255, 255, 0.02);
   2553   cursor: pointer;
   2554   user-select: none;
   2555   transition: transform var(--dur-fast) var(--ease-soft), border-color var(--dur-fast) var(--ease-soft),
   2556     background var(--dur-fast) var(--ease-soft), box-shadow var(--dur-fast) var(--ease-soft), filter var(--dur-fast) var(--ease-soft);
   2557 }
   2558 
   2559 .reactBtn:hover {
   2560   transform: translateY(-1px);
   2561   background: rgba(255, 255, 255, 0.035);
   2562   border-color: rgba(246, 240, 255, 0.18);
   2563 }
   2564 
   2565 .reactBtn:active {
   2566   transform: translateY(0px) scale(0.985);
   2567 }
   2568 
   2569 .reactBtn:focus-visible {
   2570   outline: none;
   2571   box-shadow: 0 0 0 4px rgba(255, 62, 165, 0.12);
   2572   border-color: rgba(255, 62, 165, 0.28);
   2573 }
   2574 
   2575 .reactBtn .count {
   2576   font-size: 12px;
   2577   color: var(--muted);
   2578 }
   2579 
   2580 .reactBtn.isOn {
   2581   border-color: rgba(255, 62, 165, 0.30);
   2582   box-shadow: 0 0 0 4px rgba(255, 62, 165, 0.08);
   2583 }
   2584 
   2585 .reactBtn.pulse {
   2586   animation: reactPop 420ms var(--ease-out) both;
   2587 }
   2588 
   2589 .tag {
   2590   font-size: 12px;
   2591   padding: 4px 8px;
   2592   border-radius: 999px;
   2593   border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent);
   2594   background: color-mix(in srgb, var(--accent) 10%, transparent);
   2595   color: #ffd2ea;
   2596 }
   2597 
   2598 .rightCol {
   2599   display: flex;
   2600   flex-direction: column;
   2601   gap: 8px;
   2602   align-items: flex-end;
   2603 }
   2604 
   2605 .postActionsRow {
   2606   display: flex;
   2607   gap: 6px;
   2608   align-items: center;
   2609   justify-content: flex-end;
   2610   width: 100%;
   2611   position: relative;
   2612 }
   2613 
   2614 .kebabBtn {
   2615   width: 38px;
   2616   height: 34px;
   2617   padding: 0;
   2618   border-radius: 12px;
   2619   line-height: 34px;
   2620   font-weight: 900;
   2621 }
   2622 
   2623 .postMenu {
   2624   position: absolute;
   2625   right: 0;
   2626   top: calc(100% + 6px);
   2627   z-index: 40;
   2628   width: 170px;
   2629   max-width: min(240px, calc(100vw - 48px));
   2630   border: 1px solid rgba(246, 240, 255, 0.16);
   2631   border-radius: 14px;
   2632   background: rgba(8, 8, 16, 0.92);
   2633   backdrop-filter: blur(12px);
   2634   box-shadow: 0 16px 60px rgba(0, 0, 0, 0.45);
   2635   padding: 6px;
   2636   animation: popFloat var(--dur-med) var(--ease-out) both;
   2637 }
   2638 
   2639 .postMenu button {
   2640   width: 100%;
   2641   text-align: left;
   2642   padding: 8px 10px;
   2643   border-radius: 12px;
   2644 }
   2645 
   2646 .postMenu button:hover {
   2647   transform: none;
   2648   background: rgba(255, 255, 255, 0.06);
   2649   border-color: rgba(246, 240, 255, 0.18);
   2650 }
   2651 
   2652 .postMenu button:active {
   2653   transform: scale(0.99);
   2654 }
   2655 
   2656 .postMenu button.danger {
   2657   border-color: rgba(255, 77, 138, 0.26);
   2658 }
   2659 
   2660 .postMenu button.danger:hover {
   2661   background: rgba(255, 77, 138, 0.10);
   2662   border-color: rgba(255, 77, 138, 0.35);
   2663 }
   2664 
   2665 .countdown {
   2666   font-size: 12px;
   2667   color: var(--muted);
   2668 }
   2669 
   2670 .countdown.boost {
   2671   color: #ffd2ea;
   2672 }
   2673 
   2674 .boostRow {
   2675   display: flex;
   2676   gap: 8px;
   2677   align-items: center;
   2678 }
   2679 
   2680 .boostRow select {
   2681   padding: 6px 8px;
   2682 }
   2683 
   2684 .userLine {
   2685   display: flex;
   2686   align-items: center;
   2687   gap: 10px;
   2688   padding: 8px 10px;
   2689   border-radius: 12px;
   2690   border: 1px solid rgba(246, 240, 255, 0.12);
   2691   background: rgba(255, 255, 255, 0.02);
   2692   margin: 6px 0 10px;
   2693 }
   2694 
   2695 .userPill {
   2696   display: inline-flex;
   2697   align-items: center;
   2698   gap: 8px;
   2699 }
   2700 
   2701 .userPillLink {
   2702   background: transparent;
   2703   border: 0;
   2704   padding: 0;
   2705 }
   2706 
   2707 .userPillLink:hover {
   2708   transform: none;
   2709   text-decoration: underline;
   2710 }
   2711 
   2712 .userPillLink:active {
   2713   transform: scale(0.99);
   2714 }
   2715 
   2716 .userPillLink:focus-visible {
   2717   outline: none;
   2718   box-shadow: 0 0 0 4px rgba(255, 62, 165, 0.12);
   2719   border-radius: 12px;
   2720 }
   2721 
   2722 .postAuthor .userPill {
   2723   gap: 10px;
   2724 }
   2725 
   2726 .pfp {
   2727   width: 34px;
   2728   height: 34px;
   2729   border-radius: 6px;
   2730   display: inline-flex;
   2731   align-items: center;
   2732   justify-content: center;
   2733   background: rgba(255, 255, 255, 0.02);
   2734   border: 1px solid rgba(246, 240, 255, 0.14);
   2735   overflow: hidden;
   2736 }
   2737 
   2738 .post .pfp {
   2739   width: 64px;
   2740   height: 64px;
   2741   border-radius: 10px;
   2742 }
   2743 
   2744 .pfp img {
   2745   width: 100%;
   2746   height: 100%;
   2747   object-fit: cover;
   2748 }
   2749 
   2750 .pfpBox {
   2751   width: 64px;
   2752   height: 64px;
   2753   border-radius: 12px;
   2754   border: 1px solid rgba(246, 240, 255, 0.14);
   2755   background: rgba(255, 255, 255, 0.02);
   2756   overflow: hidden;
   2757   flex: 0 0 auto;
   2758 }
   2759 
   2760 .pfpBox img {
   2761   width: 100%;
   2762   height: 100%;
   2763   object-fit: cover;
   2764   display: none;
   2765 }
   2766 
   2767 .pfpBox img.hasImg {
   2768   display: block;
   2769 }
   2770 
   2771 .editorShell {
   2772   border: 1px solid rgba(246, 240, 255, 0.14);
   2773   border-radius: 16px;
   2774   overflow: hidden;
   2775   background: rgba(255, 255, 255, 0.02);
   2776 }
   2777 
   2778 .toolbar {
   2779   display: flex;
   2780   flex-wrap: wrap;
   2781   gap: 6px;
   2782   padding: 8px;
   2783   border-bottom: 1px solid var(--line);
   2784 }
   2785 
   2786 .toolbar button {
   2787   padding: 6px 10px;
   2788   border-radius: 10px;
   2789 }
   2790 
   2791 .toolbar .sep {
   2792   width: 1px;
   2793   background: var(--line);
   2794   margin: 4px 6px;
   2795 }
   2796 
   2797 .editor {
   2798   min-height: 110px;
   2799   padding: 10px;
   2800   outline: none;
   2801 }
   2802 
   2803 .editor:empty:before {
   2804   content: "Write something...";
   2805   color: rgba(246, 240, 255, 0.40);
   2806 }
   2807 
   2808 .chatMessages {
   2809   padding: 10px 10px 8px;
   2810   overflow: auto;
   2811   display: flex;
   2812   flex-direction: column;
   2813   gap: 0;
   2814   flex: 1;
   2815   min-height: 0;
   2816   container-type: inline-size;
   2817 }
   2818 
   2819 .typingIndicator {
   2820   padding: 0 12px 10px;
   2821   min-height: 18px;
   2822 }
   2823 
   2824 .typingDots {
   2825   display: inline-flex;
   2826   gap: 2px;
   2827   margin-left: 6px;
   2828 }
   2829 
   2830 .typingDots span {
   2831   opacity: 0.2;
   2832   animation: dotPulse 1.2s infinite;
   2833 }
   2834 
   2835 .typingDots span:nth-child(2) {
   2836   animation-delay: 0.2s;
   2837 }
   2838 
   2839 .typingDots span:nth-child(3) {
   2840   animation-delay: 0.4s;
   2841 }
   2842 
   2843 @keyframes dotPulse {
   2844   0%,
   2845   100% {
   2846     opacity: 0.2;
   2847   }
   2848   50% {
   2849     opacity: 1;
   2850   }
   2851 }
   2852 
   2853 .chatMsg {
   2854   border: 1px solid rgba(246, 240, 255, 0.12);
   2855   background: rgba(255, 255, 255, 0.02);
   2856   border-radius: 14px;
   2857   padding: 8px 9px;
   2858   margin-top: 8px;
   2859   width: fit-content;
   2860   margin-left: auto;
   2861   margin-right: auto;
   2862   max-width: min(var(--chat-rail-center-max, 70%), calc(100% - (var(--chat-rail-inset, 12px) * 2)));
   2863   transition: border-color var(--dur-med) var(--ease-out), background var(--dur-med) var(--ease-out),
   2864     box-shadow var(--dur-med) var(--ease-out), transform var(--dur-med) var(--ease-out);
   2865 }
   2866 
   2867 .chatMsg.railLeft {
   2868   margin-left: var(--chat-rail-inset, 12px);
   2869   margin-right: auto;
   2870   max-width: min(var(--chat-rail-side-max, 66%), calc(100% - (var(--chat-rail-inset, 12px) * 2)));
   2871 }
   2872 
   2873 .chatMsg.railCenter {
   2874   margin-left: auto;
   2875   margin-right: auto;
   2876   max-width: min(var(--chat-rail-center-max, 70%), calc(100% - (var(--chat-rail-inset, 12px) * 2)));
   2877 }
   2878 
   2879 .chatMsg.railRight {
   2880   margin-left: auto;
   2881   margin-right: var(--chat-rail-inset, 12px);
   2882   max-width: min(var(--chat-rail-side-max, 66%), calc(100% - (var(--chat-rail-inset, 12px) * 2)));
   2883   background: color-mix(in srgb, var(--accent) 10%, rgba(255, 255, 255, 0.02));
   2884   border-color: color-mix(in srgb, var(--accent) 30%, rgba(246, 240, 255, 0.12));
   2885 }
   2886 
   2887 .chatMsg:first-child {
   2888   margin-top: 0;
   2889 }
   2890 
   2891 .chatMsg.isStacked {
   2892   margin-top: 4px;
   2893 }
   2894 
   2895 .chatMsg.railRight .meta {
   2896   justify-content: flex-end;
   2897 }
   2898 
   2899 .chatMsg.mentionMe {
   2900   border-color: rgba(255, 62, 165, 0.45);
   2901   box-shadow: 0 0 0 2px rgba(255, 62, 165, 0.14);
   2902 }
   2903 
   2904 .chatMsg.isModMsg {
   2905   background: linear-gradient(
   2906       180deg,
   2907       color-mix(in srgb, var(--warn) 22%, transparent),
   2908       rgba(255, 255, 255, 0.02)
   2909     ),
   2910     rgba(255, 255, 255, 0.02);
   2911   border-color: color-mix(in srgb, var(--warn2) 38%, rgba(246, 240, 255, 0.12));
   2912   box-shadow: 0 0 0 2px color-mix(in srgb, var(--warn2) 10%, transparent);
   2913 }
   2914 
   2915 .chatMsg.isModMsg .meta {
   2916   color: color-mix(in srgb, var(--warn) 60%, var(--muted));
   2917 }
   2918 
   2919 .modPill {
   2920   display: inline-flex;
   2921   align-items: center;
   2922   gap: 6px;
   2923   font-weight: 900;
   2924   letter-spacing: 0.3px;
   2925   color: color-mix(in srgb, var(--warn) 88%, var(--text));
   2926   border: 1px solid color-mix(in srgb, var(--warn2) 42%, transparent);
   2927   background: color-mix(in srgb, var(--warn2) 10%, transparent);
   2928   padding: 2px 8px;
   2929   border-radius: 999px;
   2930 }
   2931 
   2932 .chatMsg.isNewMsg {
   2933   animation: msgIn 520ms var(--ease-out) both;
   2934 }
   2935 
   2936 /* When the chat container gets narrow, collapse center-lane messages to the left lane.
   2937    Self stays right-aligned; mod/system keep their visual treatment. */
   2938 @container (max-width: 520px) {
   2939   .chatMessages {
   2940     --chat-rail-side-max: 92%;
   2941     --chat-rail-center-max: 92%;
   2942   }
   2943 
   2944   .chatMsg.railCenter {
   2945     margin-left: var(--chat-rail-inset, 12px);
   2946     margin-right: auto;
   2947   }
   2948 
   2949   .chatMsg.railCenter .meta {
   2950     justify-content: flex-start;
   2951   }
   2952 
   2953   .chatMsg.isModMsg {
   2954     margin-left: calc(var(--chat-rail-inset, 12px) + 8px);
   2955   }
   2956 }
   2957 
   2958 .chatMsg:hover {
   2959   border-color: rgba(246, 240, 255, 0.18);
   2960   background: rgba(255, 255, 255, 0.028);
   2961 }
   2962 
   2963 .chatMsg.mentionMe:not(.isNewMsg) {
   2964   animation: mentionPing 720ms var(--ease-out) both;
   2965 }
   2966 
   2967 .chatActionsRow {
   2968   margin-top: 6px;
   2969   display: flex;
   2970   align-items: center;
   2971   justify-content: space-between;
   2972   gap: 10px;
   2973   flex-wrap: wrap;
   2974 }
   2975 
   2976 .chatReactions {
   2977   display: flex;
   2978   gap: 4px;
   2979   flex-wrap: wrap;
   2980   margin-top: 6px;
   2981 }
   2982 
   2983 .chatActionsRow .chatReactions {
   2984   margin-top: 0;
   2985   flex: 1 1 auto;
   2986 }
   2987 
   2988 .chatReactions .reactionsRow {
   2989   margin-top: 0;
   2990   gap: 4px;
   2991 }
   2992 
   2993 .chatReactions .reactBtn {
   2994   padding: 4px 8px;
   2995 }
   2996 
   2997 .chatMsg .content img {
   2998   max-width: 100%;
   2999   max-height: min(420px, 55vh);
   3000   object-fit: contain;
   3001   border-radius: 10px;
   3002   display: block;
   3003   margin-top: 6px;
   3004   cursor: zoom-in;
   3005 }
   3006 
   3007 .chatReactions:empty {
   3008   display: none;
   3009 }
   3010 
   3011 .chatMsg .content audio,
   3012 .post audio,
   3013 .editor audio {
   3014   width: 100%;
   3015   margin-top: 8px;
   3016 }
   3017 
   3018 #mediaModalImg {
   3019   max-width: min(92vw, 1200px);
   3020   max-height: 78vh;
   3021   width: auto;
   3022   height: auto;
   3023   display: block;
   3024   margin: 0 auto;
   3025   border-radius: 14px;
   3026   background: rgba(0, 0, 0, 0.18);
   3027 }
   3028 
   3029 .editor.isDropActive {
   3030   outline: 2px dashed rgba(255, 62, 165, 0.7);
   3031   outline-offset: 6px;
   3032 }
   3033 
   3034 .chatMsg .meta {
   3035   font-size: 11px;
   3036   color: var(--muted);
   3037   margin-bottom: 3px;
   3038   display: flex;
   3039   gap: 6px;
   3040   align-items: center;
   3041   line-height: 1.1;
   3042 }
   3043 
   3044 .chatHeaderInline {
   3045   display: inline-flex;
   3046   align-items: center;
   3047   gap: 6px;
   3048 }
   3049 
   3050 .chatMsg .content p {
   3051   margin: 0 0 6px;
   3052 }
   3053 
   3054 .chatMsg .content p:last-child {
   3055   margin-bottom: 0;
   3056 }
   3057 
   3058 .mentionToken {
   3059   border: 1px solid rgba(255, 62, 165, 0.28);
   3060   border-radius: 999px;
   3061   padding: 0 6px;
   3062   background: rgba(255, 62, 165, 0.10);
   3063   color: #ffd2ea;
   3064 }
   3065 
   3066 .mentionTokenMe {
   3067   border-color: rgba(61, 220, 151, 0.4);
   3068   background: rgba(61, 220, 151, 0.14);
   3069   color: #baf6dd;
   3070 }
   3071 
   3072 .chatReplyRef {
   3073   margin-bottom: 6px;
   3074   padding: 6px 8px;
   3075   border-left: 3px solid rgba(255, 62, 165, 0.5);
   3076   border-radius: 8px;
   3077   background: rgba(255, 255, 255, 0.02);
   3078 }
   3079 
   3080 .chatTools {
   3081   margin-top: 6px;
   3082   display: flex;
   3083   justify-content: flex-end;
   3084   gap: 6px;
   3085 }
   3086 
   3087 .chatActionsRow .chatTools {
   3088   margin-top: 0;
   3089   flex: 0 0 auto;
   3090 }
   3091 
   3092 .chatForm {
   3093   display: flex;
   3094   flex-direction: column;
   3095   gap: 10px;
   3096   padding: 12px;
   3097   border-top: 1px solid var(--line);
   3098 }
   3099 
   3100 .app.hotbarVisible .chatForm {
   3101   padding-bottom: 12px;
   3102 }
   3103 
   3104 .chatForm > .primary[type="submit"] {
   3105   align-self: flex-end;
   3106 }
   3107 
   3108 .chat.isSkinnyChat .chatMessages {
   3109   padding: 8px;
   3110 }
   3111 
   3112 .chat.isSkinnyChat .chatMsg {
   3113   width: auto;
   3114   max-width: 100%;
   3115   margin-left: 0;
   3116   margin-right: 0;
   3117   border-radius: 10px;
   3118   padding: 6px 8px;
   3119 }
   3120 
   3121 .chat.isSkinnyChat .chatMsg.railLeft,
   3122 .chat.isSkinnyChat .chatMsg.railCenter,
   3123 .chat.isSkinnyChat .chatMsg.railRight {
   3124   margin-left: 0;
   3125   margin-right: 0;
   3126   max-width: 100%;
   3127 }
   3128 
   3129 .chat.isSkinnyChat .chatMsg .meta {
   3130   font-size: 10px;
   3131   margin-bottom: 2px;
   3132 }
   3133 
   3134 .chat.isSkinnyChat .chatMsg .content {
   3135   font-size: 12px;
   3136   line-height: 1.3;
   3137   white-space: pre-wrap;
   3138   overflow-wrap: anywhere;
   3139   word-break: break-word;
   3140 }
   3141 
   3142 .chat.isSkinnyChat .chatMsg .content img,
   3143 .chat.isSkinnyChat .chatMsg .content audio,
   3144 .chat.isSkinnyChat .chatMsg .content video,
   3145 .chat.isSkinnyChat .chatReplyRef,
   3146 .chat.isSkinnyChat .chatReactions {
   3147   display: none !important;
   3148 }
   3149 
   3150 .chat.isSkinnyChat .chatActionsRow {
   3151   margin-top: 4px;
   3152   gap: 6px;
   3153 }
   3154 
   3155 .chat.isSkinnyChat .chatTools {
   3156   margin-top: 0;
   3157   gap: 4px;
   3158   justify-content: flex-start;
   3159 }
   3160 
   3161 .chat.isSkinnyChat .chatTools .smallBtn {
   3162   padding: 3px 8px;
   3163 }
   3164 
   3165 .chat.isSkinnyChat .toolbar {
   3166   padding: 6px;
   3167   gap: 4px;
   3168 }
   3169 
   3170 .chat.isSkinnyChat .toolbar .sep,
   3171 .chat.isSkinnyChat .toolbar button[data-chatcmd],
   3172 .chat.isSkinnyChat .toolbar button[data-chatemoji] {
   3173   display: none;
   3174 }
   3175 
   3176 .chat.isSkinnyChat .chatEditor {
   3177   min-height: 64px;
   3178 }
   3179 
   3180 .chat.isSkinnyChat .chatForm {
   3181   gap: 8px;
   3182   padding: 8px;
   3183 }
   3184 
   3185 .chatReplyBanner {
   3186   border: 1px solid rgba(246, 240, 255, 0.16);
   3187   border-radius: 12px;
   3188   padding: 6px 8px;
   3189   display: flex;
   3190   justify-content: space-between;
   3191   align-items: center;
   3192   gap: 8px;
   3193   background: rgba(255, 255, 255, 0.03);
   3194 }
   3195 
   3196 .chatComposer {
   3197   flex: 1;
   3198   display: flex;
   3199   flex-direction: column;
   3200   gap: 8px;
   3201   min-width: 0;
   3202   position: relative;
   3203 }
   3204 
   3205 .chatEditor {
   3206   min-height: 84px;
   3207   max-height: 160px;
   3208   overflow: auto;
   3209   border: 1px solid rgba(246, 240, 255, 0.14);
   3210   border-radius: 14px;
   3211   background: rgba(255, 255, 255, 0.02);
   3212 }
   3213 
   3214 .mentionMenu {
   3215   position: fixed;
   3216   z-index: 130;
   3217   width: 220px;
   3218   max-height: 220px;
   3219   overflow: auto;
   3220   border: 1px solid rgba(246, 240, 255, 0.16);
   3221   border-radius: 14px;
   3222   background: rgba(8, 8, 16, 0.92);
   3223   backdrop-filter: blur(12px);
   3224   box-shadow: 0 16px 60px rgba(0, 0, 0, 0.45);
   3225   padding: 6px;
   3226   animation: popFloat var(--dur-med) var(--ease-out) both;
   3227 }
   3228 
   3229 .mentionItem {
   3230   padding: 8px 10px;
   3231   border-radius: 12px;
   3232   cursor: pointer;
   3233   border: 1px solid transparent;
   3234 }
   3235 
   3236 .mentionItem.isOn {
   3237   border-color: rgba(255, 62, 165, 0.35);
   3238   background: rgba(255, 62, 165, 0.14);
   3239 }
   3240 
   3241 .mentionItem:hover {
   3242   border-color: rgba(246, 240, 255, 0.14);
   3243   background: rgba(255, 255, 255, 0.04);
   3244 }
   3245 
   3246 .modTabs {
   3247   display: flex;
   3248   gap: 8px;
   3249   margin-top: 10px;
   3250 }
   3251 
   3252 .modTabs button {
   3253   flex: 1;
   3254   padding: 8px 10px;
   3255 }
   3256 
   3257 .modFilters {
   3258   margin-top: 10px;
   3259   display: flex;
   3260   gap: 8px;
   3261 }
   3262 
   3263 .modBody {
   3264   margin-top: 10px;
   3265   flex: 1;
   3266   min-height: 0;
   3267   overflow: auto;
   3268   display: flex;
   3269   flex-direction: column;
   3270   gap: 8px;
   3271   padding-right: 4px;
   3272 }
   3273 
   3274 .modCard {
   3275   border: 1px solid rgba(246, 240, 255, 0.14);
   3276   border-radius: 12px;
   3277   padding: 8px;
   3278   background: rgba(255, 255, 255, 0.02);
   3279   display: flex;
   3280   flex-direction: column;
   3281   gap: 6px;
   3282   transition: border-color var(--dur-med) var(--ease-out), background var(--dur-med) var(--ease-out),
   3283     box-shadow var(--dur-med) var(--ease-out), transform var(--dur-med) var(--ease-out);
   3284 }
   3285 
   3286 .modCard:hover {
   3287   border-color: rgba(246, 240, 255, 0.20);
   3288   background: rgba(255, 255, 255, 0.03);
   3289   box-shadow: 0 12px 34px rgba(0, 0, 0, 0.24);
   3290 }
   3291 
   3292 .modRowTop {
   3293   display: flex;
   3294   justify-content: space-between;
   3295   gap: 10px;
   3296   align-items: center;
   3297 }
   3298 
   3299 .modActions {
   3300   display: flex;
   3301   flex-wrap: wrap;
   3302   gap: 6px;
   3303 }
   3304 
   3305 .modActions button {
   3306   padding: 6px 8px;
   3307   border-radius: 10px;
   3308   font-size: 12px;
   3309 }
   3310 
   3311 .devLogPre {
   3312   margin: 0;
   3313   padding: 10px;
   3314   border-radius: 12px;
   3315   border: 1px solid rgba(246, 240, 255, 0.10);
   3316   background: rgba(0, 0, 0, 0.18);
   3317   max-height: min(52vh, 520px);
   3318   overflow: auto;
   3319   font-size: 12px;
   3320   line-height: 1.2rem;
   3321   white-space: pre-wrap;
   3322   word-break: break-word;
   3323 }
   3324 
   3325 .modStatus {
   3326   display: inline-flex;
   3327   align-items: center;
   3328   border: 1px solid rgba(255, 62, 165, 0.25);
   3329   background: rgba(255, 62, 165, 0.12);
   3330   border-radius: 999px;
   3331   padding: 2px 8px;
   3332   font-size: 11px;
   3333   margin-left: 6px;
   3334 }
   3335 
   3336 .mobilePager {
   3337   position: fixed;
   3338   left: 50%;
   3339   bottom: calc(10px + env(safe-area-inset-bottom, 0px));
   3340   transform: translateX(-50%);
   3341   z-index: 80;
   3342   display: flex;
   3343   gap: 8px;
   3344   padding: 8px;
   3345   border-radius: 999px;
   3346   border: 1px solid rgba(246, 240, 255, 0.14);
   3347   background: rgba(8, 8, 16, 0.92);
   3348   backdrop-filter: blur(10px);
   3349 }
   3350 
   3351 .mobilePager button {
   3352   padding: 8px 12px;
   3353   border-radius: 999px;
   3354 }
   3355 
   3356 /* Mobile UX: screens, not racks (see docs/MOBILE_UX.md). */
   3357 .mobileNav {
   3358   position: fixed;
   3359   left: 50%;
   3360   bottom: calc(10px + env(safe-area-inset-bottom, 0px));
   3361   transform: translateX(-50%);
   3362   z-index: 90;
   3363   display: flex;
   3364   gap: 8px;
   3365   padding: 8px;
   3366   width: min(720px, calc(100vw - 24px));
   3367   max-width: calc(100vw - 24px);
   3368   justify-content: space-between;
   3369   border-radius: 999px;
   3370   border: 1px solid rgba(246, 240, 255, 0.14);
   3371   background: rgba(8, 8, 16, 0.92);
   3372   backdrop-filter: blur(10px);
   3373 }
   3374 
   3375 .mobileNav button {
   3376   flex: 1 1 0;
   3377   min-width: 0;
   3378   padding: 10px 0;
   3379   border-radius: 999px;
   3380   text-align: center;
   3381   white-space: nowrap;
   3382   overflow: hidden;
   3383   text-overflow: ellipsis;
   3384 }
   3385 
   3386 .mobileMoreSheet {
   3387   position: fixed;
   3388   inset: 0;
   3389   z-index: 95;
   3390   display: flex;
   3391   align-items: flex-end;
   3392   justify-content: center;
   3393 }
   3394 
   3395 @media (max-width: 380px) {
   3396   .mobileNav {
   3397     gap: 6px;
   3398     padding: 6px;
   3399   }
   3400 
   3401   .mobileNav button {
   3402     font-size: 12px;
   3403   }
   3404 }
   3405 
   3406 .mobileMoreBackdrop {
   3407   position: absolute;
   3408   inset: 0;
   3409   background: rgba(0, 0, 0, 0.55);
   3410 }
   3411 
   3412 .mobileMoreCard {
   3413   position: relative;
   3414   width: min(720px, 100%);
   3415   max-height: calc(100dvh - 18px - env(safe-area-inset-bottom, 0px));
   3416   max-height: calc(100vh - 18px - env(safe-area-inset-bottom, 0px));
   3417   border-radius: 16px 16px 0 0;
   3418   border-bottom-left-radius: 0;
   3419   border-bottom-right-radius: 0;
   3420   overflow: hidden;
   3421   box-shadow: var(--shadow-soft);
   3422 }
   3423 
   3424 .mobileMoreBody {
   3425   padding: 12px;
   3426   display: flex;
   3427   flex-direction: column;
   3428   gap: 10px;
   3429   overflow: auto;
   3430 }
   3431 
   3432 .mobileMoreBody input {
   3433   width: 100%;
   3434 }
   3435 
   3436 .mobileMoreList {
   3437   display: flex;
   3438   flex-direction: column;
   3439   gap: 10px;
   3440 }
   3441 
   3442 .mobileMoreItem {
   3443   display: flex;
   3444   align-items: center;
   3445   justify-content: space-between;
   3446   gap: 10px;
   3447   padding: 10px 12px;
   3448   border: 1px solid var(--line);
   3449   border-radius: 14px;
   3450   background: rgba(255, 255, 255, 0.02);
   3451 }
   3452 
   3453 .mobileScreenHost {
   3454   grid-area: main;
   3455   display: none;
   3456   flex-direction: column;
   3457   gap: var(--app-gap);
   3458   overflow: hidden;
   3459 }
   3460 
   3461 @media (max-width: 760px), (hover: none) and (pointer: coarse) and (max-width: 900px), (hover: none) and (pointer: coarse) and (max-height: 520px) {
   3462   .app.mobileScreens {
   3463     display: block;
   3464     padding: 0;
   3465     gap: 0;
   3466     height: 100dvh;
   3467     height: 100vh;
   3468   }
   3469 
   3470   .app.mobileScreens .sidebarToggle,
   3471   .app.mobileScreens .peopleToggle,
   3472   .app.mobileScreens .sideRackToggle,
   3473   .app.mobileScreens .rightRackToggle {
   3474     display: none;
   3475   }
   3476 
   3477   .app.mobileScreens > .sidebar,
   3478   .app.mobileScreens > .main,
   3479   .app.mobileScreens > .chat,
   3480   .app.mobileScreens > .panelResizeHandle,
   3481   .app.mobileScreens > #rightRack,
   3482   .app.mobileScreens > .mobileScreenHost,
   3483   .app.mobileScreens > .moderation {
   3484     display: none;
   3485     width: 100%;
   3486     height: calc(100dvh - 56px - env(safe-area-inset-bottom, 0px));
   3487     height: calc(100vh - 56px - env(safe-area-inset-bottom, 0px));
   3488     border-radius: 0;
   3489     border-left: 0;
   3490     border-right: 0;
   3491   }
   3492 
   3493   /* Core screens */
   3494   .app.mobileScreens[data-mobile-screen="account"] > .sidebar {
   3495     display: flex;
   3496   }
   3497 
   3498   .app.mobileScreens[data-mobile-screen="hives"] > .main,
   3499   .app.mobileScreens[data-mobile-screen="chat"] > .chat,
   3500   .app.mobileScreens[data-mobile-screen="moderation"] > .moderation {
   3501     display: flex;
   3502   }
   3503 
   3504   .app.mobileScreens[data-mobile-screen="host"] > .mobileScreenHost {
   3505     display: flex;
   3506   }
   3507 
   3508   /* Force active screen to full width/height regardless of desktop grid. */
   3509   .app.mobileScreens[data-mobile-screen="account"] > .sidebar,
   3510   .app.mobileScreens[data-mobile-screen="hives"] > .main,
   3511   .app.mobileScreens[data-mobile-screen="chat"] > .chat,
   3512   .app.mobileScreens[data-mobile-screen="moderation"] > .moderation,
   3513   .app.mobileScreens[data-mobile-screen="host"] > .mobileScreenHost {
   3514     position: fixed;
   3515     top: 0;
   3516     left: 0;
   3517     right: 0;
   3518     bottom: calc(56px + env(safe-area-inset-bottom, 0px));
   3519     z-index: 85;
   3520   }
   3521 
   3522   /* People screen is a sibling of .app */
   3523   .app.mobileScreens + .peopleDrawer {
   3524     display: none;
   3525     top: 0;
   3526     right: 0;
   3527     bottom: 56px;
   3528     width: 100%;
   3529     border-radius: 0;
   3530     border-left: 0;
   3531     border-right: 0;
   3532   }
   3533 
   3534   .app.mobileScreens[data-mobile-screen="people"] + .peopleDrawer {
   3535     display: flex;
   3536   }
   3537 
   3538   .app.mobileScreens[data-mobile-screen="people"] + .peopleDrawer {
   3539     position: fixed;
   3540     left: 0;
   3541     top: 0;
   3542     right: 0;
   3543     bottom: calc(56px + env(safe-area-inset-bottom, 0px));
   3544     z-index: 85;
   3545   }
   3546 
   3547   /* In mobile hives screen, hide the desktop side rack column. */
   3548   .app.mobileScreens[data-mobile-screen="hives"] #mainSideRack {
   3549     display: none !important;
   3550   }
   3551 
   3552   /* Hide the hotbar unless explicitly shown elsewhere. */
   3553   .app.mobileScreens + .dockHotbar {
   3554     display: none;
   3555   }
   3556 }
   3557 
   3558 /* (Rack-specific mobile styles removed in favor of screen-based mobile UX.) */
   3559 
   3560 /* JS-driven mobile mode: enforce screen behavior by class, even if viewport/media heuristics disagree. */
   3561 .app.mobileScreens {
   3562   display: block;
   3563   padding: 0;
   3564   gap: 0;
   3565   width: 100vw;
   3566   height: 100dvh;
   3567   height: 100vh;
   3568   overflow: hidden;
   3569   grid-template-columns: 1fr !important;
   3570   grid-template-areas: "main" !important;
   3571 }
   3572 
   3573 .app.mobileScreens .sidebarToggle,
   3574 .app.mobileScreens .peopleToggle,
   3575 .app.mobileScreens .sideRackToggle,
   3576 .app.mobileScreens .rightRackToggle {
   3577   display: none !important;
   3578 }
   3579 
   3580 .app.mobileScreens.rackMode .sideRackToggle,
   3581 .app.mobileScreens.rackMode .rightRackToggle,
   3582 .app.mobileScreens #showSideRack,
   3583 .app.mobileScreens #showRightRack {
   3584   display: none !important;
   3585 }
   3586 
   3587 .app.mobileScreens > .sidebar,
   3588 .app.mobileScreens > .main,
   3589 .app.mobileScreens > .chat,
   3590 .app.mobileScreens > .panelResizeHandle,
   3591 .app.mobileScreens > #rightRack,
   3592 .app.mobileScreens > .mobileScreenHost,
   3593 .app.mobileScreens > .moderation {
   3594   display: none !important;
   3595   width: 100vw !important;
   3596   max-width: none !important;
   3597   height: calc(100dvh - 56px - env(safe-area-inset-bottom, 0px));
   3598   height: calc(100vh - 56px - env(safe-area-inset-bottom, 0px));
   3599   border-radius: 0 !important;
   3600   border-left: 0 !important;
   3601   border-right: 0 !important;
   3602 }
   3603 
   3604 .app.mobileScreens[data-mobile-screen="account"] > .sidebar,
   3605 .app.mobileScreens[data-mobile-screen="hives"] > .main,
   3606 .app.mobileScreens[data-mobile-screen="chat"] > .chat,
   3607 .app.mobileScreens[data-mobile-screen="moderation"] > .moderation,
   3608 .app.mobileScreens[data-mobile-screen="host"] > .mobileScreenHost {
   3609   display: flex !important;
   3610   position: fixed;
   3611   top: 0;
   3612   left: 0;
   3613   right: 0;
   3614   bottom: calc(56px + env(safe-area-inset-bottom, 0px));
   3615   z-index: 85;
   3616 }
   3617 
   3618 .app.mobileScreens[data-mobile-screen="hives"] #mainSideRack {
   3619   display: none !important;
   3620 }
   3621 
   3622 .app.mobileScreens[data-mobile-screen="hives"] .main,
   3623 .app.mobileScreens[data-mobile-screen="hives"] .mainRack,
   3624 .app.mobileScreens[data-mobile-screen="hives"] #mainWorkspaceRack,
   3625 .app.mobileScreens[data-mobile-screen="hives"] #hivesPanel {
   3626   width: 100% !important;
   3627   max-width: none !important;
   3628   min-width: 0 !important;
   3629 }
   3630 
   3631 .app.mobileScreens[data-mobile-screen="hives"] .mainRack {
   3632   gap: 0;
   3633 }
   3634 
   3635 .app.mobileScreens[data-mobile-screen="account"] #viewPanel .checkRow:has(#toggleSideRack),
   3636 .app.mobileScreens[data-mobile-screen="account"] #viewPanel .checkRow:has(#toggleRightRack),
   3637 .app.mobileScreens[data-mobile-screen="account"] #viewPanel .checkRow:has(#toggleReactions),
   3638 .app.mobileScreens[data-mobile-screen="account"] .sidebarFooter {
   3639   display: none !important;
   3640 }
   3641 
   3642 .app.mobileScreens[data-mobile-screen="host"] > .mobileScreenHost {
   3643   gap: 0;
   3644   overflow: auto;
   3645 }
   3646 
   3647 .app.mobileScreens .mobileScreenHost > .peopleDrawer {
   3648   position: relative !important;
   3649   top: 0 !important;
   3650   right: 0 !important;
   3651   bottom: 0 !important;
   3652   left: 0 !important;
   3653   width: 100% !important;
   3654   height: 100% !important;
   3655   border-radius: 0 !important;
   3656   border-left: 0 !important;
   3657   border-right: 0 !important;
   3658   box-shadow: none !important;
   3659 }
   3660 
   3661 .app.mobileScreens .mobileScreenHost > .peopleDrawer .peopleResizeHandle {
   3662   display: none !important;
   3663 }
   3664 
   3665 .app.mobileScreens .reactionsRow,
   3666 .app.mobileScreens .chatReactions {
   3667   display: none !important;
   3668 }
   3669 
   3670 .app.mobileScreens .chatMessages {
   3671   font-size: 13px;
   3672   line-height: 1.24;
   3673   padding: 8px 8px 6px;
   3674 }
   3675 
   3676 .app.mobileScreens .streamStage {
   3677   margin: 8px;
   3678   padding: 8px;
   3679   gap: 6px;
   3680 }
   3681 
   3682 .app.mobileScreens .streamStageVideo {
   3683   max-height: min(28vh, 220px);
   3684 }
   3685 
   3686 .app.mobileScreens .chatMsg {
   3687   padding: 6px 7px;
   3688   margin-top: 6px;
   3689   border-radius: 12px;
   3690 }
   3691 
   3692 .app.mobileScreens .chatMsg .meta {
   3693   font-size: 10px;
   3694   margin-bottom: 2px;
   3695 }
   3696 
   3697 .app.mobileScreens .chatComposer .toolbar [data-chatcmd],
   3698 .app.mobileScreens .chatComposer .toolbar [data-chatemoji],
   3699 .app.mobileScreens .chatComposer .toolbar .sep {
   3700   display: none !important;
   3701 }
   3702 
   3703 .app.mobileScreens .chatComposer .toolbar .chatModToggle:not(.hidden) {
   3704   display: inline-flex !important;
   3705   align-items: center;
   3706   gap: 6px;
   3707 }
   3708 
   3709 .app.mobileScreens [data-rackdrag],
   3710 .app.mobileScreens [data-skinny],
   3711 .app.mobileScreens [data-expand],
   3712 .app.mobileScreens [data-minimize] {
   3713   display: none !important;
   3714 }
   3715 
   3716 .app.mobileScreens #pollinatePanel .toolbar [data-cmd],
   3717 .app.mobileScreens #pollinatePanel .toolbar [data-postemoji],
   3718 .app.mobileScreens #pollinatePanel .toolbar .sep {
   3719   display: none !important;
   3720 }
   3721 
   3722 .app.mobileScreens .chatForm > .primary[type="submit"] {
   3723   align-self: stretch;
   3724   width: 100%;
   3725 }
   3726 
   3727 .app.mobileScreens .chatForm {
   3728   gap: 8px;
   3729   padding: 8px;
   3730   padding-bottom: calc(74px + env(safe-area-inset-bottom, 0px));
   3731 }
   3732 
   3733 .app.mobileScreens .typingIndicator {
   3734   padding: 0 8px 4px;
   3735   min-height: 14px;
   3736 }
   3737 
   3738 .app.mobileScreens .chatHeaderActions {
   3739   margin-left: auto;
   3740 }
   3741 
   3742 .chatContextSelect {
   3743   min-width: 180px;
   3744   max-width: 320px;
   3745 }
   3746 
   3747 .mobileChatSection {
   3748   display: flex;
   3749   flex-direction: column;
   3750   gap: 8px;
   3751 }
   3752 
   3753 .app.mobileScreens .mobileChatList {
   3754   display: flex;
   3755   flex-direction: column;
   3756   gap: 12px;
   3757 }
   3758 
   3759 .app.mobileScreens .chatContextSelect {
   3760   min-width: 132px;
   3761   max-width: 180px;
   3762 }
   3763 
   3764 .app.mobileScreens .mobileChatListItem {
   3765   width: 100%;
   3766   text-align: left;
   3767   padding: 10px;
   3768   border-radius: 12px;
   3769   display: flex;
   3770   flex-direction: column;
   3771   gap: 3px;
   3772 }
   3773 
   3774 .app.mobileScreens .mobileChatListTop {
   3775   font-weight: 800;
   3776 }
   3777 
   3778 .app.mobileScreens .mobileChatListMeta {
   3779   font-size: 12px;
   3780   color: var(--muted);
   3781 }
   3782 
   3783 .app.mobileScreens[data-mobile-screen="hives"] #filterAuthor,
   3784 .app.mobileScreens[data-mobile-screen="hives"] #filterKeywords,
   3785 .app.mobileScreens[data-mobile-screen="hives"] #sortBy {
   3786   display: none !important;
   3787 }
   3788 
   3789 .app.mobileScreens[data-mobile-screen="hives"] .mobileOnlyHiveControl {
   3790   display: inline-flex !important;
   3791   align-items: center;
   3792   justify-content: center;
   3793   min-width: 68px;
   3794   height: 34px;
   3795   padding: 0 10px;
   3796 }
   3797 
   3798 .app.mobileScreens[data-mobile-screen="hives"] #mobileHiveSearch {
   3799   min-width: 42px;
   3800   font-size: 15px;
   3801 }
   3802 
   3803 .app.mobileScreens[data-mobile-screen="hives"] .filters {
   3804   gap: 4px;
   3805   padding: 4px;
   3806 }
   3807 
   3808 .app.mobileScreens[data-mobile-screen="hives"] .hiveTabs {
   3809   flex-wrap: nowrap;
   3810   overflow-x: auto;
   3811   gap: 6px;
   3812   padding: 8px 10px 8px;
   3813   margin-bottom: 0;
   3814 }
   3815 
   3816 .app.mobileScreens[data-mobile-screen="hives"] .hiveTabs button {
   3817   padding: 7px 12px;
   3818   font-size: 12px;
   3819   flex: 0 0 auto;
   3820 }
   3821 
   3822 .app.mobileScreens[data-mobile-screen="hives"] .feed {
   3823   grid-template-columns: 1fr;
   3824   gap: 8px;
   3825   padding: 8px;
   3826 }
   3827 
   3828 .app.mobileScreens[data-mobile-screen="hives"] .post {
   3829   padding: 8px;
   3830   gap: 6px;
   3831   border-radius: 12px;
   3832 }
   3833 
   3834 .app.mobileScreens[data-mobile-screen="hives"] .postTitle {
   3835   font-size: 14px;
   3836   margin-bottom: 2px;
   3837 }
   3838 
   3839 .app.mobileScreens[data-mobile-screen="hives"] .postTitleRow {
   3840   gap: 2px;
   3841 }
   3842 
   3843 .app.mobileScreens[data-mobile-screen="hives"] .post .pfp {
   3844   display: none;
   3845 }
   3846 
   3847 .app.mobileScreens[data-mobile-screen="hives"] .post .small {
   3848   font-size: 11px;
   3849 }
   3850 
   3851 .app.mobileScreens[data-mobile-screen="hives"] .postMeta {
   3852   margin-top: 4px;
   3853   gap: 4px;
   3854 }
   3855 
   3856 .app.mobileScreens[data-mobile-screen="hives"] .tag {
   3857   font-size: 11px;
   3858   padding: 2px 7px;
   3859 }
   3860 
   3861 .app.mobileScreens + .peopleDrawer {
   3862   display: none;
   3863 }
   3864 
   3865 .app.mobileScreens[data-mobile-screen="people"] + .peopleDrawer {
   3866   display: flex !important;
   3867   position: fixed;
   3868   left: 0;
   3869   top: 0;
   3870   right: 0;
   3871   bottom: calc(56px + env(safe-area-inset-bottom, 0px));
   3872   width: 100vw;
   3873   border-radius: 0;
   3874   border-left: 0;
   3875   border-right: 0;
   3876   z-index: 85;
   3877 }
   3878 
   3879 .app.mobileScreens + .dockHotbar {
   3880   display: none !important;
   3881 }
   3882 
   3883 @keyframes fadeIn {
   3884   from {
   3885     opacity: 0;
   3886   }
   3887   to {
   3888     opacity: 1;
   3889   }
   3890 }
   3891 
   3892 @keyframes modalIn {
   3893   from {
   3894     opacity: 0;
   3895     transform: translateY(10px) scale(0.985);
   3896   }
   3897   to {
   3898     opacity: 1;
   3899     transform: translateY(0px) scale(1);
   3900   }
   3901 }
   3902 
   3903 @keyframes drawerIn {
   3904   from {
   3905     opacity: 0;
   3906     transform: translateX(10px) scale(0.995);
   3907   }
   3908   to {
   3909     opacity: 1;
   3910     transform: translateX(0px) scale(1);
   3911   }
   3912 }
   3913 
   3914 @keyframes toastIn {
   3915   from {
   3916     opacity: 0;
   3917     transform: translateY(10px) scale(0.995);
   3918   }
   3919   to {
   3920     opacity: 1;
   3921     transform: translateY(0px) scale(1);
   3922   }
   3923 }
   3924 
   3925 @keyframes popFloat {
   3926   from {
   3927     opacity: 0;
   3928     transform: translateY(6px) scale(0.985);
   3929   }
   3930   to {
   3931     opacity: 1;
   3932     transform: translateY(0px) scale(1);
   3933   }
   3934 }
   3935 
   3936 @keyframes msgIn {
   3937   from {
   3938     opacity: 0.75;
   3939     transform: translateY(6px);
   3940     box-shadow: 0 0 0 rgba(0, 0, 0, 0);
   3941   }
   3942   to {
   3943     opacity: 1;
   3944     transform: translateY(0px);
   3945     box-shadow: 0 0 0 rgba(0, 0, 0, 0);
   3946   }
   3947 }
   3948 
   3949 @keyframes mentionPing {
   3950   0% {
   3951     box-shadow: 0 0 0 2px rgba(255, 62, 165, 0.12);
   3952   }
   3953   45% {
   3954     box-shadow: 0 0 0 2px rgba(255, 62, 165, 0.12), 0 16px 50px rgba(255, 62, 165, 0.12);
   3955   }
   3956   100% {
   3957     box-shadow: 0 0 0 2px rgba(255, 62, 165, 0.14);
   3958   }
   3959 }
   3960 
   3961 @keyframes reactPop {
   3962   0% {
   3963     transform: scale(1);
   3964     filter: brightness(1);
   3965   }
   3966   40% {
   3967     transform: scale(1.08);
   3968     filter: brightness(1.15);
   3969   }
   3970   100% {
   3971     transform: scale(1);
   3972     filter: brightness(1);
   3973   }
   3974 }
   3975 
   3976 .guidedTourOverlay {
   3977   position: fixed;
   3978   inset: 0;
   3979   z-index: 1400;
   3980   pointer-events: none;
   3981 }
   3982 
   3983 .guidedTourShade {
   3984   display: none;
   3985 }
   3986 
   3987 .guidedTourFocus {
   3988   display: none;
   3989 }
   3990 
   3991 .onboardingGateHint {
   3992   margin-top: 8px;
   3993   margin-bottom: 8px;
   3994   border-radius: 12px;
   3995   border: 1px solid color-mix(in oklab, var(--bad) 55%, var(--line) 45%);
   3996   background: linear-gradient(180deg, rgba(255, 77, 138, 0.16), rgba(255, 77, 138, 0.07));
   3997   padding: 10px 12px;
   3998   display: flex;
   3999   align-items: center;
   4000   justify-content: space-between;
   4001   gap: 10px;
   4002 }
   4003 
   4004 .onboardingGateText {
   4005   color: color-mix(in oklab, var(--text) 92%, white 8%);
   4006   font-size: 13px;
   4007   line-height: 1.35;
   4008 }
   4009 
   4010 .guidedTourCard {
   4011   position: absolute;
   4012   left: 50%;
   4013   bottom: 16px;
   4014   transform: translateX(-50%);
   4015   width: min(760px, calc(100vw - 24px));
   4016   border-radius: 14px;
   4017   border: 1px solid color-mix(in oklab, var(--accent) 45%, var(--line));
   4018   background: color-mix(in oklab, var(--panel) 94%, #020204 6%);
   4019   box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45);
   4020   padding: 12px 14px;
   4021   pointer-events: auto;
   4022 }
   4023 
   4024 .guidedTourOverlay[data-cardpos="top"] .guidedTourCard {
   4025   top: 16px;
   4026   bottom: auto;
   4027   left: 50%;
   4028   right: auto;
   4029   transform: translateX(-50%);
   4030 }
   4031 
   4032 .guidedTourOverlay[data-cardpos="left"] .guidedTourCard {
   4033   top: 50%;
   4034   bottom: auto;
   4035   left: 16px;
   4036   right: auto;
   4037   transform: translateY(-50%);
   4038   width: min(560px, calc(100vw - 32px));
   4039 }
   4040 
   4041 .guidedTourOverlay[data-cardpos="right"] .guidedTourCard {
   4042   top: 50%;
   4043   bottom: auto;
   4044   left: auto;
   4045   right: 16px;
   4046   transform: translateY(-50%);
   4047   width: min(560px, calc(100vw - 32px));
   4048 }
   4049 
   4050 .guidedTourStep {
   4051   font-size: 11px;
   4052   letter-spacing: 0.08em;
   4053   text-transform: uppercase;
   4054   color: color-mix(in oklab, var(--accent2) 55%, var(--text) 45%);
   4055   margin-bottom: 4px;
   4056 }
   4057 
   4058 .guidedTourTitle {
   4059   font-size: 18px;
   4060   font-weight: 700;
   4061   margin-bottom: 6px;
   4062 }
   4063 
   4064 .guidedTourBody {
   4065   line-height: 1.45;
   4066 }
   4067 
   4068 .guidedTourTask {
   4069   margin-top: 10px;
   4070   font-size: 13px;
   4071   color: color-mix(in oklab, var(--good) 70%, var(--text) 30%);
   4072 }
   4073 
   4074 .guidedTourStatus {
   4075   margin-top: 6px;
   4076   min-height: 18px;
   4077 }
   4078 
   4079 .guidedTourDontShow {
   4080   display: inline-flex;
   4081   align-items: center;
   4082   gap: 8px;
   4083   margin-top: 6px;
   4084   user-select: none;
   4085 }
   4086 
   4087 .guidedTourDontShow input[type="checkbox"] {
   4088   transform: translateY(0.5px);
   4089 }
   4090 
   4091 .guidedTourActions {
   4092   margin-top: 8px;
   4093   justify-content: flex-end;
   4094   gap: 8px;
   4095 }
   4096 
   4097 .tourTargetPulse {
   4098   outline: 4px solid color-mix(in oklab, var(--accent) 88%, white 12%);
   4099   outline-offset: 5px;
   4100   border-radius: 10px;
   4101   box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2), 0 0 42px rgba(255, 62, 165, 0.45), 0 0 92px rgba(184, 75, 255, 0.35);
   4102   animation: tourPulse 1.1s ease-in-out infinite alternate;
   4103 }
   4104 
   4105 @keyframes tourPulse {
   4106   from {
   4107     outline-color: color-mix(in oklab, var(--accent) 90%, white 10%);
   4108     box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2), 0 0 42px rgba(255, 62, 165, 0.45), 0 0 92px rgba(184, 75, 255, 0.35);
   4109   }
   4110   to {
   4111     outline-color: color-mix(in oklab, var(--accent2) 86%, white 14%);
   4112     box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.28), 0 0 58px rgba(255, 62, 165, 0.55), 0 0 120px rgba(184, 75, 255, 0.45);
   4113   }
   4114 }
   4115 
   4116 .app.authLockedWorkspace {
   4117   filter: blur(20px) saturate(0.6) brightness(0.45) contrast(0.9);
   4118   pointer-events: none;
   4119   user-select: none;
   4120 }
   4121 
   4122 .app.authLockedWorkspace .peopleToggle,
   4123 .app.authLockedWorkspace .rightRackToggle,
   4124 .app.authLockedWorkspace .sideRackToggle {
   4125   display: none !important;
   4126 }
   4127 
   4128 .rackPanel.tourContextDim {
   4129   filter: brightness(0.55) saturate(0.75);
   4130   opacity: 0.7;
   4131   transition: filter 180ms ease, opacity 180ms ease;
   4132 }
   4133 
   4134 .bzlSplash {
   4135   position: fixed;
   4136   inset: 0;
   4137   z-index: 1700;
   4138   display: flex;
   4139   align-items: center;
   4140   justify-content: center;
   4141   background:
   4142     radial-gradient(1400px 740px at 50% 28%, rgba(38, 235, 255, 0.24), rgba(4, 9, 22, 0.97)),
   4143     linear-gradient(130deg, rgba(7, 10, 20, 0.98), rgba(4, 7, 16, 0.98));
   4144   overflow: hidden;
   4145   transition: opacity 420ms ease;
   4146 }
   4147 
   4148 .bzlSplash.hidden {
   4149   opacity: 0;
   4150   pointer-events: none;
   4151 }
   4152 
   4153 .bzlSplashFx {
   4154   position: absolute;
   4155   inset: -20%;
   4156   background:
   4157     radial-gradient(circle at 20% 35%, rgba(72, 249, 255, 0.2), transparent 34%),
   4158     radial-gradient(circle at 78% 68%, rgba(255, 60, 186, 0.16), transparent 36%),
   4159     repeating-linear-gradient(
   4160       to bottom,
   4161       rgba(255, 255, 255, 0.02) 0px,
   4162       rgba(255, 255, 255, 0.02) 1px,
   4163       transparent 3px,
   4164       transparent 8px
   4165     );
   4166   filter: blur(0.3px) saturate(1.2);
   4167   animation: splashDrift 9s ease-in-out infinite alternate;
   4168 }
   4169 
   4170 .bzlSplashCore {
   4171   position: relative;
   4172   width: min(380px, calc(100vw - 28px));
   4173   display: flex;
   4174   flex-direction: column;
   4175   align-items: center;
   4176   gap: 8px;
   4177   padding: 24px 20px 18px;
   4178   border-radius: 18px;
   4179   border: 1px solid rgba(111, 248, 255, 0.25);
   4180   background:
   4181     linear-gradient(180deg, rgba(18, 28, 44, 0.75), rgba(8, 14, 28, 0.84)),
   4182     rgba(9, 12, 24, 0.86);
   4183   box-shadow:
   4184     0 30px 80px rgba(0, 0, 0, 0.48),
   4185     inset 0 0 0 1px rgba(255, 255, 255, 0.05),
   4186     0 0 40px rgba(66, 239, 255, 0.2);
   4187 }
   4188 
   4189 .bzlSplashRing {
   4190   position: absolute;
   4191   width: 172px;
   4192   height: 172px;
   4193   border-radius: 50%;
   4194   border: 1px solid rgba(95, 246, 255, 0.5);
   4195   box-shadow: 0 0 36px rgba(95, 246, 255, 0.26), inset 0 0 22px rgba(255, 255, 255, 0.06);
   4196   animation: splashRing 1.7s ease-in-out infinite;
   4197   pointer-events: none;
   4198 }
   4199 
   4200 .bzlSplashLogo {
   4201   width: clamp(84px, 13vw, 150px);
   4202   height: auto;
   4203   filter: drop-shadow(0 0 22px rgba(60, 245, 255, 0.6));
   4204   animation: splashBreathe 950ms ease-in-out infinite alternate;
   4205 }
   4206 
   4207 .bzlSplashWord {
   4208   font-size: clamp(28px, 4vw, 36px);
   4209   font-weight: 800;
   4210   letter-spacing: 0.12em;
   4211   text-transform: uppercase;
   4212   color: #effcff;
   4213   text-shadow: 0 0 18px rgba(94, 246, 255, 0.42);
   4214 }
   4215 
   4216 .bzlSplashTag {
   4217   margin-top: -2px;
   4218   color: color-mix(in oklab, var(--text) 72%, #9defff 28%);
   4219 }
   4220 
   4221 .bzlSplashProgress {
   4222   width: 100%;
   4223   height: 7px;
   4224   border-radius: 999px;
   4225   border: 1px solid rgba(111, 248, 255, 0.3);
   4226   background: rgba(6, 11, 20, 0.65);
   4227   overflow: hidden;
   4228 }
   4229 
   4230 .bzlSplashProgressFill {
   4231   width: 100%;
   4232   height: 100%;
   4233   transform: scaleX(0);
   4234   transform-origin: 0 50%;
   4235   background: linear-gradient(90deg, #4df8ff, #6ce9ff, #ff65c8);
   4236   box-shadow: 0 0 14px rgba(103, 240, 255, 0.6);
   4237 }
   4238 
   4239 .bzlSplashStartBtn {
   4240   margin-top: 2px;
   4241 }
   4242 
   4243 @keyframes splashDrift {
   4244   from {
   4245     transform: translate3d(-1.2%, -0.8%, 0) scale(1);
   4246   }
   4247   to {
   4248     transform: translate3d(1.2%, 1.3%, 0) scale(1.03);
   4249   }
   4250 }
   4251 
   4252 @keyframes splashRing {
   4253   0% {
   4254     transform: scale(0.95);
   4255     opacity: 0.72;
   4256   }
   4257   60% {
   4258     transform: scale(1.04);
   4259     opacity: 1;
   4260   }
   4261   100% {
   4262     transform: scale(0.97);
   4263     opacity: 0.8;
   4264   }
   4265 }
   4266 
   4267 @keyframes splashBreathe {
   4268   from {
   4269     transform: scale(0.98);
   4270     opacity: 0.86;
   4271   }
   4272   to {
   4273     transform: scale(1.03);
   4274     opacity: 1;
   4275   }
   4276 }
   4277 
   4278 .authGate {
   4279   position: fixed;
   4280   inset: 0;
   4281   z-index: 1650;
   4282   display: grid;
   4283   place-items: center;
   4284   pointer-events: auto;
   4285   background: rgba(5, 8, 16, 0.42);
   4286   backdrop-filter: blur(12px) saturate(1.05);
   4287   -webkit-backdrop-filter: blur(12px) saturate(1.05);
   4288 }
   4289 
   4290 .authGateInner {
   4291   width: min(880px, calc(100vw - 24px));
   4292   max-height: calc(100vh - 24px);
   4293   overflow: auto;
   4294   display: grid;
   4295   grid-template-columns: minmax(280px, 360px) minmax(0, 1fr);
   4296   gap: 12px;
   4297 }
   4298 
   4299 .authGateCard,
   4300 .authGateOnboarding {
   4301   border: 1px solid color-mix(in oklab, var(--line) 66%, var(--accent) 34%);
   4302   border-radius: 14px;
   4303   background: color-mix(in oklab, var(--panel) 96%, #010204 4%);
   4304   box-shadow: 0 22px 62px rgba(0, 0, 0, 0.4);
   4305   padding: 12px;
   4306 }
   4307 
   4308 .authGateForm {
   4309   margin-top: 8px;
   4310 }
   4311 
   4312 @media (max-width: 920px) {
   4313   .authGateInner {
   4314     grid-template-columns: 1fr;
   4315   }
   4316 }
   4317 
   4318 @media (max-width: 780px) {
   4319   .guidedTourCard {
   4320     width: calc(100vw - 14px);
   4321     left: 7px;
   4322     right: 7px;
   4323     bottom: 8px;
   4324     transform: none;
   4325     padding: 10px;
   4326   }
   4327 
   4328   .guidedTourTitle {
   4329     font-size: 16px;
   4330   }
   4331 }
   4332 
   4333 @media (prefers-reduced-motion: reduce) {
   4334   *,
   4335   *::before,
   4336   *::after {
   4337     animation: none !important;
   4338     transition: none !important;
   4339     scroll-behavior: auto !important;
   4340   }
   4341 }