A fork of pds-dash-fork for pds.solanaceae.net
at main 12 kB view raw
1/* Modern Theme for pds-dash */ 2 3:root { 4 /* Dark theme derived from provided OKLCH palette */ 5 color-scheme: dark; 6 7 /* Base and content colors */ 8 --color-base-100: oklch(25.33% 0.016 252.42); 9 --color-base-200: oklch(23.26% 0.014 253.1); 10 --color-base-300: oklch(21.15% 0.012 254.09); 11 --color-base-content: oklch(97.807% 0.029 256.847); 12 13 /* Brand and semantic colors */ 14 --color-primary: oklch(58% 0.233 277.117); 15 --color-primary-content: oklch(96% 0.018 272.314); 16 --color-secondary: oklch(65% 0.241 354.308); 17 --color-secondary-content: oklch(94% 0.028 342.258); 18 --color-accent: oklch(77% 0.152 181.912); 19 --color-accent-content: oklch(38% 0.063 188.416); 20 --color-neutral: oklch(14% 0.005 285.823); 21 --color-neutral-content: oklch(92% 0.004 286.32); 22 --color-info: oklch(74% 0.16 232.661); 23 --color-info-content: oklch(29% 0.066 243.157); 24 --color-success: oklch(76% 0.177 163.223); 25 --color-success-content: oklch(37% 0.077 168.94); 26 --color-warning: oklch(82% 0.189 84.429); 27 --color-warning-content: oklch(41% 0.112 45.904); 28 --color-error: oklch(71% 0.194 13.428); 29 --color-error-content: oklch(27% 0.105 12.094); 30 31 /* Radii, sizes, borders */ 32 --radius-selector: 0.5rem; 33 --radius-field: 0.25rem; 34 --radius-box: 0.5rem; 35 --size-selector: 0.25rem; 36 --size-field: 0.25rem; 37 --border: 1px; 38 --depth: 1; 39 --noise: 0; 40 41 /* Map existing theme variables to the new palette for minimal changes elsewhere */ 42 --background-color: var(--color-base-300); 43 --header-background-color: var(--color-base-200); 44 --content-background-color: var(--color-base-200); 45 --text-color: var(--color-base-content); 46 --text-secondary-color: color-mix( 47 in oklab, 48 var(--color-base-content) 70%, 49 var(--color-base-100) 50 ); 51 --border-color: var(--color-base-300); 52 --link-color: var(--color-primary); 53 --link-hover-color: var(--color-primary-content); 54 --time-color: var(--color-secondary); 55 --indicator-inactive-color: var(--color-base-300); 56 --indicator-active-color: var(--color-primary); 57 58 /* Subtle hover background for dark */ 59 --button-hover: color-mix( 60 in oklab, 61 var(--color-base-200) 80%, 62 var(--color-base-content) 63 ); 64} 65 66body { 67 margin: 0; 68 display: flex; 69 place-items: center; 70 min-width: 320px; 71 min-height: 100vh; 72 background-color: var(--background-color); 73 font-family: 74 "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, 75 Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 76 font-size: 18px; 77 line-height: 1.5; 78 color: var(--text-color); 79 border-color: var(--border-color); 80 overflow-wrap: break-word; 81 word-break: break-word; 82 hyphens: none; 83} 84 85a { 86 font-weight: 500; 87 color: var(--link-color); 88 text-decoration: none; 89 transition: color 0.15s ease; 90} 91a:hover { 92 color: var(--link-hover-color); 93} 94 95h1 { 96 font-size: 2.5em; 97 line-height: 1.2; 98 font-weight: 700; 99} 100 101#app { 102 max-width: 1400px; 103 width: 100%; 104 margin: 0 auto; 105 padding: 0; 106 text-align: center; 107} 108 109/* Post Component */ 110#postContainer { 111 display: flex; 112 flex-direction: column; 113 border-radius: 12px; 114 border: 1px solid var(--border-color); 115 background-color: var(--content-background-color); 116 margin-bottom: 20px; 117 overflow-wrap: break-word; 118 overflow: hidden; 119 box-shadow: var(--card-shadow); 120 transition: transform 0.2s ease, box-shadow 0.2s ease; 121} 122 123#postContainer:hover { 124 transform: translateY(-2px); 125 box-shadow: 126 0 10px 15px -3px rgba(0, 0, 0, 0.1), 127 0 4px 6px -2px rgba(0, 0, 0, 0.05); 128} 129 130#postHeader { 131 display: flex; 132 flex-direction: row; 133 align-items: center; 134 justify-content: start; 135 background-color: var(--header-background-color); 136 padding: 12px 16px; 137 height: 60px; 138 border-bottom: 1px solid var(--border-color); 139 font-weight: 600; 140 overflow-wrap: break-word; 141} 142 143#displayName { 144 display: block; 145 color: var(--text-color); 146 font-size: 1.1em; 147 padding: 0; 148 margin: 0 0 2px 0; 149 text-overflow: ellipsis; 150 overflow: hidden; 151 white-space: nowrap; 152 width: 100%; 153 letter-spacing: -0.01em; 154} 155 156#handle { 157 display: flex; 158 align-items: center; 159 color: #6b7280; 160 font-size: 0.85em; 161 font-weight: 400; 162 padding: 0; 163 margin: 0; 164 gap: 8px; 165} 166 167#postLink { 168 color: var(--time-color); 169 font-size: 0.85em; 170 padding: 0; 171 margin: 0; 172 opacity: 0.9; 173} 174 175#postContent { 176 display: flex; 177 text-align: start; 178 flex-direction: column; 179 padding: 16px; 180 background-color: var(--content-background-color); 181 color: var(--text-color); 182 overflow-wrap: break-word; 183 white-space: pre-line; 184 line-height: 1.6; 185} 186 187#replyingText, #quotingText { 188 font-size: 0.8em; 189 margin: 0; 190 padding: 0 0 10px 0; 191 color: #6b7280; 192} 193 194#postText { 195 margin: 0 0 8px 0; 196 padding: 0; 197 overflow-wrap: break-word; 198 word-break: break-word; 199 hyphens: none; 200 font-size: 1.05em; 201} 202 203#headerText { 204 margin-left: 12px; 205 font-size: 0.9em; 206 text-align: start; 207 word-break: break-word; 208 max-width: 80%; 209 max-height: 95%; 210 overflow: hidden; 211 align-self: flex-start; 212 margin-top: auto; 213 margin-bottom: auto; 214} 215 216#carouselContainer { 217 position: relative; 218 width: 100%; 219 margin-top: 12px; 220 display: flex; 221 flex-direction: column; 222 align-items: center; 223 border-radius: 8px; 224 overflow: hidden; 225} 226 227#carouselControls { 228 display: flex; 229 justify-content: space-between; 230 align-items: center; 231 width: 100%; 232 max-width: 500px; 233 margin-top: 10px; 234} 235 236#carouselIndicators { 237 display: flex; 238 gap: 6px; 239} 240 241.indicator { 242 width: 6px; 243 height: 6px; 244 background-color: var(--indicator-inactive-color); 245 border-radius: 50%; 246 transition: background-color 0.2s ease, transform 0.2s ease; 247} 248 249.indicator.active { 250 background-color: var(--indicator-active-color); 251 transform: scale(1.3); 252} 253 254#prevBtn, 255#nextBtn { 256 background-color: var(--button-bg); 257 color: var(--text-color); 258 border: 1px solid var(--border-color); 259 width: 32px; 260 height: 32px; 261 cursor: pointer; 262 display: flex; 263 align-items: center; 264 justify-content: center; 265 border-radius: 50%; 266 transition: background-color 0.15s ease, transform 0.15s ease; 267 font-size: 16px; 268} 269 270#prevBtn:hover:not(:disabled), 271#nextBtn:hover:not(:disabled) { 272 background-color: var(--button-hover); 273 transform: scale(1.05); 274} 275 276#prevBtn:disabled, 277#nextBtn:disabled { 278 opacity: 0.4; 279 cursor: not-allowed; 280} 281 282#embedVideo { 283 width: 100%; 284 max-width: 500px; 285 margin-top: 12px; 286 align-self: center; 287 border-radius: 8px; 288 overflow: hidden; 289} 290 291#embedImages { 292 min-width: min(100%, 500px); 293 max-width: min(100%, 500px); 294 max-height: 500px; 295 object-fit: contain; 296 margin: 0; 297 border-radius: 8px; 298} 299 300/* Account Component */ 301#accountContainer { 302 display: flex; 303 text-align: start; 304 align-items: center; 305 background-color: var(--content-background-color); 306 padding: 12px; 307 margin-bottom: 15px; 308 border: 1px solid var(--border-color); 309 border-radius: 12px; 310 transition: background-color 0.15s ease; 311} 312 313#accountContainer:hover { 314 background-color: var(--hover-bg); 315} 316 317#accountName { 318 margin-left: 12px; 319 font-size: 0.95em; 320 max-width: 80%; 321 overflow: hidden; 322 text-overflow: ellipsis; 323 white-space: nowrap; 324 font-weight: 500; 325} 326 327#avatar { 328 width: 48px; 329 height: 48px; 330 margin: 0; 331 object-fit: cover; 332 border-radius: 50%; 333 border: 2px solid white; 334 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); 335} 336 337/* App.Svelte Layout */ 338#Content { 339 display: flex; 340 width: 100%; 341 height: 100%; 342 flex-direction: row; 343 justify-content: space-between; 344 align-items: center; 345 background-color: var(--background-color); 346 color: var(--text-color); 347 gap: 24px; 348} 349 350#Feed { 351 overflow-y: auto; 352 width: 65%; 353 height: 100vh; 354 padding-right: 16px; 355 align-self: flex-start; 356} 357 358#spacer { 359 padding: 0; 360 margin: 0; 361 height: 10vh; 362 width: 100%; 363} 364 365#Account { 366 width: 35%; 367 display: flex; 368 flex-direction: column; 369 border: 1px solid var(--border-color); 370 background-color: var(--content-background-color); 371 max-height: 80vh; 372 padding: 24px; 373 margin-left: 16px; 374 border-radius: 12px; 375 box-shadow: var(--card-shadow); 376} 377 378#accountsList { 379 display: flex; 380 flex-direction: column; 381 overflow-y: auto; 382 height: 100%; 383 width: 100%; 384 padding: 8px 0; 385 margin: 0; 386} 387 388#Header { 389 text-align: center; 390 font-size: 1.8em; 391 margin-bottom: 16px; 392 font-weight: 700; 393 background: linear-gradient(to right, var(--link-color), #8b5cf6); 394 -webkit-background-clip: text; 395 -webkit-text-fill-color: transparent; 396 background-clip: text; 397} 398 399/* Mobile Styles */ 400@media screen and (max-width: 768px) { 401 #Content { 402 flex-direction: column; 403 width: auto; 404 padding: 12px; 405 margin-top: 0; 406 } 407 408 #Account { 409 width: calc(100% - 32px); 410 padding: 16px; 411 margin-bottom: 20px; 412 margin-left: 0; 413 margin-right: 0; 414 height: auto; 415 order: -1; 416 } 417 418 #Feed { 419 width: 100%; 420 margin: 0; 421 padding: 0; 422 overflow-y: visible; 423 } 424 425 #spacer { 426 height: 5vh; 427 } 428 429 body { 430 font-size: 16px; 431 } 432 433 #postHeader { 434 padding: 10px; 435 height: auto; 436 min-height: 50px; 437 } 438} 439 440/* Scrollbar Styles */ 441::-webkit-scrollbar { 442 width: 0px; 443 background: transparent; 444 padding: 0; 445 margin: 0; 446} 447::-webkit-scrollbar-thumb { 448 background: transparent; 449 border-radius: 0; 450} 451::-webkit-scrollbar-track { 452 background: transparent; 453 border-radius: 0; 454} 455::-webkit-scrollbar-corner { 456 background: transparent; 457 border-radius: 0; 458} 459::-webkit-scrollbar-button { 460 background: transparent; 461 border-radius: 0; 462} 463 464* { 465 scrollbar-width: none; 466 scrollbar-color: transparent transparent; 467 -ms-overflow-style: none; /* IE and Edge */ 468 -webkit-overflow-scrolling: touch; 469 -webkit-scrollbar: none; /* Safari */ 470} 471 472:root { 473 /* Dark theme derived from provided OKLCH palette (applied via valid :root) */ 474 color-scheme: dark; 475 476 /* Base and content colors */ 477 --color-base-100: oklch(25.33% 0.016 252.42); 478 --color-base-200: oklch(23.26% 0.014 253.1); 479 --color-base-300: oklch(21.15% 0.012 254.09); 480 --color-base-content: oklch(97.807% 0.029 256.847); 481 482 /* Brand and semantic colors */ 483 --color-primary: oklch(58% 0.233 277.117); 484 --color-primary-content: oklch(96% 0.018 272.314); 485 --color-secondary: oklch(65% 0.241 354.308); 486 --color-secondary-content: oklch(94% 0.028 342.258); 487 --color-accent: oklch(77% 0.152 181.912); 488 --color-accent-content: oklch(38% 0.063 188.416); 489 --color-neutral: oklch(14% 0.005 285.823); 490 --color-neutral-content: oklch(92% 0.004 286.32); 491 --color-info: oklch(74% 0.16 232.661); 492 --color-info-content: oklch(29% 0.066 243.157); 493 --color-success: oklch(76% 0.177 163.223); 494 --color-success-content: oklch(37% 0.077 168.94); 495 --color-warning: oklch(82% 0.189 84.429); 496 --color-warning-content: oklch(41% 0.112 45.904); 497 --color-error: oklch(71% 0.194 13.428); 498 --color-error-content: oklch(27% 0.105 12.094); 499 500 /* Radii, sizes, borders */ 501 --radius-selector: 0.5rem; 502 --radius-field: 0.25rem; 503 --radius-box: 0.5rem; 504 --size-selector: 0.25rem; 505 --size-field: 0.25rem; 506 --border: 1px; 507 --depth: 1; 508 --noise: 0; 509 510 /* Mappings for the rest of the CSS */ 511 --background-color: var(--color-base-300); 512 --header-background-color: var(--color-base-200); 513 --content-background-color: var(--color-base-200); 514 --text-color: var(--color-base-content); 515 --text-secondary-color: color-mix( 516 in oklab, 517 var(--color-base-content) 70%, 518 var(--color-base-100) 519 ); 520 --border-color: var(--color-base-300); 521 --link-color: var(--color-primary); 522 --link-hover-color: var(--color-primary-content); 523 --time-color: var(--color-secondary); 524 --indicator-inactive-color: var(--color-base-300); 525 --indicator-active-color: var(--color-primary); 526 527 /* Subtle hover background for dark */ 528 --button-hover: color-mix( 529 in oklab, 530 var(--color-base-200) 80%, 531 var(--color-base-content) 532 ); 533}