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