diff --git a/.gitignore b/.gitignore index c78b717..9dae9a3 100644 --- a/.gitignore +++ b/.gitignore @@ -26,10 +26,6 @@ !public/ !public/** -# Sass sources -!sass/ -!sass/** - # Nix !flake.lock !flake.nix diff --git a/flake.nix b/flake.nix index 5488339..7d8f8fb 100644 --- a/flake.nix +++ b/flake.nix @@ -46,7 +46,6 @@ ./Cargo.toml ./Cargo.lock ./src - ./sass ./public ./config ]; @@ -56,7 +55,6 @@ nativeBuildInputs = [ pkgs.pkg-config - pkgs.dart-sass ]; doCheck = false; @@ -65,9 +63,6 @@ mkdir -p $out/share/teapot cp -r public $out/share/teapot/ cp -r config $out/share/teapot/ - # Compile SCSS - sass sass/index.scss:$out/share/teapot/public/css/style.css \ - --load-path=sass/include --style=compressed --no-source-map ''; meta = with pkgs.lib; { diff --git a/sass/general.scss b/public/css/general.css similarity index 59% rename from sass/general.scss rename to public/css/general.css index e6247d6..2b060ca 100644 --- a/sass/general.scss +++ b/public/css/general.css @@ -1,20 +1,29 @@ -@import "_variables"; -@import "_mixins"; - .panel-container { margin: auto; font-size: 130%; } .error-panel { - @include center-panel(var(--error_red)); + padding: 12px; + border-radius: 4px; + display: flex; + background: var(--error_red); + box-shadow: 0 0 15px var(--shadow_dark); + margin: auto; + margin-top: -50px; text-align: center; } .search-bar > form { - @include center-panel(var(--darkest_grey)); + padding: 12px; + border-radius: 4px; + display: flex; + background: var(--darkest_grey); + box-shadow: 0 0 15px var(--shadow_dark); + margin: auto; + margin-top: -50px; - button { + & button { background: var(--bg_elements); color: var(--fg_color); border: 0; @@ -26,7 +35,7 @@ padding: 0px 5px 1px 8px; } - input { + & input { font-size: 16px; width: 100%; background: var(--bg_elements); diff --git a/sass/inputs.scss b/public/css/inputs.css similarity index 85% rename from sass/inputs.scss rename to public/css/inputs.css index aafa5b8..d60d0b8 100644 --- a/sass/inputs.scss +++ b/public/css/inputs.css @@ -1,8 +1,4 @@ -@import "_variables"; -@import "_mixins"; - button { - @include input-colors; background-color: var(--bg_elements); color: var(--fg_color); border: 1px solid var(--accent_border); @@ -10,19 +6,34 @@ button { font-size: 14px; cursor: pointer; float: right; + + &:hover { + border-color: var(--accent); + } + + &:active { + border-color: var(--accent_light); + } } input[type="text"], input[type="date"], input[type="number"], select { - @include input-colors; background-color: var(--bg_elements); padding: 1px 4px; color: var(--fg_color); border: 1px solid var(--accent_border); border-radius: 0; font-size: 14px; + + &:hover { + border-color: var(--accent); + } + + &:active { + border-color: var(--accent_light); + } } input[type="number"] { @@ -74,19 +85,19 @@ input::-webkit-datetime-edit-year-field:focus { } .date-range { - .date-input { + & .date-input { display: inline-block; position: relative; } - .icon-container { + & .icon-container { pointer-events: none; position: absolute; top: 2px; right: 5px; } - .search-title { + & .search-title { margin: 0 2px; } } @@ -129,7 +140,7 @@ input::-webkit-datetime-edit-year-field:focus { user-select: none; padding-right: 22px; - input { + & input { position: absolute; opacity: 0; cursor: pointer; @@ -149,11 +160,11 @@ input::-webkit-datetime-edit-year-field:focus { border-color: var(--accent_light); } - .checkbox:after { + & .checkbox:after { left: 2px; bottom: 0; font-size: 13px; - font-family: $font_1; + font-family: fontello; content: "\e811"; } } @@ -163,15 +174,15 @@ input::-webkit-datetime-edit-year-field:focus { } .preferences { - button { + & button { margin: 6px 0 3px 0; } - label { + & label { padding-right: 150px; } - select { + & select { position: absolute; top: 0; right: 0; @@ -181,23 +192,23 @@ input::-webkit-datetime-edit-year-field:focus { appearance: none; } - input[type="text"], - input[type="number"] { + & input[type="text"], + & input[type="number"] { position: absolute; right: 0; max-width: 140px; } - .pref-group { + & .pref-group { display: block; } - .pref-input { + & .pref-input { position: relative; margin-bottom: 6px; } - .pref-reset { + & .pref-reset { float: left; } } diff --git a/sass/navbar.scss b/public/css/navbar.css similarity index 93% rename from sass/navbar.scss rename to public/css/navbar.css index 86bfbe7..c980b27 100644 --- a/sass/navbar.scss +++ b/public/css/navbar.css @@ -1,19 +1,17 @@ -@import "_variables"; - nav { display: flex; align-items: center; position: fixed; background-color: var(--bg_overlays); - box-shadow: 0 0 4px $shadow; + box-shadow: 0 0 4px var(--shadow); padding: 0; width: 100%; height: 50px; z-index: 1000; font-size: 16px; - a, - .icon-button button { + & a, + & .icon-button button { color: var(--fg_nav); } } diff --git a/public/css/profile/base.css b/public/css/profile/base.css new file mode 100644 index 0000000..0216f8f --- /dev/null +++ b/public/css/profile/base.css @@ -0,0 +1,85 @@ +@import "card.css"; +@import "photo-rail.css"; + +.profile-tabs { + max-width: 900px; + margin: 0 auto; + float: none; + border-radius: 0; + position: relative; + width: auto; + + & .timeline-container { + float: right; + width: 68% !important; + max-width: unset; + } +} + +.profile-banner { + margin-bottom: 4px; + background-color: var(--bg_panel); + + & a { + display: block; + position: relative; + padding: 33.34% 0 0 0; + } + + & img { + max-width: 100%; + position: absolute; + top: 0; + } +} + +.profile-tab { + padding: 0 4px 0 0; + box-sizing: border-box; + display: inline-block; + font-size: 14px; + text-align: left; + vertical-align: top; + max-width: 32%; + top: 50px; +} + +.profile-result { + min-height: 54px; + + & .username { + margin: 0 !important; + } + + & .tweet-header { + margin-bottom: unset; + } +} + +@media (max-width: 700px) { + .profile-tabs { + width: 100vw; + max-width: 600px; + + & .timeline-container { + width: 100% !important; + + & .tab-item wide { + flex-grow: 1.4; + } + } + } + + .profile-tab { + width: 100%; + max-width: unset; + position: initial !important; + padding: 0; + } +} + +@media (min-height: 900px) { + .profile-tab.sticky { + position: sticky; + } +} diff --git a/public/css/profile/card.css b/public/css/profile/card.css new file mode 100644 index 0000000..8aa310e --- /dev/null +++ b/public/css/profile/card.css @@ -0,0 +1,134 @@ +.profile-card { + flex-wrap: wrap; + background: var(--bg_panel); + padding: 12px; + display: flex; +} + +.profile-card-info { + overflow: hidden; + overflow-wrap: break-word; + width: 100%; +} + +.profile-card-tabs-name { + overflow: hidden; + overflow-wrap: break-word; + max-width: 100%; +} + +.profile-card-username { + overflow: hidden; + overflow-wrap: break-word; + color: var(--fg_color); + font-size: 14px; + display: block; +} + +.profile-card-fullname { + overflow: hidden; + overflow-wrap: break-word; + color: var(--fg_color); + font-size: 16px; + font-weight: bold; + text-shadow: none; + max-width: 100%; +} + +.profile-card-avatar { + display: inline-block; + position: relative; + width: 100%; + margin-right: 4px; + margin-bottom: 6px; + + &:after { + content: ''; + display: block; + margin-top: 100%; + } + + & img { + box-sizing: border-box; + position: absolute; + width: 100%; + height: 100%; + border: 4px solid var(--darker_grey); + background: var(--bg_panel); + } +} + +.profile-card-extra { + display: contents; + flex: 100%; + margin-top: 7px; + + & .profile-bio { + overflow: hidden; + overflow-wrap: break-word; + width: 100%; + margin: 4px -6px 6px 0; + white-space: pre-wrap; + + & p { + margin: 0; + } + } + + & .profile-joindate, + & .profile-location, + & .profile-website { + color: var(--fg_faded); + margin: 1px 0; + width: 100%; + } +} + +.profile-card-extra-links { + margin-top: 8px; + font-size: 14px; + width: 100%; +} + +.profile-statlist { + display: flex; + flex-wrap: wrap; + padding: 0; + width: 100%; + justify-content: space-between; + + & li { + display: table-cell; + text-align: center; + } +} + +.profile-stat-header { + font-weight: bold; + color: var(--profile_stat); +} + +.profile-stat-num { + display: block; + color: var(--profile_stat); +} + +@media (max-width: 700px) { + .profile-card-info { + display: flex; + } + + .profile-card-tabs-name { + flex-shrink: 100; + } + + .profile-card-avatar { + width: 80px; + height: 80px; + + & img { + border-width: 2px; + width: unset; + } + } +} diff --git a/public/css/profile/photo-rail.css b/public/css/profile/photo-rail.css new file mode 100644 index 0000000..879518b --- /dev/null +++ b/public/css/profile/photo-rail.css @@ -0,0 +1,106 @@ +.photo-rail { + &-card { + float: left; + background: var(--bg_panel); + border-radius: 0 0 4px 4px; + width: 100%; + margin: 5px 0; + } + + &-header { + padding: 5px 12px 0; + } + + &-header-mobile { + display: none; + box-sizing: border-box; + padding: 5px 12px 0; + width: 100%; + float: unset; + color: var(--accent); + justify-content: space-between; + } + + &-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + grid-gap: 3px 3px; + padding: 5px 12px 12px; + + & a { + position: relative; + border-radius: 5px; + background-color: var(--darker_grey); + + &:before { + content: ""; + display: block; + padding-top: 100%; + } + } + + & img { + height: 100%; + width: 100%; + border-radius: 4px; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + } + } +} + +/* create-toggle(photo-rail-grid, 640px) */ +#photo-rail-grid-toggle { + display: none; + + &:checked ~ .photo-rail-grid { + max-height: 640px; + } + + &:checked ~ label .icon-down:before { + transform: rotate(180deg) translateY(-1px); + } +} + +#photo-rail-grid-toggle:checked ~ .photo-rail-grid { + padding-bottom: 12px; +} + +@media (max-width: 700px) { + .photo-rail-header { + display: none; + } + + .photo-rail-header-mobile { + display: flex; + } + + .photo-rail-grid { + max-height: 0; + padding-bottom: 0; + overflow: hidden; + transition: max-height 0.4s; + } + + .photo-rail-grid { + grid-template-columns: repeat(6, 1fr); + } + + #photo-rail-grid-toggle:checked ~ .photo-rail-grid { + max-height: 300px; + } +} + +@media (max-width: 450px) { + .photo-rail-grid { + grid-template-columns: repeat(4, 1fr); + } + + #photo-rail-grid-toggle:checked ~ .photo-rail-grid { + max-height: 450px; + } +} diff --git a/public/css/search.css b/public/css/search.css new file mode 100644 index 0000000..54f0be0 --- /dev/null +++ b/public/css/search.css @@ -0,0 +1,206 @@ +.search-title { + font-weight: bold; + display: inline-block; + margin-top: 4px; +} + +.search-field { + display: flex; + flex-wrap: wrap; + + & button { + margin: 0 2px 0 0; + padding: 0px 1px 1px 4px; + height: 23px; + display: flex; + align-items: center; + } + + & .pref-input { + margin: 0 4px 0 0; + flex-grow: 1; + height: 23px; + } + + & input[type="text"], + & input[type="number"] { + height: calc(100% - 4px); + width: calc(100% - 8px); + } + + & > label { + display: inline; + background-color: var(--bg_elements); + color: var(--fg_color); + border: 1px solid var(--accent_border); + padding: 1px 1px 2px 4px; + font-size: 14px; + cursor: pointer; + margin-bottom: 2px; + + &:hover { + border-color: var(--accent); + } + + &:active { + border-color: var(--accent_light); + } + } + + /* create-toggle(search-panel, 380px) */ + & #search-panel-toggle { + display: none; + + &:checked ~ .search-panel { + max-height: 380px; + } + + &:checked ~ label .icon-down:before { + transform: rotate(180deg) translateY(-1px); + } + } +} + +.search-panel { + width: 100%; + max-height: 0; + overflow: hidden; + transition: max-height 0.4s; + + flex-grow: 1; + font-weight: initial; + text-align: left; + + & .checkbox-container { + display: inline; + padding-right: unset; + margin-bottom: 5px; + margin-left: 23px; + } + + & .checkbox { + right: unset; + left: -22px; + line-height: 1.6em; + } + + & .checkbox-container .checkbox:after { + top: -4px; + } +} + +.search-row { + display: flex; + flex-wrap: wrap; + line-height: unset; + + & > div { + flex-grow: 1; + flex-shrink: 1; + } + + & input { + height: 21px; + } + + & .pref-input { + display: block; + padding-bottom: 5px; + + & input { + height: 21px; + margin-top: 1px; + } + } +} + +.search-toggles { + flex-grow: 1; + display: grid; + grid-template-columns: repeat(5, auto); + grid-column-gap: 10px; +} + +/* search-resize expansions for .profile-tabs context */ +.profile-tabs { + @media (max-width: 820px) { + & .search-toggles { + grid-template-columns: repeat(5, auto); + } + + & #search-panel-toggle:checked ~ .search-panel { + max-height: 380px !important; + } + } + + @media (max-width: 715px) { + & .search-toggles { + grid-template-columns: repeat(4, auto); + } + + & #search-panel-toggle:checked ~ .search-panel { + max-height: 380px !important; + } + } + + @media (max-width: 700px) { + & .search-toggles { + grid-template-columns: repeat(5, auto); + } + + & #search-panel-toggle:checked ~ .search-panel { + max-height: 380px !important; + } + } + + @media (max-width: 485px) { + & .search-toggles { + grid-template-columns: repeat(4, auto); + } + + & #search-panel-toggle:checked ~ .search-panel { + max-height: 380px !important; + } + } + + @media (max-width: 410px) { + & .search-toggles { + grid-template-columns: repeat(3, auto); + } + + & #search-panel-toggle:checked ~ .search-panel { + max-height: 380px !important; + } + } +} + +/* search-resize expansions for global context */ +@media (max-width: 700px) { + .search-toggles { + grid-template-columns: repeat(5, auto); + } + + #search-panel-toggle:checked ~ .search-panel { + max-height: 380px !important; + } +} + +@media (max-width: 485px) { + .search-toggles { + grid-template-columns: repeat(4, auto); + } + + #search-panel-toggle:checked ~ .search-panel { + max-height: 380px !important; + } +} + +@media (max-width: 410px) { + .search-toggles { + grid-template-columns: repeat(3, auto); + } + + #search-panel-toggle:checked ~ .search-panel { + max-height: 380px !important; + } +} diff --git a/public/css/style.css b/public/css/style.css index e15f0f9..e96ca88 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -1 +1,400 @@ -.conversation{max-width:600px;margin:0 auto;float:none;border-radius:0;position:relative;width:100%}.conversation .show-more{margin-bottom:10px}.main-thread{margin-bottom:20px;background-color:var(--bg_panel)}.main-tweet,.replies{padding-top:50px;margin-top:-50px}.main-tweet{position:relative;z-index:2}.main-tweet .tweet-content{font-size:18px}@media(max-width: 600px){.main-tweet .tweet-content{font-size:16px}}.reply{background-color:var(--bg_panel);margin-bottom:10px}.thread-line .timeline-item::before,.thread-line.timeline-item::before{background:var(--accent_dark);content:"";position:relative;min-width:3px;width:3px;left:26px;border-radius:2px;margin-left:-3px;margin-bottom:37px;top:56px;z-index:1;pointer-events:none}.thread-line .with-header:not(:first-child)::after{background:var(--accent_dark);content:"";position:relative;float:left;min-width:3px;width:3px;right:calc(100% - 26px);border-radius:2px;margin-left:-3px;margin-bottom:37px;bottom:10px;height:30px;z-index:1;pointer-events:none}.thread-line .unavailable::before{top:48px;margin-bottom:28px}.thread-line .more-replies::before{content:"...";background:unset;color:var(--more_replies_dots);font-weight:bold;font-size:20px;line-height:.25em;left:1.2em;width:5px;top:2px;margin-bottom:0;margin-left:-2.5px}.thread-line .earlier-replies{padding-bottom:0;margin-bottom:-5px}.timeline-item.thread-last::before{background:unset;min-width:unset;width:0;margin:0}.more-replies{padding-top:.3em !important}.more-replies-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;margin-left:58px;padding:7px 0}.reply-sort{margin-left:auto;position:relative;pointer-events:all}.reply-sort:focus-within .reply-sort-menu{display:flex;flex-direction:column}.reply-sort-btn{cursor:pointer;padding:2px 10px;font-size:13px;font-weight:600;color:var(--fg_color);background-color:var(--bg_elements);border:1px solid var(--dark_grey);border-radius:4px;user-select:none;display:inline-block}.reply-sort-btn:hover{border-color:var(--accent)}.reply-sort-menu{display:none;position:absolute;z-index:10;top:100%;right:0;margin-top:4px;background-color:var(--bg_elements);border:1px solid var(--dark_grey);border-radius:4px;overflow:hidden;min-width:100px;box-shadow:0 2px 8px rgba(0,0,0,.3)}.reply-sort-menu a,.reply-sort-menu span{display:block;padding:6px 12px;font-size:13px;font-weight:600;text-decoration:none;white-space:nowrap}.reply-sort-menu a{color:var(--fg_color)}.reply-sort-menu a:hover{background-color:var(--bg_hover);text-decoration:none}.reply-sort-active{color:var(--accent);background-color:var(--bg_hover)}.timeline-item.thread.more-replies-thread{padding:0 .75em}.timeline-item.thread.more-replies-thread::before{top:40px;margin-bottom:31px}.timeline-item.thread.more-replies-thread .more-replies{display:flex;padding-top:unset !important;margin-top:8px}.timeline-item.thread.more-replies-thread .more-replies::before{display:inline-block;position:relative;top:-1px;line-height:.4em}.timeline-item.thread.more-replies-thread .more-replies .more-replies-text{display:inline}.gallery-row{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;overflow:hidden;flex-grow:1;max-height:379.5px;max-width:533px;pointer-events:all}.gallery-row .still-image{width:100%;display:flex}.attachments{margin-top:.35em;display:flex;flex-direction:row;width:100%;max-height:600px;border-radius:7px;overflow:hidden;flex-flow:column;background-color:var(--bg_color);align-items:center;pointer-events:all}.attachments .image-attachment{width:100%}.attachment{position:relative;line-height:0;overflow:hidden;margin:0 .25em 0 0;flex-grow:1;box-sizing:border-box;min-width:2em}.attachment:last-child{margin:0;max-height:530px}.gallery-gif video{max-height:530px;background-color:#101010}.still-image{max-height:379.5px;max-width:533px;justify-content:center}.still-image img{object-fit:cover;max-width:100%;max-height:379.5px;flex-basis:300px;flex-grow:1}.image{display:inline-block}.overlay-circle{border-radius:50%;background-color:var(--dark_grey);width:40px;height:40px;align-items:center;display:flex;border-width:5px;border-color:var(--play_button);border-style:solid}.overlay-triangle{width:0;height:0;border-style:solid;border-width:12px 0 12px 17px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) var(--play_button);margin-left:14px}.media-gif{display:table;background-color:unset;width:unset}.media-body{flex:1;padding:0;white-space:pre-wrap}video{height:100%;width:100%}.gallery-video{display:flex;overflow:hidden}.gallery-video.card-container{flex-direction:column;width:100%}.video-container{min-height:80px;min-width:200px;max-height:530px;margin:0}.video-container img{max-height:100%;max-width:100%}.video-overlay{position:absolute;width:100%;height:100%;top:0;left:0;z-index:1}.video-overlay:hover .overlay-circle{border-color:var(--play_button_hover)}.video-overlay:hover .overlay-triangle{border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) var(--play_button_hover)}.video-overlay{background-color:rgba(0,0,0,.6)}.video-overlay p{position:relative;z-index:0;text-align:center;top:calc(50% - 20px);font-size:20px;line-height:1.3;margin:0 20px}.video-overlay .overlay-circle{position:relative;z-index:0;top:calc(50% - 20px);margin:0 auto;width:40px;height:40px}.video-overlay .overlay-duration{position:absolute;bottom:8px;left:8px;background-color:rgba(0,0,0,.4784313725);line-height:1em;padding:4px 6px 4px 6px;border-radius:5px;font-weight:bold}.video-overlay form{width:100%;height:100%;align-items:center;justify-content:center;display:flex}.video-overlay button{padding:5px 8px;font-size:16px}.embed-video .gallery-video{width:100%;height:100%;position:absolute;background-color:#000;top:0%;left:0%}.embed-video .video-container{max-height:unset}.card{margin:5px 0;pointer-events:all;max-height:unset}.card-container{border-radius:10px;border-width:1px;border-style:solid;border-color:var(--dark_grey);background-color:var(--bg_elements);overflow:hidden;color:inherit;display:flex;flex-direction:row;text-decoration:none !important}.card-container:hover{border-color:var(--grey)}.card-container .attachments{margin:0;border-radius:0}.card-content{padding:.5em}.card-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;white-space:unset;font-weight:bold;font-size:1.1em}.card-description{margin:.3em 0;white-space:pre-wrap}.card-destination{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--grey);display:block}.card-content-container{color:unset;overflow:auto}.card-content-container:hover{text-decoration:none}.card-image-container{width:98px;flex-shrink:0;position:relative;overflow:hidden}.card-image-container:before{content:"";display:block;padding-top:100%}.card-image{position:absolute;top:0;left:0;bottom:0;right:0;background-color:var(--bg_overlays)}.card-image img{width:100%;height:100%;max-height:400px;display:block;object-fit:cover}.card-overlay{position:absolute;width:100%;height:100%;top:0;left:0;z-index:1}.card-overlay:hover .overlay-circle{border-color:var(--play_button_hover)}.card-overlay:hover .overlay-triangle{border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) var(--play_button_hover)}.card-overlay{opacity:.8;display:flex;justify-content:center;align-items:center}.large .card-container{display:block}.large .card-image-container{width:unset}.large .card-image-container:before{display:none}.large .card-image{position:unset;border-style:solid;border-color:var(--dark_grey);border-width:0;border-bottom-width:1px}.poll-meter{overflow:hidden;position:relative;margin:6px 0;height:26px;background:var(--bg_color);border-radius:5px;display:flex;align-items:center}.poll-choice-bar{height:100%;position:absolute;background:var(--dark_grey)}.poll-choice-value{position:relative;font-weight:bold;margin-left:5px;margin-right:6px;min-width:30px;text-align:right;pointer-events:all}.poll-choice-option{position:relative;pointer-events:all}.poll-info{color:var(--grey);pointer-events:all}.leader .poll-choice-bar{background:var(--accent_dark)}.quote{margin-top:10px;border:solid 1px var(--dark_grey);border-radius:10px;background-color:var(--bg_elements);overflow:hidden;pointer-events:all;position:relative;width:100%}.quote:hover{border-color:var(--grey)}.quote.unavailable:hover{border-color:var(--dark_grey)}.quote .tweet-name-row{padding:6px 8px;margin-top:1px}.quote .quote-text{overflow:hidden;white-space:pre-wrap;word-wrap:break-word;padding:0px 8px 8px 8px}.quote .show-thread{padding:0px 8px 6px 8px;margin-top:-6px}.quote .replying-to{padding:0px 8px;margin:unset}.unavailable-quote{padding:12px}.quote-link{width:100%;height:100%;left:0;top:0;position:absolute}.quote-media-container{max-height:300px;display:flex}.quote-media-container .card{margin:unset}.quote-media-container .attachments{border-radius:0}.quote-media-container .media-gif{width:100%;display:flex;justify-content:center}.quote-media-container .gallery-gif .attachment{display:flex;justify-content:center;background-color:var(--bg_color)}.quote-media-container .gallery-gif .attachment video{height:unset;width:unset;max-height:100%;max-width:100%}.quote-media-container .gallery-video,.quote-media-container .gallery-gif{max-height:300px}.quote-media-container .still-image img{max-height:250px}.tweet-body{flex:1;min-width:0;margin-left:58px;pointer-events:none;z-index:1}.tweet-content{line-height:1.3em;pointer-events:all;display:inline}.tweet-bidi{display:block !important}.tweet-header{padding:0;vertical-align:bottom;flex-basis:100%;margin-bottom:.2em}.tweet-header a{display:inline-block;word-break:break-all;max-width:100%;pointer-events:all}.tweet-name-row{padding:0;display:flex;justify-content:space-between}.fullname-and-username{display:flex;min-width:0}.fullname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:2;max-width:80%;font-size:14px;font-weight:700;color:var(--fg_color)}.username{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:1.6em;margin-left:.4em;word-wrap:normal}.tweet-date{display:flex;flex-shrink:0;margin-left:4px}.tweet-date a,.username,.show-more a{color:var(--fg_dark)}.tweet-published{margin:0;margin-top:5px;color:var(--grey);pointer-events:all}.tweet-avatar{display:contents !important}.tweet-avatar img{float:left;margin-top:3px;margin-left:-58px;width:48px;height:48px}.avatar.round{border-radius:50%;-webkit-user-select:none}.avatar.mini{position:unset;margin-right:5px;margin-top:-1px;width:20px;height:20px}.tweet-embed{display:flex;flex-direction:column;justify-content:center;height:100%;background-color:var(--bg_panel)}.tweet-embed .tweet-content{font-size:18px}.tweet-embed .tweet-body{display:flex;flex-direction:column;max-height:calc(100vh - 1.5em)}.tweet-embed .card-image img{height:auto}.tweet-embed .avatar{position:absolute}.attribution{display:flex;pointer-events:all;margin:5px 0}.attribution strong{color:var(--fg_color)}.media-tag-block{padding-top:5px;pointer-events:all;color:var(--fg_faded)}.media-tag-block .icon-container{padding-right:2px}.media-tag-block .media-tag,.media-tag-block .icon-container{color:var(--fg_faded)}.timeline-container .media-tag-block{font-size:13px}.tweet-geo{color:var(--fg_faded)}.replying-to{color:var(--fg_faded);margin:-2px 0 4px}.replying-to a{pointer-events:all}.retweet-header,.pinned,.tweet-stats{align-content:center;color:var(--grey);display:flex;flex-shrink:0;flex-wrap:wrap;font-size:14px;font-weight:600;line-height:22px}.retweet-header span,.pinned span,.tweet-stats span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.retweet-header{margin-top:-5px !important}.tweet-stats{margin-bottom:-3px;-webkit-user-select:none}.tweet-stat{padding-top:5px;min-width:1em;margin-right:.8em}.show-thread{display:block;pointer-events:all;padding-top:2px}.unavailable-box{width:100%;height:100%;padding:12px;border:solid 1px var(--dark_grey);box-sizing:border-box;border-radius:10px;background-color:var(--bg_color);z-index:2}.tweet-link{height:100%;width:100%;left:0;top:0;position:absolute;-webkit-user-select:none}.tweet-link:hover{background-color:var(--bg_hover)}.profile-card{flex-wrap:wrap;background:var(--bg_panel);padding:12px;display:flex}.profile-card-info{overflow:hidden;overflow-wrap:break-word;width:100%}.profile-card-tabs-name{overflow:hidden;overflow-wrap:break-word;max-width:100%}.profile-card-username{overflow:hidden;overflow-wrap:break-word;color:var(--fg_color);font-size:14px;display:block}.profile-card-fullname{overflow:hidden;overflow-wrap:break-word;color:var(--fg_color);font-size:16px;font-weight:bold;text-shadow:none;max-width:100%}.profile-card-avatar{display:inline-block;position:relative;width:100%;margin-right:4px;margin-bottom:6px}.profile-card-avatar:after{content:"";display:block;margin-top:100%}.profile-card-avatar img{box-sizing:border-box;position:absolute;width:100%;height:100%;border:4px solid var(--darker_grey);background:var(--bg_panel)}.profile-card-extra{display:contents;flex:100%;margin-top:7px}.profile-card-extra .profile-bio{overflow:hidden;overflow-wrap:break-word;width:100%;margin:4px -6px 6px 0;white-space:pre-wrap}.profile-card-extra .profile-bio p{margin:0}.profile-card-extra .profile-joindate,.profile-card-extra .profile-location,.profile-card-extra .profile-website{color:var(--fg_faded);margin:1px 0;width:100%}.profile-card-extra-links{margin-top:8px;font-size:14px;width:100%}.profile-statlist{display:flex;flex-wrap:wrap;padding:0;width:100%;justify-content:space-between}.profile-statlist li{display:table-cell;text-align:center}.profile-stat-header{font-weight:bold;color:var(--profile_stat)}.profile-stat-num{display:block;color:var(--profile_stat)}@media(max-width: 700px){.profile-card-info{display:flex}.profile-card-tabs-name{flex-shrink:100}.profile-card-avatar{width:80px;height:80px}.profile-card-avatar img{border-width:2px;width:unset}}.photo-rail-card{float:left;background:var(--bg_panel);border-radius:0 0 4px 4px;width:100%;margin:5px 0}.photo-rail-header{padding:5px 12px 0}.photo-rail-header-mobile{display:none;box-sizing:border-box;padding:5px 12px 0;width:100%;float:unset;color:var(--accent);justify-content:space-between}.photo-rail-grid{display:grid;grid-template-columns:repeat(4, 1fr);grid-gap:3px 3px;padding:5px 12px 12px}.photo-rail-grid a{position:relative;border-radius:5px;background-color:var(--darker_grey)}.photo-rail-grid a:before{content:"";display:block;padding-top:100%}.photo-rail-grid img{height:100%;width:100%;border-radius:4px;object-fit:cover;position:absolute;top:0;left:0;bottom:0;right:0}#photo-rail-grid-toggle{display:none}#photo-rail-grid-toggle:checked~.photo-rail-grid{max-height:640px}#photo-rail-grid-toggle:checked~label .icon-down:before{transform:rotate(180deg) translateY(-1px)}#photo-rail-grid-toggle:checked~.photo-rail-grid{padding-bottom:12px}@media(max-width: 700px){.photo-rail-header{display:none}.photo-rail-header-mobile{display:flex}.photo-rail-grid{max-height:0;padding-bottom:0;overflow:hidden;transition:max-height .4s}.photo-rail-grid{grid-template-columns:repeat(6, 1fr)}#photo-rail-grid-toggle:checked~.photo-rail-grid{max-height:300px}}@media(max-width: 450px){.photo-rail-grid{grid-template-columns:repeat(4, 1fr)}#photo-rail-grid-toggle:checked~.photo-rail-grid{max-height:450px}}.profile-tabs{max-width:900px;margin:0 auto;float:none;border-radius:0;position:relative;width:auto}.profile-tabs .timeline-container{float:right;width:68% !important;max-width:unset}.profile-banner{margin-bottom:4px;background-color:var(--bg_panel)}.profile-banner a{display:block;position:relative;padding:33.34% 0 0 0}.profile-banner img{max-width:100%;position:absolute;top:0}.profile-tab{padding:0 4px 0 0;box-sizing:border-box;display:inline-block;font-size:14px;text-align:left;vertical-align:top;max-width:32%;top:50px}.profile-result{min-height:54px}.profile-result .username{margin:0 !important}.profile-result .tweet-header{margin-bottom:unset}@media(max-width: 700px){.profile-tabs{width:100vw;max-width:600px}.profile-tabs .timeline-container{width:100% !important}.profile-tabs .timeline-container .tab-item wide{flex-grow:1.4}.profile-tab{width:100%;max-width:unset;position:initial !important;padding:0}}@media(min-height: 900px){.profile-tab.sticky{position:sticky}}.panel-container{margin:auto;font-size:130%}.error-panel{padding:12px;border-radius:4px;display:flex;background:var(--error_red);box-shadow:0 0 15px rgba(0,0,0,.2);margin:auto;margin-top:-50px;text-align:center}.search-bar>form{padding:12px;border-radius:4px;display:flex;background:var(--darkest_grey);box-shadow:0 0 15px rgba(0,0,0,.2);margin:auto;margin-top:-50px}.search-bar>form button{background:var(--bg_elements);color:var(--fg_color);border:0;border-radius:3px;cursor:pointer;font-weight:bold;width:30px;height:30px;padding:0px 5px 1px 8px}.search-bar>form input{font-size:16px;width:100%;background:var(--bg_elements);color:var(--fg_color);border:0;border-radius:4px;padding:4px;margin-right:8px;height:unset}nav{display:flex;align-items:center;position:fixed;background-color:var(--bg_overlays);box-shadow:0 0 4px rgba(0,0,0,.6);padding:0;width:100%;height:50px;z-index:1000;font-size:16px}nav a,nav .icon-button button{color:var(--fg_nav)}.inner-nav{margin:auto;box-sizing:border-box;padding:0 10px;display:flex;align-items:center;flex-basis:920px;height:50px}.site-name{font-size:15px;font-weight:600;line-height:1}.site-name:hover{color:var(--accent_light);text-decoration:unset}.site-logo{display:block;width:35px;height:35px}.nav-item{display:flex;flex:1;line-height:50px;height:50px;overflow:hidden;flex-wrap:wrap;align-items:center}.nav-item.right{text-align:right;justify-content:flex-end}.nav-item.right a:hover{color:var(--accent_light);text-decoration:unset}.lp{height:14px;display:inline-block;position:relative;top:2px;fill:var(--fg_nav)}.lp:hover{fill:var(--accent_light)}.icon-info{margin:0 -3px}.icon-cog{font-size:15px;padding-left:0 !important}button:hover{border-color:var(--accent)}button:active{border-color:var(--accent_light)}button{background-color:var(--bg_elements);color:var(--fg_color);border:1px solid var(--accent_border);padding:3px 6px;font-size:14px;cursor:pointer;float:right}input[type=text]:hover,input[type=date]:hover,input[type=number]:hover,select:hover{border-color:var(--accent)}input[type=text]:active,input[type=date]:active,input[type=number]:active,select:active{border-color:var(--accent_light)}input[type=text],input[type=date],input[type=number],select{background-color:var(--bg_elements);padding:1px 4px;color:var(--fg_color);border:1px solid var(--accent_border);border-radius:0;font-size:14px}input[type=number]{-moz-appearance:textfield}input[type=text],input[type=number]{height:16px}select{height:20px;padding:0 2px;line-height:1}input[type=date]::-webkit-inner-spin-button{display:none}input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{display:none;-webkit-appearance:none;margin:0}input[type=date]::-webkit-clear-button{margin-left:17px;filter:grayscale(100%);filter:hue-rotate(120deg)}input::-webkit-calendar-picker-indicator{opacity:0}input::-webkit-datetime-edit-day-field:focus,input::-webkit-datetime-edit-month-field:focus,input::-webkit-datetime-edit-year-field:focus{background-color:var(--accent);color:var(--fg_color);outline:none}.date-range .date-input{display:inline-block;position:relative}.date-range .icon-container{pointer-events:none;position:absolute;top:2px;right:5px}.date-range .search-title{margin:0 2px}.icon-button button{color:var(--accent);text-decoration:none;background:none;border:none;float:none;padding:unset;padding-left:4px}.icon-button button:hover{color:var(--accent_light)}.checkbox{position:absolute;top:1px;right:0;height:17px;width:17px;background-color:var(--bg_elements);border:1px solid var(--accent_border)}.checkbox:after{content:"";position:absolute;display:none}.checkbox-container{display:block;position:relative;margin-bottom:5px;cursor:pointer;user-select:none;padding-right:22px}.checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkbox-container input:checked~.checkbox:after{display:block}.checkbox-container:hover input~.checkbox{border-color:var(--accent)}.checkbox-container:active input~.checkbox{border-color:var(--accent_light)}.checkbox-container .checkbox:after{left:2px;bottom:0;font-size:13px;font-family:fontello;content:""}.pref-group{display:inline}.preferences button{margin:6px 0 3px 0}.preferences label{padding-right:150px}.preferences select{position:absolute;top:0;right:0;display:block;-moz-appearance:none;-webkit-appearance:none;appearance:none}.preferences input[type=text],.preferences input[type=number]{position:absolute;right:0;max-width:140px}.preferences .pref-group{display:block}.preferences .pref-input{position:relative;margin-bottom:6px}.preferences .pref-reset{float:left}.timeline-container{max-width:600px;margin:0 auto;float:none;border-radius:0;position:relative;width:100%}.timeline{background-color:var(--bg_panel)}.timeline>div:not(:first-child){border-top:1px solid var(--border_grey)}.timeline-header{width:100%;background-color:var(--bg_panel);text-align:center;padding:8px;display:block;font-weight:bold;margin-bottom:5px;box-sizing:border-box}.timeline-header button{float:unset}.timeline-banner img{width:100%}.timeline-description{font-weight:normal}.tab{align-items:center;display:flex;flex-wrap:wrap;list-style:none;margin:0 0 5px 0;background-color:var(--bg_panel);padding:0}.tab-item{flex:1 1 0;text-align:center;margin-top:0}.tab-item a{border-bottom:.1rem solid rgba(0,0,0,0);color:var(--tab);display:block;padding:8px 0;text-decoration:none;font-weight:bold}.tab-item a:hover{text-decoration:none}.tab-item a.active{border-bottom-color:var(--tab_selected);color:var(--tab_selected)}.tab-item.active a{border-bottom-color:var(--tab_selected);color:var(--tab_selected)}.tab-item.wide{flex-grow:1.2;flex-basis:50px}.timeline-footer{background-color:var(--bg_panel);padding:6px 0}.timeline-protected{text-align:center}.timeline-protected p{margin:8px 0}.timeline-protected h2{color:var(--accent);font-size:20px;font-weight:600}.timeline-none{color:var(--accent);font-size:20px;font-weight:600;text-align:center}.timeline-end{background-color:var(--bg_panel);color:var(--accent);font-size:16px;font-weight:600;text-align:center}.show-more{background-color:var(--bg_panel);text-align:center;padding:.75em 0;display:block !important}.show-more a{background-color:var(--darkest_grey);display:inline-block;height:2em;padding:0 2em;line-height:2em}.show-more a:hover{background-color:var(--darker_grey)}.top-ref{background-color:var(--bg_color);border-top:none !important}.top-ref .icon-down{font-size:20px;display:flex;justify-content:center;text-decoration:none}.top-ref .icon-down:hover{color:var(--accent_light)}.top-ref .icon-down::before{transform:rotate(180deg) translateY(-1px)}.timeline-item{overflow-wrap:break-word;border-left-width:0;min-width:0;padding:.75em;display:flex;position:relative}.search-title{font-weight:bold;display:inline-block;margin-top:4px}.search-field{display:flex;flex-wrap:wrap}.search-field button{margin:0 2px 0 0;padding:0px 1px 1px 4px;height:23px;display:flex;align-items:center}.search-field .pref-input{margin:0 4px 0 0;flex-grow:1;height:23px}.search-field input[type=text],.search-field input[type=number]{height:calc(100% - 4px);width:calc(100% - 8px)}.search-field>label{display:inline;background-color:var(--bg_elements);color:var(--fg_color);border:1px solid var(--accent_border);padding:1px 1px 2px 4px;font-size:14px;cursor:pointer;margin-bottom:2px}.search-field>label:hover{border-color:var(--accent)}.search-field>label:active{border-color:var(--accent_light)}.search-field #search-panel-toggle{display:none}.search-field #search-panel-toggle:checked~.search-panel{max-height:380px}.search-field #search-panel-toggle:checked~label .icon-down:before{transform:rotate(180deg) translateY(-1px)}.search-panel{width:100%;max-height:0;overflow:hidden;transition:max-height .4s;flex-grow:1;font-weight:initial;text-align:left}.search-panel .checkbox-container{display:inline;padding-right:unset;margin-bottom:5px;margin-left:23px}.search-panel .checkbox{right:unset;left:-22px;line-height:1.6em}.search-panel .checkbox-container .checkbox:after{top:-4px}.search-row{display:flex;flex-wrap:wrap;line-height:unset}.search-row>div{flex-grow:1;flex-shrink:1}.search-row input{height:21px}.search-row .pref-input{display:block;padding-bottom:5px}.search-row .pref-input input{height:21px;margin-top:1px}.search-toggles{flex-grow:1;display:grid;grid-template-columns:repeat(5, auto);grid-column-gap:10px}@media(max-width: 820px){.profile-tabs .search-toggles{grid-template-columns:repeat(5, auto)}.profile-tabs #search-panel-toggle:checked~.search-panel{max-height:380px !important}}@media(max-width: 715px){.profile-tabs .search-toggles{grid-template-columns:repeat(4, auto)}.profile-tabs #search-panel-toggle:checked~.search-panel{max-height:380px !important}}@media(max-width: 700px){.profile-tabs .search-toggles{grid-template-columns:repeat(5, auto)}.profile-tabs #search-panel-toggle:checked~.search-panel{max-height:380px !important}}@media(max-width: 485px){.profile-tabs .search-toggles{grid-template-columns:repeat(4, auto)}.profile-tabs #search-panel-toggle:checked~.search-panel{max-height:380px !important}}@media(max-width: 410px){.profile-tabs .search-toggles{grid-template-columns:repeat(3, auto)}.profile-tabs #search-panel-toggle:checked~.search-panel{max-height:380px !important}}@media(max-width: 700px){.search-toggles{grid-template-columns:repeat(5, auto)}#search-panel-toggle:checked~.search-panel{max-height:380px !important}}@media(max-width: 485px){.search-toggles{grid-template-columns:repeat(4, auto)}#search-panel-toggle:checked~.search-panel{max-height:380px !important}}@media(max-width: 410px){.search-toggles{grid-template-columns:repeat(3, auto)}#search-panel-toggle:checked~.search-panel{max-height:380px !important}}body{--bg_color: #0f0f0f;--fg_color: #f8f8f2;--fg_faded: rgba(248, 248, 242, 0.8117647059);--fg_dark: #ff6c60;--fg_nav: #ff6c60;--bg_panel: #161616;--bg_elements: #121212;--bg_overlays: #1f1f1f;--bg_hover: #1a1a1a;--grey: #888889;--dark_grey: #404040;--darker_grey: #282828;--darkest_grey: #222222;--border_grey: #3e3e35;--accent: #ff6c60;--accent_light: #ffaca0;--accent_dark: #8a3731;--accent_border: rgba(255, 108, 96, 0.568627451);--play_button: #d8574d;--play_button_hover: #ff6c60;--more_replies_dots: #ad433b;--error_red: #420a05;--verified_blue: #1da1f2;--verified_business: #fac82b;--verified_government: #c1b6a4;--icon_text: #f8f8f2;--tab: #f8f8f2;--tab_selected: #ff6c60;--profile_stat: #f8f8f2;background-color:var(--bg_color);color:var(--fg_color);font-family:sans-serif,fontello;font-size:15px;line-height:1.3;margin:0}*{outline:unset;margin:0;text-decoration:none}h1{display:inline}h2,h3{font-weight:normal}p{margin:14px 0}a{color:var(--accent)}a:hover{text-decoration:underline}fieldset{border:0;padding:0;margin-top:-0.6em}legend{width:100%;padding:.6em 0 .3em 0;border:0;font-size:16px;font-weight:600;border-bottom:1px solid var(--border_grey);margin-bottom:8px}.preferences .note{border-top:1px solid var(--border_grey);border-bottom:1px solid var(--border_grey);padding:6px 0 8px 0;margin-bottom:8px;margin-top:16px}.note{max-width:700px;margin:0 auto;padding:20px}.note .cover{width:100%;max-height:400px;object-fit:cover;border-radius:8px;margin-bottom:20px}.note article{background-color:var(--bg_panel);padding:20px;border-radius:8px}.note article h1{display:block;font-size:28px;margin-bottom:16px;line-height:1.3}.note article h2{font-size:22px;font-weight:bold;margin:20px 0 10px}.note article h3{font-size:18px;font-weight:bold;margin:16px 0 8px}.note article p{margin:12px 0;line-height:1.6;white-space:pre-wrap}.note article ul,.note article ol{margin:12px 0;padding-left:2em}.note article ol{list-style-type:decimal}.note article li{margin:6px 0;padding-left:.3em;line-height:1.6}.note article .code-block{position:relative;margin:16px 0;border-radius:6px;background-color:var(--bg_color);overflow:hidden}.note article .code-block .code-header{display:flex;justify-content:space-between;align-items:center;padding:4px 10px;background-color:var(--darker_grey);font-size:12px;color:var(--fg_faded);min-height:24px}.note article .code-block .code-header .code-lang{font-family:ui-monospace,"Cascadia Code","Source Code Pro",Menlo,Consolas,"DejaVu Sans Mono",monospace}.note article .code-block .code-header .copy-btn{background:none;border:none;color:var(--fg_faded);cursor:pointer;padding:2px;border-radius:3px;display:flex;align-items:center}.note article .code-block .code-header .copy-btn:hover{color:var(--fg_color)}.note article .code-block .copy-toast{position:absolute;top:4px;right:36px;background-color:var(--bg_elements);color:var(--fg_color);font-size:12px;padding:4px 8px;border-radius:4px;pointer-events:none;animation:toast-fade 1.5s ease forwards}.note article .code-block pre{margin:0;padding:16px;overflow-x:auto}.note article .code-block pre code{font-family:ui-monospace,"Cascadia Code","Source Code Pro",Menlo,Consolas,"DejaVu Sans Mono",monospace;font-size:14px;line-height:1.5;white-space:pre}.note article pre{margin:16px 0;padding:16px;background-color:var(--bg_color);border-radius:6px;overflow-x:auto}.note article pre code{font-family:ui-monospace,"Cascadia Code","Source Code Pro",Menlo,Consolas,"DejaVu Sans Mono",monospace;font-size:14px;line-height:1.5;white-space:pre}.note article blockquote{margin:12px 0;padding:4px 0 4px 16px;border-left:3px solid var(--accent);color:var(--fg_faded);line-height:1.6}.note .author{display:flex;align-items:center;margin-bottom:20px;color:var(--fg_faded);font-size:14px}.note .author .fullname{font-weight:bold;color:var(--fg_color)}.note .author .username{color:var(--fg_dark)}.note .image{display:flex;justify-content:center;margin:16px 0}.note .image img{max-width:100%;border-radius:6px}.note .image video{max-width:100%;border-radius:6px}.note .twemoji{height:1.2em;vertical-align:middle}.note .timeline-item{margin:16px 0;border-radius:8px;overflow:hidden}@keyframes toast-fade{0%{opacity:1}70%{opacity:1}100%{opacity:0}}ul{padding-left:1.3em}.container{display:flex;flex-wrap:wrap;box-sizing:border-box;padding-top:50px;margin:auto;min-height:100vh}.icon-container{display:inline}.overlay-panel{max-width:600px;width:100%;margin:0 auto;margin-top:10px;background-color:var(--bg_overlays);padding:10px 15px;align-self:start}.overlay-panel ul{margin-bottom:14px}.overlay-panel p{word-break:break-word}.verified-icon{display:inline-block;width:14px;height:14px;margin-left:2px}.verified-icon .verified-icon-circle{position:absolute;font-size:15px}.verified-icon .verified-icon-check{position:absolute;font-size:9px;margin:5px 3px}.verified-icon.blue .verified-icon-circle{color:var(--verified_blue)}.verified-icon.blue .verified-icon-check{color:var(--icon_text)}.verified-icon.business .verified-icon-circle{color:var(--verified_business)}.verified-icon.business .verified-icon-check{color:var(--bg_panel)}.verified-icon.government .verified-icon-circle{color:var(--verified_government)}.verified-icon.government .verified-icon-check{color:var(--bg_panel)}@media(max-width: 600px){.preferences-container{max-width:95vw}.nav-item,.nav-item .icon-container{font-size:16px}} +@import "tweet/base.css"; +@import "profile/base.css"; +@import "general.css"; +@import "navbar.css"; +@import "inputs.css"; +@import "timeline.css"; +@import "search.css"; + +body { + --bg_color: #0f0f0f; + --fg_color: #f8f8f2; + --fg_faded: #f8f8f2cf; + --fg_dark: #ff6c60; + --fg_nav: #ff6c60; + + --bg_panel: #161616; + --bg_elements: #121212; + --bg_overlays: #1f1f1f; + --bg_hover: #1a1a1a; + + --grey: #888889; + --dark_grey: #404040; + --darker_grey: #282828; + --darkest_grey: #222222; + --border_grey: #3e3e35; + + --accent: #ff6c60; + --accent_light: #ffaca0; + --accent_dark: #8a3731; + --accent_border: #ff6c6091; + + --play_button: #d8574d; + --play_button_hover: #ff6c60; + + --more_replies_dots: #ad433b; + --error_red: #420a05; + + --verified_blue: #1da1f2; + --verified_business: #fac82b; + --verified_government: #c1b6a4; + --icon_text: #f8f8f2; + + --tab: #f8f8f2; + --tab_selected: #ff6c60; + + --profile_stat: #f8f8f2; + + --shadow: rgba(0, 0, 0, 0.6); + --shadow_dark: rgba(0, 0, 0, 0.2); + + background-color: var(--bg_color); + color: var(--fg_color); + font-family: sans-serif, fontello; + font-size: 15px; + line-height: 1.3; + margin: 0; +} + +* { + outline: unset; + margin: 0; + text-decoration: none; +} + +h1 { + display: inline; +} + +h2, +h3 { + font-weight: normal; +} + +p { + margin: 14px 0; +} + +a { + color: var(--accent); + + &:hover { + text-decoration: underline; + } +} + +fieldset { + border: 0; + padding: 0; + margin-top: -0.6em; +} + +legend { + width: 100%; + padding: 0.6em 0 0.3em 0; + border: 0; + font-size: 16px; + font-weight: 600; + border-bottom: 1px solid var(--border_grey); + margin-bottom: 8px; +} + +.preferences .note { + border-top: 1px solid var(--border_grey); + border-bottom: 1px solid var(--border_grey); + padding: 6px 0 8px 0; + margin-bottom: 8px; + margin-top: 16px; +} + +.note { + max-width: 700px; + margin: 0 auto; + padding: 20px; + + & .cover { + width: 100%; + max-height: 400px; + object-fit: cover; + border-radius: 8px; + margin-bottom: 20px; + } + + & article { + background-color: var(--bg_panel); + padding: 20px; + border-radius: 8px; + + & h1 { + display: block; + font-size: 28px; + margin-bottom: 16px; + line-height: 1.3; + } + + & h2 { + font-size: 22px; + font-weight: bold; + margin: 20px 0 10px; + } + + & h3 { + font-size: 18px; + font-weight: bold; + margin: 16px 0 8px; + } + + & p { + margin: 12px 0; + line-height: 1.6; + white-space: pre-wrap; + } + + & ul, + & ol { + margin: 12px 0; + padding-left: 2em; + } + + & ol { + list-style-type: decimal; + } + + & li { + margin: 6px 0; + padding-left: 0.3em; + line-height: 1.6; + } + + & .code-block { + position: relative; + margin: 16px 0; + border-radius: 6px; + background-color: var(--bg_color); + overflow: hidden; + + & .code-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 4px 10px; + background-color: var(--darker_grey); + font-size: 12px; + color: var(--fg_faded); + min-height: 24px; + + & .code-lang { + font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace; + } + + & .copy-btn { + background: none; + border: none; + color: var(--fg_faded); + cursor: pointer; + padding: 2px; + border-radius: 3px; + display: flex; + align-items: center; + + &:hover { + color: var(--fg_color); + } + } + } + + & .copy-toast { + position: absolute; + top: 4px; + right: 36px; + background-color: var(--bg_elements); + color: var(--fg_color); + font-size: 12px; + padding: 4px 8px; + border-radius: 4px; + pointer-events: none; + animation: toast-fade 1.5s ease forwards; + } + + & pre { + margin: 0; + padding: 16px; + overflow-x: auto; + + & code { + font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace; + font-size: 14px; + line-height: 1.5; + white-space: pre; + } + } + } + + & pre { + margin: 16px 0; + padding: 16px; + background-color: var(--bg_color); + border-radius: 6px; + overflow-x: auto; + + & code { + font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace; + font-size: 14px; + line-height: 1.5; + white-space: pre; + } + } + + & blockquote { + margin: 12px 0; + padding: 4px 0 4px 16px; + border-left: 3px solid var(--accent); + color: var(--fg_faded); + line-height: 1.6; + } + } + + & .author { + display: flex; + align-items: center; + margin-bottom: 20px; + color: var(--fg_faded); + font-size: 14px; + + & .fullname { + font-weight: bold; + color: var(--fg_color); + } + + & .username { + color: var(--fg_dark); + } + } + + & .image { + display: flex; + justify-content: center; + margin: 16px 0; + + & img { + max-width: 100%; + border-radius: 6px; + } + + & video { + max-width: 100%; + border-radius: 6px; + } + } + + & .twemoji { + height: 1.2em; + vertical-align: middle; + } + + & .timeline-item { + margin: 16px 0; + border-radius: 8px; + overflow: hidden; + } +} + +@keyframes toast-fade { + 0% { opacity: 1; } + 70% { opacity: 1; } + 100% { opacity: 0; } +} + +ul { + padding-left: 1.3em; +} + +.container { + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + padding-top: 50px; + margin: auto; + min-height: 100vh; +} + +.icon-container { + display: inline; +} + +.overlay-panel { + max-width: 600px; + width: 100%; + margin: 0 auto; + margin-top: 10px; + background-color: var(--bg_overlays); + padding: 10px 15px; + align-self: start; + + & ul { + margin-bottom: 14px; + } + + & p { + word-break: break-word; + } +} + +.verified-icon { + display: inline-block; + width: 14px; + height: 14px; + margin-left: 2px; + + & .verified-icon-circle { + position: absolute; + font-size: 15px; + } + + & .verified-icon-check { + position: absolute; + font-size: 9px; + margin: 5px 3px; + } + + &.blue { + & .verified-icon-circle { + color: var(--verified_blue); + } + + & .verified-icon-check { + color: var(--icon_text); + } + } + + &.business { + & .verified-icon-circle { + color: var(--verified_business); + } + + & .verified-icon-check { + color: var(--bg_panel); + } + } + + &.government { + & .verified-icon-circle { + color: var(--verified_government); + } + + & .verified-icon-check { + color: var(--bg_panel); + } + } +} + +@media (max-width: 600px) { + .preferences-container { + max-width: 95vw; + } + + .nav-item, + .nav-item .icon-container { + font-size: 16px; + } +} diff --git a/sass/timeline.scss b/public/css/timeline.css similarity index 92% rename from sass/timeline.scss rename to public/css/timeline.css index 40882b2..eef5d47 100644 --- a/sass/timeline.scss +++ b/public/css/timeline.css @@ -1,13 +1,16 @@ -@import "_variables"; - .timeline-container { - @include panel(100%, 600px); + max-width: 600px; + margin: 0 auto; + float: none; + border-radius: 0; + position: relative; + width: 100%; } .timeline { background-color: var(--bg_panel); - > div:not(:first-child) { + & > div:not(:first-child) { border-top: 1px solid var(--border_grey); } } @@ -22,7 +25,7 @@ margin-bottom: 5px; box-sizing: border-box; - button { + & button { float: unset; } } @@ -50,7 +53,7 @@ text-align: center; margin-top: 0; - a { + & a { border-bottom: 0.1rem solid transparent; color: var(--tab); display: block; @@ -87,11 +90,11 @@ .timeline-protected { text-align: center; - p { + & p { margin: 8px 0; } - h2 { + & h2 { color: var(--accent); font-size: 20px; font-weight: 600; @@ -119,7 +122,7 @@ padding: 0.75em 0; display: block !important; - a { + & a { background-color: var(--darkest_grey); display: inline-block; height: 2em; @@ -136,7 +139,7 @@ background-color: var(--bg_color); border-top: none !important; - .icon-down { + & .icon-down { font-size: 20px; display: flex; justify-content: center; diff --git a/sass/tweet/_base.scss b/public/css/tweet/base.css similarity index 84% rename from sass/tweet/_base.scss rename to public/css/tweet/base.css index 7f2d931..baa2445 100644 --- a/sass/tweet/_base.scss +++ b/public/css/tweet/base.css @@ -1,12 +1,10 @@ -@import "_variables"; -@import "_mixins"; -@import "thread"; -@import "media"; -@import "video"; -@import "embed"; -@import "card"; -@import "poll"; -@import "quote"; +@import "thread.css"; +@import "media.css"; +@import "video.css"; +@import "embed.css"; +@import "card.css"; +@import "poll.css"; +@import "quote.css"; .tweet-body { flex: 1; @@ -32,7 +30,7 @@ flex-basis: 100%; margin-bottom: 0.2em; - a { + & a { display: inline-block; word-break: break-all; max-width: 100%; @@ -52,7 +50,9 @@ } .fullname { - @include ellipsis; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; flex-shrink: 2; max-width: 80%; font-size: 14px; @@ -61,7 +61,9 @@ } .username { - @include ellipsis; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; min-width: 1.6em; margin-left: 0.4em; word-wrap: normal; @@ -89,7 +91,7 @@ .tweet-avatar { display: contents !important; - img { + & img { float: left; margin-top: 3px; margin-left: -58px; @@ -120,21 +122,21 @@ height: 100%; background-color: var(--bg_panel); - .tweet-content { + & .tweet-content { font-size: 18px; } - .tweet-body { + & .tweet-body { display: flex; flex-direction: column; max-height: calc(100vh - 0.75em * 2); } - .card-image img { + & .card-image img { height: auto; } - .avatar { + & .avatar { position: absolute; } } @@ -144,7 +146,7 @@ pointer-events: all; margin: 5px 0; - strong { + & strong { color: var(--fg_color); } } @@ -154,12 +156,12 @@ pointer-events: all; color: var(--fg_faded); - .icon-container { + & .icon-container { padding-right: 2px; } - .media-tag, - .icon-container { + & .media-tag, + & .icon-container { color: var(--fg_faded); } } @@ -176,7 +178,7 @@ color: var(--fg_faded); margin: -2px 0 4px; - a { + & a { pointer-events: all; } } @@ -193,8 +195,10 @@ font-weight: 600; line-height: 22px; - span { - @include ellipsis; + & span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } } diff --git a/public/css/tweet/card.css b/public/css/tweet/card.css new file mode 100644 index 0000000..d14e52a --- /dev/null +++ b/public/css/tweet/card.css @@ -0,0 +1,135 @@ +.card { + margin: 5px 0; + pointer-events: all; + max-height: unset; +} + +.card-container { + border-radius: 10px; + border-width: 1px; + border-style: solid; + border-color: var(--dark_grey); + background-color: var(--bg_elements); + overflow: hidden; + color: inherit; + display: flex; + flex-direction: row; + text-decoration: none !important; + + &:hover { + border-color: var(--grey); + } + + & .attachments { + margin: 0; + border-radius: 0; + } +} + +.card-content { + padding: 0.5em; +} + +.card-title { + overflow: hidden; + text-overflow: ellipsis; + white-space: unset; + font-weight: bold; + font-size: 1.1em; +} + +.card-description { + margin: 0.3em 0; + white-space: pre-wrap; +} + +.card-destination { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--grey); + display: block; +} + +.card-content-container { + color: unset; + overflow: auto; + &:hover { + text-decoration: none; + } +} + +.card-image-container { + width: 98px; + flex-shrink: 0; + position: relative; + overflow: hidden; + &:before { + content: ""; + display: block; + padding-top: 100%; + } +} + +.card-image { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background-color: var(--bg_overlays); + + & img { + width: 100%; + height: 100%; + max-height: 400px; + display: block; + object-fit: cover; + } +} + +.card-overlay { + /* play-button mixin inlined */ + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1; + opacity: 0.8; + display: flex; + justify-content: center; + align-items: center; + + &:hover { + & .overlay-circle { + border-color: var(--play_button_hover); + } + + & .overlay-triangle { + border-color: transparent transparent transparent var(--play_button_hover); + } + } +} + +.large { + & .card-container { + display: block; + } + + & .card-image-container { + width: unset; + + &:before { + display: none; + } + } + + & .card-image { + position: unset; + border-style: solid; + border-color: var(--dark_grey); + border-width: 0; + border-bottom-width: 1px; + } +} diff --git a/sass/tweet/embed.scss b/public/css/tweet/embed.css similarity index 66% rename from sass/tweet/embed.scss rename to public/css/tweet/embed.css index fbdbd41..9b4306d 100644 --- a/sass/tweet/embed.scss +++ b/public/css/tweet/embed.css @@ -1,8 +1,5 @@ -@import "_variables"; -@import "_mixins"; - .embed-video { - .gallery-video { + & .gallery-video { width: 100%; height: 100%; position: absolute; @@ -11,7 +8,7 @@ left: 0%; } - .video-container { + & .video-container { max-height: unset; } } diff --git a/sass/tweet/media.scss b/public/css/tweet/media.css similarity index 85% rename from sass/tweet/media.scss rename to public/css/tweet/media.css index 66a300f..568f53c 100644 --- a/sass/tweet/media.scss +++ b/public/css/tweet/media.css @@ -1,5 +1,3 @@ -@import "_variables"; - .gallery-row { display: flex; flex-direction: row; @@ -11,7 +9,7 @@ max-width: 533px; pointer-events: all; - .still-image { + & .still-image { width: 100%; display: flex; } @@ -30,7 +28,7 @@ align-items: center; pointer-events: all; - .image-attachment { + & .image-attachment { width: 100%; } } @@ -60,7 +58,7 @@ max-width: 533px; justify-content: center; - img { + & img { object-fit: cover; max-width: 100%; max-height: 379.5px; @@ -73,18 +71,6 @@ display: inline-block; } -// .single-image { -// display: inline-block; -// width: 100%; -// max-height: 600px; - -// .attachments { -// width: unset; -// max-height: unset; -// display: inherit; -// } -// } - .overlay-circle { border-radius: 50%; background-color: var(--dark_grey); diff --git a/sass/tweet/poll.scss b/public/css/tweet/poll.css similarity index 96% rename from sass/tweet/poll.scss rename to public/css/tweet/poll.css index 6d54e00..dc670f7 100644 --- a/sass/tweet/poll.scss +++ b/public/css/tweet/poll.css @@ -1,5 +1,3 @@ -@import "_variables"; - .poll-meter { overflow: hidden; position: relative; diff --git a/sass/tweet/quote.scss b/public/css/tweet/quote.css similarity index 83% rename from sass/tweet/quote.scss rename to public/css/tweet/quote.css index 1db4f7e..f44cd4a 100644 --- a/sass/tweet/quote.scss +++ b/public/css/tweet/quote.css @@ -1,5 +1,3 @@ -@import "_variables"; - .quote { margin-top: 10px; border: solid 1px var(--dark_grey); @@ -18,24 +16,24 @@ border-color: var(--dark_grey); } - .tweet-name-row { + & .tweet-name-row { padding: 6px 8px; margin-top: 1px; } - .quote-text { + & .quote-text { overflow: hidden; white-space: pre-wrap; word-wrap: break-word; padding: 0px 8px 8px 8px; } - .show-thread { + & .show-thread { padding: 0px 8px 6px 8px; margin-top: -6px; } - .replying-to { + & .replying-to { padding: 0px 8px; margin: unset; } @@ -57,26 +55,26 @@ max-height: 300px; display: flex; - .card { + & .card { margin: unset; } - .attachments { + & .attachments { border-radius: 0; } - .media-gif { + & .media-gif { width: 100%; display: flex; justify-content: center; } - .gallery-gif .attachment { + & .gallery-gif .attachment { display: flex; justify-content: center; background-color: var(--bg_color); - video { + & video { height: unset; width: unset; max-height: 100%; @@ -84,12 +82,12 @@ } } - .gallery-video, - .gallery-gif { + & .gallery-video, + & .gallery-gif { max-height: 300px; } - .still-image img { + & .still-image img { max-height: 250px; } } diff --git a/sass/tweet/thread.scss b/public/css/tweet/thread.css similarity index 85% rename from sass/tweet/thread.scss rename to public/css/tweet/thread.css index d1737bf..a4f346d 100644 --- a/sass/tweet/thread.scss +++ b/public/css/tweet/thread.css @@ -1,10 +1,12 @@ -@import "_variables"; -@import "_mixins"; - .conversation { - @include panel(100%, 600px); + max-width: 600px; + margin: 0 auto; + float: none; + border-radius: 0; + position: relative; + width: 100%; - .show-more { + & .show-more { margin-bottom: 10px; } } @@ -20,7 +22,6 @@ margin-top: -50px; } -// Elevate main tweet so the reply-sort dropdown renders above replies below .main-tweet { position: relative; z-index: 2; @@ -42,7 +43,7 @@ } .thread-line { - .timeline-item::before, + & .timeline-item::before, &.timeline-item::before { background: var(--accent_dark); content: ""; @@ -58,7 +59,7 @@ pointer-events: none; } - .with-header:not(:first-child)::after { + & .with-header:not(:first-child)::after { background: var(--accent_dark); content: ""; position: relative; @@ -75,12 +76,12 @@ pointer-events: none; } - .unavailable::before { + & .unavailable::before { top: 48px; margin-bottom: 28px; } - .more-replies::before { + & .more-replies::before { content: "..."; background: unset; color: var(--more_replies_dots); @@ -94,7 +95,7 @@ margin-left: -2.5px; } - .earlier-replies { + & .earlier-replies { padding-bottom: 0; margin-bottom: -5px; } @@ -112,14 +113,14 @@ } .more-replies-text { - @include ellipsis; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; display: block; margin-left: 58px; padding: 7px 0; } -// Reply sort dropdown (inside tweet-stats, right-aligned) -// Uses :focus-within so clicking outside the container auto-closes the menu. .reply-sort { margin-left: auto; position: relative; @@ -162,7 +163,8 @@ min-width: 100px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); - a, span { + & a, + & span { display: block; padding: 6px 12px; font-size: 13px; @@ -171,7 +173,7 @@ white-space: nowrap; } - a { + & a { color: var(--fg_color); &:hover { @@ -194,7 +196,7 @@ margin-bottom: 31px; } - .more-replies { + & .more-replies { display: flex; padding-top: unset !important; margin-top: 8px; @@ -206,7 +208,7 @@ line-height: 0.4em; } - .more-replies-text { + & .more-replies-text { display: inline; } } diff --git a/sass/tweet/video.scss b/public/css/tweet/video.css similarity index 68% rename from sass/tweet/video.scss rename to public/css/tweet/video.css index ba77b14..768bac9 100644 --- a/sass/tweet/video.scss +++ b/public/css/tweet/video.css @@ -1,6 +1,3 @@ -@import "_variables"; -@import "_mixins"; - video { height: 100%; width: 100%; @@ -22,17 +19,33 @@ video { max-height: 530px; margin: 0; - img { + & img { max-height: 100%; max-width: 100%; } } .video-overlay { - @include play-button; - background-color: $shadow; + /* play-button mixin inlined */ + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1; + background-color: var(--shadow); - p { + &:hover { + & .overlay-circle { + border-color: var(--play_button_hover); + } + + & .overlay-triangle { + border-color: transparent transparent transparent var(--play_button_hover); + } + } + + & p { position: relative; z-index: 0; text-align: center; @@ -42,7 +55,7 @@ video { margin: 0 20px; } - .overlay-circle { + & .overlay-circle { position: relative; z-index: 0; top: calc(50% - 20px); @@ -51,7 +64,7 @@ video { height: 40px; } - .overlay-duration { + & .overlay-duration { position: absolute; bottom: 8px; left: 8px; @@ -62,7 +75,7 @@ video { font-weight: bold; } - form { + & form { width: 100%; height: 100%; align-items: center; @@ -70,7 +83,7 @@ video { display: flex; } - button { + & button { padding: 5px 8px; font-size: 16px; } diff --git a/sass/include/_mixins.scss b/sass/include/_mixins.scss deleted file mode 100644 index 5fde51a..0000000 --- a/sass/include/_mixins.scss +++ /dev/null @@ -1,86 +0,0 @@ -@import '_variables'; - -@mixin panel($width, $max-width) { - max-width: $max-width; - margin: 0 auto; - float: none; - border-radius: 0; - position: relative; - width: $width; -} - -@mixin play-button { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - z-index: 1; - - &:hover { - .overlay-circle { - border-color: var(--play_button_hover); - } - - .overlay-triangle { - border-color: transparent transparent transparent var(--play_button_hover); - } - } -} - -@mixin breakable { - overflow: hidden; - overflow-wrap: break-word; -} - -@mixin ellipsis { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -@mixin center-panel($bg) { - padding: 12px; - border-radius: 4px; - display: flex; - background: $bg; - box-shadow: 0 0 15px $shadow_dark; - margin: auto; - margin-top: -50px; -} - -@mixin input-colors { - &:hover { - border-color: var(--accent); - } - - &:active { - border-color: var(--accent_light); - } -} - -@mixin search-resize($width, $rows) { - @media(max-width: $width) { - .search-toggles { - grid-template-columns: repeat($rows, auto); - } - - #search-panel-toggle:checked ~ .search-panel { - max-height: 380px !important; - } - } -} - -@mixin create-toggle($elem, $height) { - ##{$elem}-toggle { - display: none; - - &:checked ~ .#{$elem} { - max-height: $height; - } - - &:checked ~ label .icon-down:before { - transform: rotate(180deg) translateY(-1px); - } - } -} diff --git a/sass/include/_variables.scss b/sass/include/_variables.scss deleted file mode 100644 index 127cccb..0000000 --- a/sass/include/_variables.scss +++ /dev/null @@ -1,43 +0,0 @@ -// colors -$bg_color: #0f0f0f; -$fg_color: #f8f8f2; -$fg_faded: #f8f8f2cf; -$fg_dark: #ff6c60; -$fg_nav: #ff6c60; - -$bg_panel: #161616; -$bg_elements: #121212; -$bg_overlays: #1f1f1f; -$bg_hover: #1a1a1a; - -$grey: #888889; -$dark_grey: #404040; -$darker_grey: #282828; -$darkest_grey: #222222; -$border_grey: #3e3e35; - -$accent: #ff6c60; -$accent_light: #ffaca0; -$accent_dark: #8a3731; -$accent_border: #ff6c6091; - -$play_button: #d8574d; -$play_button_hover: #ff6c60; - -$more_replies_dots: #ad433b; -$error_red: #420a05; - -$verified_blue: #1da1f2; -$verified_business: #fac82b; -$verified_government: #c1b6a4; -$icon_text: $fg_color; - -$tab: $fg_color; -$tab_selected: $accent; - -$shadow: rgba(0, 0, 0, 0.6); -$shadow_dark: rgba(0, 0, 0, 0.2); - -//fonts -$font_0: sans-serif; -$font_1: fontello; diff --git a/sass/index.scss b/sass/index.scss deleted file mode 100644 index 91f35d9..0000000 --- a/sass/index.scss +++ /dev/null @@ -1,400 +0,0 @@ -@import "_variables"; - -@import "tweet/_base"; -@import "profile/_base"; -@import "general"; -@import "navbar"; -@import "inputs"; -@import "timeline"; -@import "search"; - -body { - // colors - --bg_color: #{$bg_color}; - --fg_color: #{$fg_color}; - --fg_faded: #{$fg_faded}; - --fg_dark: #{$fg_dark}; - --fg_nav: #{$fg_nav}; - - --bg_panel: #{$bg_panel}; - --bg_elements: #{$bg_elements}; - --bg_overlays: #{$bg_overlays}; - --bg_hover: #{$bg_hover}; - - --grey: #{$grey}; - --dark_grey: #{$dark_grey}; - --darker_grey: #{$darker_grey}; - --darkest_grey: #{$darkest_grey}; - --border_grey: #{$border_grey}; - - --accent: #{$accent}; - --accent_light: #{$accent_light}; - --accent_dark: #{$accent_dark}; - --accent_border: #{$accent_border}; - - --play_button: #{$play_button}; - --play_button_hover: #{$play_button_hover}; - - --more_replies_dots: #{$more_replies_dots}; - --error_red: #{$error_red}; - - --verified_blue: #{$verified_blue}; - --verified_business: #{$verified_business}; - --verified_government: #{$verified_government}; - --icon_text: #{$icon_text}; - - --tab: #{$fg_color}; - --tab_selected: #{$accent}; - - --profile_stat: #{$fg_color}; - - background-color: var(--bg_color); - color: var(--fg_color); - font-family: $font_0, $font_1; - font-size: 15px; - line-height: 1.3; - margin: 0; -} - -* { - outline: unset; - margin: 0; - text-decoration: none; -} - -h1 { - display: inline; -} - -h2, -h3 { - font-weight: normal; -} - -p { - margin: 14px 0; -} - -a { - color: var(--accent); - - &:hover { - text-decoration: underline; - } -} - -fieldset { - border: 0; - padding: 0; - margin-top: -0.6em; -} - -legend { - width: 100%; - padding: 0.6em 0 0.3em 0; - border: 0; - font-size: 16px; - font-weight: 600; - border-bottom: 1px solid var(--border_grey); - margin-bottom: 8px; -} - -.preferences .note { - border-top: 1px solid var(--border_grey); - border-bottom: 1px solid var(--border_grey); - padding: 6px 0 8px 0; - margin-bottom: 8px; - margin-top: 16px; -} - -.note { - max-width: 700px; - margin: 0 auto; - padding: 20px; - - .cover { - width: 100%; - max-height: 400px; - object-fit: cover; - border-radius: 8px; - margin-bottom: 20px; - } - - article { - background-color: var(--bg_panel); - padding: 20px; - border-radius: 8px; - - h1 { - display: block; - font-size: 28px; - margin-bottom: 16px; - line-height: 1.3; - } - - h2 { - font-size: 22px; - font-weight: bold; - margin: 20px 0 10px; - } - - h3 { - font-size: 18px; - font-weight: bold; - margin: 16px 0 8px; - } - - p { - margin: 12px 0; - line-height: 1.6; - white-space: pre-wrap; - } - - ul, ol { - margin: 12px 0; - padding-left: 2em; - } - - ol { - list-style-type: decimal; - } - - li { - margin: 6px 0; - padding-left: 0.3em; - line-height: 1.6; - } - - .code-block { - position: relative; - margin: 16px 0; - border-radius: 6px; - background-color: var(--bg_color); - overflow: hidden; - - .code-header { - display: flex; - justify-content: space-between; - align-items: center; - padding: 4px 10px; - background-color: var(--darker_grey); - font-size: 12px; - color: var(--fg_faded); - min-height: 24px; - - .code-lang { - font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace; - } - - .copy-btn { - background: none; - border: none; - color: var(--fg_faded); - cursor: pointer; - padding: 2px; - border-radius: 3px; - display: flex; - align-items: center; - - &:hover { - color: var(--fg_color); - } - } - } - - .copy-toast { - position: absolute; - top: 4px; - right: 36px; - background-color: var(--bg_elements); - color: var(--fg_color); - font-size: 12px; - padding: 4px 8px; - border-radius: 4px; - pointer-events: none; - animation: toast-fade 1.5s ease forwards; - } - - pre { - margin: 0; - padding: 16px; - overflow-x: auto; - - code { - font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace; - font-size: 14px; - line-height: 1.5; - white-space: pre; - } - } - } - - // Fallback for code-block type blocks (Draft.js native) - pre { - margin: 16px 0; - padding: 16px; - background-color: var(--bg_color); - border-radius: 6px; - overflow-x: auto; - - code { - font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace; - font-size: 14px; - line-height: 1.5; - white-space: pre; - } - } - - blockquote { - margin: 12px 0; - padding: 4px 0 4px 16px; - border-left: 3px solid var(--accent); - color: var(--fg_faded); - line-height: 1.6; - } - } - - .author { - display: flex; - align-items: center; - margin-bottom: 20px; - color: var(--fg_faded); - font-size: 14px; - - .fullname { - font-weight: bold; - color: var(--fg_color); - } - - .username { - color: var(--fg_dark); - } - } - - .image { - display: flex; - justify-content: center; - margin: 16px 0; - - img { - max-width: 100%; - border-radius: 6px; - } - - video { - max-width: 100%; - border-radius: 6px; - } - } - - .twemoji { - height: 1.2em; - vertical-align: middle; - } - - .timeline-item { - margin: 16px 0; - border-radius: 8px; - overflow: hidden; - } -} - -@keyframes toast-fade { - 0% { opacity: 1; } - 70% { opacity: 1; } - 100% { opacity: 0; } -} - -ul { - padding-left: 1.3em; -} - -.container { - display: flex; - flex-wrap: wrap; - box-sizing: border-box; - padding-top: 50px; - margin: auto; - min-height: 100vh; -} - -.icon-container { - display: inline; -} - -.overlay-panel { - max-width: 600px; - width: 100%; - margin: 0 auto; - margin-top: 10px; - background-color: var(--bg_overlays); - padding: 10px 15px; - align-self: start; - - ul { - margin-bottom: 14px; - } - - p { - word-break: break-word; - } -} - -.verified-icon { - display: inline-block; - width: 14px; - height: 14px; - margin-left: 2px; - - .verified-icon-circle { - position: absolute; - font-size: 15px; - } - - .verified-icon-check { - position: absolute; - font-size: 9px; - margin: 5px 3px; - } - - &.blue { - .verified-icon-circle { - color: var(--verified_blue); - } - - .verified-icon-check { - color: var(--icon_text); - } - } - - &.business { - .verified-icon-circle { - color: var(--verified_business); - } - - .verified-icon-check { - color: var(--bg_panel); - } - } - - &.government { - .verified-icon-circle { - color: var(--verified_government); - } - - .verified-icon-check { - color: var(--bg_panel); - } - } -} - -@media (max-width: 600px) { - .preferences-container { - max-width: 95vw; - } - - .nav-item, - .nav-item .icon-container { - font-size: 16px; - } -} diff --git a/sass/profile/_base.scss b/sass/profile/_base.scss deleted file mode 100644 index b7f33e6..0000000 --- a/sass/profile/_base.scss +++ /dev/null @@ -1,83 +0,0 @@ -@import '_variables'; -@import '_mixins'; - -@import 'card'; -@import 'photo-rail'; - -.profile-tabs { - @include panel(auto, 900px); - - .timeline-container { - float: right; - width: 68% !important; - max-width: unset; - } -} - -.profile-banner { - margin-bottom: 4px; - background-color: var(--bg_panel); - - a { - display: block; - position: relative; - padding: 33.34% 0 0 0; - } - - img { - max-width: 100%; - position: absolute; - top: 0; - } -} - -.profile-tab { - padding: 0 4px 0 0; - box-sizing: border-box; - display: inline-block; - font-size: 14px; - text-align: left; - vertical-align: top; - max-width: 32%; - top: 50px; -} - -.profile-result { - min-height: 54px; - - .username { - margin: 0 !important; - } - - .tweet-header { - margin-bottom: unset; - } -} - -@media(max-width: 700px) { - .profile-tabs { - width: 100vw; - max-width: 600px; - - .timeline-container { - width: 100% !important; - - .tab-item wide { - flex-grow: 1.4; - } - } - } - - .profile-tab { - width: 100%; - max-width: unset; - position: initial !important; - padding: 0; - } -} - -@media (min-height: 900px) { - .profile-tab.sticky { - position: sticky; - } -} diff --git a/sass/profile/card.scss b/sass/profile/card.scss deleted file mode 100644 index 46a9679..0000000 --- a/sass/profile/card.scss +++ /dev/null @@ -1,130 +0,0 @@ -@import '_variables'; -@import '_mixins'; - -.profile-card { - flex-wrap: wrap; - background: var(--bg_panel); - padding: 12px; - display: flex; -} - -.profile-card-info { - @include breakable; - width: 100%; -} - -.profile-card-tabs-name { - @include breakable; - max-width: 100%; -} - -.profile-card-username { - @include breakable; - color: var(--fg_color); - font-size: 14px; - display: block; -} - -.profile-card-fullname { - @include breakable; - color: var(--fg_color); - font-size: 16px; - font-weight: bold; - text-shadow: none; - max-width: 100%; -} - -.profile-card-avatar { - display: inline-block; - position: relative; - width: 100%; - margin-right: 4px; - margin-bottom: 6px; - - &:after { - content: ''; - display: block; - margin-top: 100%; - } - - img { - box-sizing: border-box; - position: absolute; - width: 100%; - height: 100%; - border: 4px solid var(--darker_grey); - background: var(--bg_panel); - } -} - -.profile-card-extra { - display: contents; - flex: 100%; - margin-top: 7px; - - .profile-bio { - @include breakable; - width: 100%; - margin: 4px -6px 6px 0; - white-space: pre-wrap; - - p { - margin: 0; - } - } - - .profile-joindate, .profile-location, .profile-website { - color: var(--fg_faded); - margin: 1px 0; - width: 100%; - } -} - -.profile-card-extra-links { - margin-top: 8px; - font-size: 14px; - width: 100%; -} - -.profile-statlist { - display: flex; - flex-wrap: wrap; - padding: 0; - width: 100%; - justify-content: space-between; - - li { - display: table-cell; - text-align: center; - } -} - -.profile-stat-header { - font-weight: bold; - color: var(--profile_stat); -} - -.profile-stat-num { - display: block; - color: var(--profile_stat); -} - -@media(max-width: 700px) { - .profile-card-info { - display: flex; - } - - .profile-card-tabs-name { - flex-shrink: 100; - } - - .profile-card-avatar { - width: 80px; - height: 80px; - - img { - border-width: 2px; - width: unset; - } - } -} diff --git a/sass/profile/photo-rail.scss b/sass/profile/photo-rail.scss deleted file mode 100644 index f32d22a..0000000 --- a/sass/profile/photo-rail.scss +++ /dev/null @@ -1,96 +0,0 @@ -@import '_variables'; - -.photo-rail { - &-card { - float: left; - background: var(--bg_panel); - border-radius: 0 0 4px 4px; - width: 100%; - margin: 5px 0; - } - - &-header { - padding: 5px 12px 0; - } - - &-header-mobile { - display: none; - box-sizing: border-box; - padding: 5px 12px 0; - width: 100%; - float: unset; - color: var(--accent); - justify-content: space-between; - } - - &-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - grid-gap: 3px 3px; - padding: 5px 12px 12px; - - a { - position: relative; - border-radius: 5px; - background-color: var(--darker_grey); - - &:before { - content: ""; - display: block; - padding-top: 100%; - } - } - - img { - height: 100%; - width: 100%; - border-radius: 4px; - object-fit: cover; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - } - } -} - -@include create-toggle(photo-rail-grid, 640px); -#photo-rail-grid-toggle:checked ~ .photo-rail-grid { - padding-bottom: 12px; -} - -@media(max-width: 700px) { - .photo-rail-header { - display: none; - } - - .photo-rail-header-mobile { - display: flex; - } - - .photo-rail-grid { - max-height: 0; - padding-bottom: 0; - overflow: hidden; - transition: max-height 0.4s; - } - - .photo-rail-grid { - grid-template-columns: repeat(6, 1fr); - } - - #photo-rail-grid-toggle:checked ~ .photo-rail-grid { - max-height: 300px; - } -} - -@media(max-width: 450px) { - .photo-rail-grid { - grid-template-columns: repeat(4, 1fr); - } - - #photo-rail-grid-toggle:checked ~ .photo-rail-grid { - max-height: 450px; - } -} diff --git a/sass/search.scss b/sass/search.scss deleted file mode 100644 index c2adaf7..0000000 --- a/sass/search.scss +++ /dev/null @@ -1,120 +0,0 @@ -@import "_variables"; -@import "_mixins"; - -.search-title { - font-weight: bold; - display: inline-block; - margin-top: 4px; -} - -.search-field { - display: flex; - flex-wrap: wrap; - - button { - margin: 0 2px 0 0; - padding: 0px 1px 1px 4px; - height: 23px; - display: flex; - align-items: center; - } - - .pref-input { - margin: 0 4px 0 0; - flex-grow: 1; - height: 23px; - } - - input[type="text"], - input[type="number"] { - height: calc(100% - 4px); - width: calc(100% - 8px); - } - - > label { - display: inline; - background-color: var(--bg_elements); - color: var(--fg_color); - border: 1px solid var(--accent_border); - padding: 1px 1px 2px 4px; - font-size: 14px; - cursor: pointer; - margin-bottom: 2px; - - @include input-colors; - } - - @include create-toggle(search-panel, 380px); -} - -.search-panel { - width: 100%; - max-height: 0; - overflow: hidden; - transition: max-height 0.4s; - - flex-grow: 1; - font-weight: initial; - text-align: left; - - .checkbox-container { - display: inline; - padding-right: unset; - margin-bottom: 5px; - margin-left: 23px; - } - - .checkbox { - right: unset; - left: -22px; - line-height: 1.6em; - } - - .checkbox-container .checkbox:after { - top: -4px; - } -} - -.search-row { - display: flex; - flex-wrap: wrap; - line-height: unset; - - > div { - flex-grow: 1; - flex-shrink: 1; - } - - input { - height: 21px; - } - - .pref-input { - display: block; - padding-bottom: 5px; - - input { - height: 21px; - margin-top: 1px; - } - } -} - -.search-toggles { - flex-grow: 1; - display: grid; - grid-template-columns: repeat(5, auto); - grid-column-gap: 10px; -} - -.profile-tabs { - @include search-resize(820px, 5); - @include search-resize(715px, 4); - @include search-resize(700px, 5); - @include search-resize(485px, 4); - @include search-resize(410px, 3); -} - -@include search-resize(700px, 5); -@include search-resize(485px, 4); -@include search-resize(410px, 3); diff --git a/sass/tweet/card.scss b/sass/tweet/card.scss deleted file mode 100644 index 5575191..0000000 --- a/sass/tweet/card.scss +++ /dev/null @@ -1,119 +0,0 @@ -@import '_variables'; -@import '_mixins'; - -.card { - margin: 5px 0; - pointer-events: all; - max-height: unset; -} - -.card-container { - border-radius: 10px; - border-width: 1px; - border-style: solid; - border-color: var(--dark_grey); - background-color: var(--bg_elements); - overflow: hidden; - color: inherit; - display: flex; - flex-direction: row; - text-decoration: none !important; - - &:hover { - border-color: var(--grey); - } - - .attachments { - margin: 0; - border-radius: 0; - } -} - -.card-content { - padding: 0.5em; -} - -.card-title { - @include ellipsis; - white-space: unset; - font-weight: bold; - font-size: 1.1em; -} - -.card-description { - margin: 0.3em 0; - white-space: pre-wrap; -} - -.card-destination { - @include ellipsis; - color: var(--grey); - display: block; -} - -.card-content-container { - color: unset; - overflow: auto; - &:hover { - text-decoration: none; - } -} - -.card-image-container { - width: 98px; - flex-shrink: 0; - position: relative; - overflow: hidden; - &:before { - content: ""; - display: block; - padding-top: 100%; - } -} - -.card-image { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - background-color: var(--bg_overlays); - - img { - width: 100%; - height: 100%; - max-height: 400px; - display: block; - object-fit: cover; - } -} - -.card-overlay { - @include play-button; - opacity: 0.8; - display: flex; - justify-content: center; - align-items: center; -} - -.large { - .card-container { - display: block; - } - - .card-image-container { - width: unset; - - &:before { - display: none; - } - } - - .card-image { - position: unset; - border-style: solid; - border-color: var(--dark_grey); - border-width: 0; - border-bottom-width: 1px; - } -} diff --git a/src/views/layout.rs b/src/views/layout.rs index 899e4d1..da7b989 100644 --- a/src/views/layout.rs +++ b/src/views/layout.rs @@ -13,9 +13,8 @@ use crate::{ views::renderutils::icon, }; -/// CSS cache-busting paths (update the version when static assets change). -pub const STYLE_CSS: &str = "/css/style.css?v=28"; -pub const FONTELLO_CSS: &str = "/css/fontello.css?v=4"; +pub const STYLE_CSS: &str = "/css/style.css"; +pub const FONTELLO_CSS: &str = "/css/fontello.css"; /// Builder for rendering a full page layout. #[expect(