A rewrite of Poly+, my quality-of-life browser extension for Polytoria. Built entirely fresh using the WXT extension framework, Typescript, and with added better overall code quality.
extension
1/*
2 FRONTEND FIXES / SPACING IMPROVEMENTS
3*/
4
5body[data-URL^="/my/friends"] .col-lg-3 {
6 margin-bottom: 20px;
7}
8
9body[data-URL^="/create/"]
10 .mt-2.mt-lg-0.col-lg.d-flex.align-content-between.flex-wrap {
11 width: 50%;
12}
13
14body[data-URL^="/create/"] .col.d-flex.align-content-between.flex-wrap {
15 width: 50%;
16}
17
18body[data-URL^="/create"] .me-2:has(.fa-thumbs-up)::after {
19 content: "%";
20 margin-left: -2.5px;
21 margin-bottom: 2px;
22 cursor: text;
23}
24
25.text-truncate {
26 white-space: nowrap !important;
27 overflow: hidden !important;
28 text-overflow: ellipsis !important;
29}
30
31#servers-tabpane .card {
32 margin-bottom: 10px;
33}
34
35body[data-URL^="/my/settings/privacy"]
36 .card-body:has([action^="/api/users/"])
37 .card {
38 margin-bottom: 10px;
39}
40
41.home-event-container .img-container {
42 height: 100% !important;
43}
44
45/* ------------------------------------------ */
46
47/*
48 INLINE EDITING
49*/
50
51body[data-polyplus-inlineEditing="true"] .polyplus-inlineEditing-visible {
52 display: block !important;
53}
54.polyplus-inlineEditing-visible {
55 display: none;
56}
57
58body[data-polyplus-inlineEditing="true"] .polyplus-inlineEditing-hidden {
59 display: none !important;
60}
61.polyplus-inlineEditing-hidden {
62 display: block;
63}
64
65/* ------------------------------------------ */
66
67/*
68 MODALS
69*/
70
71html:has(.polyplus-modal[open]),
72body:has(.polyplus-modal[open]) {
73 overflow: hidden;
74}
75
76.polyplus-modal::backdrop {
77 background: rgba(0, 0, 0, 0.73);
78}
79
80/* ------------------------------------------ */
81
82/*
83 EVENT PLACE CARD HIGHLIGHT ANIMATION
84 CSS BY @Dragonism ON POLYTORIA
85*/
86
87.event-card {
88 background-size: 200% 200% !important;
89
90 -webkit-animation: EventPlace 5s ease infinite;
91 -moz-animation: EventPlace 5s ease infinite;
92 animation: EventPlace 5s ease infinite;
93}
94
95@-webkit-keyframes EventPlace {
96 0% {
97 background-position: 10% 0%;
98 }
99 50% {
100 background-position: 91% 100%;
101 }
102 100% {
103 background-position: 10% 0%;
104 }
105}
106
107@-moz-keyframes EventPlace {
108 0% {
109 background-position: 10% 0%;
110 }
111 50% {
112 background-position: 91% 100%;
113 }
114 100% {
115 background-position: 10% 0%;
116 }
117}
118
119@keyframes EventPlace {
120 0% {
121 background-position: 10% 0%;
122 }
123 50% {
124 background-position: 91% 100%;
125 }
126 100% {
127 background-position: 10% 0%;
128 }
129}
130
131/* - */
132
133/*
134 AVATAR SANDBOX
135*/
136
137.ribbon-polyplus-custom span {
138 background-color: orange !important;
139}
140
141.ribbon-polyplus-custom::after, .ribbon-polyplus-custom::before {
142 border-color: #c68000 !important;
143}
144
145.ribbon-polyplus-unknown span {
146 background-color: #000 !important;
147}
148
149.ribbon-polyplus-unknown::after, .ribbon-polyplus-unknown::before {
150 border-color: #121212 !important;
151}
152
153.ribbon-polyplus-retro span {
154 background-color: purple !important;
155 font-family: "Courier New", Courier, monospace;
156}
157
158.ribbon-polyplus-retro::after, .ribbon-polyplus-retro::before {
159 border-color: rgb(104, 0, 104) !important;
160}