xref: /plugin/botmon/style.less (revision f4417fde3b994fe0c6f5285c818940fa0214754b)
1#botmon__admin {
2
3	section[role="tabpanel"] {
4		margin: .25rem 0;
5	}
6
7	/* grid layout classes (taken from the Ad-Hoc Wrap plugin) */
8	.grid-2-columns,
9	.grid-3-columns {
10		display: grid;
11	}
12	.grid-2-columns {
13		grid-template-columns: 1fr 1fr;
14		grid-gap: 0 .5em;
15	}
16	.grid-3-columns {
17		grid-template-columns: 1fr 1fr 1fr;
18		grid-gap: 0 .33em;
19	}
20
21	/* the "today" tab: */
22	#botmon__today {
23
24		/* item header */
25		header {
26			background-color: #F0F0F0;
27			color: #333;
28			border: #CCC solid 1px;
29			border-radius: .5rem .5rem 0 0;
30			margin: .5rem 0 1pt 0;
31			padding: .25rem .5rem;
32			font-size: 1rem;
33			line-height: 1.25;
34		}
35
36		/* list formatting */
37		dl {
38			& {
39				border-left: #555 solid 1px;
40				padding-left: .5rem;
41				margin: 0;
42				font-size: 1rem;
43				line-height: 1.5;
44			}
45			&:first-child {
46				border-left: none;
47				padding-left: 0;
48			}
49			dt {
50				margin-bottom: .2em;
51			}
52			dd {
53				display: flex;
54				justify-content: space-between;
55				padding: 0; margin: 0;
56			}
57			dd:nth-child(even) {
58				background-color: #EEE;
59			}
60		}
61
62		/* Content */
63		#botmon__today__content {
64			& details {
65				& {
66					margin: 0 0 1pt 0;
67					text-align: left;
68				}
69				summary {
70					& {
71						display: flex;
72						justify-content: flex-start;
73						align-items: center;
74						column-gap: .25em;
75						font-weight: bold;
76						font-size: 1rem;
77						line-height: 1.5;
78						margin: 0;
79						padding: .25em;
80						color: #333;
81						cursor: pointer;
82					}
83					&::marker, &::before {
84						content: none;
85						display: none;
86					}
87					&::before {
88						content: '';
89						display: inline-block;
90						width: 1.25em; height: 1.25em;
91						background: transparent url('img/chevron.svg') center no-repeat;
92						background-size: 1.25em;
93						transform: rotate(-90deg);
94						transition-duration: .25s;
95					}
96				}
97				&[open] {
98					& > summary::before {
99						transform: rotate(0deg);
100					}
101				}
102				& > div {
103					padding: .5rem;
104					border: #CCC solid 1px;
105					border-top-width: 0;
106					border-radius: 0 0 .25rem .25rem;
107				}
108				& details summary {
109					background-color: transparent;
110					border: transparent none 0;
111				}
112			}
113			& > details > summary {
114				background-color: #F0F0F0;
115				border: #CCC solid 1px;
116			}
117		}
118
119		/* visitor lists: */
120		#botmon__today__visitorlists {
121			details ul {
122				margin: 0;
123				padding: 0;
124				list-style: none;
125			}
126			details ul > li {
127				margin: 0 0 0 .75rem;
128				padding: 0;
129				color: #000;
130			}
131			details ul > li > details {
132				border: #ccc solid 1px;
133				border-radius: .5em;
134			}
135			details ul > li > details > summary {
136				display: flex;
137				justify-content: space-between;
138				align-items: center;
139				column-gap: .5em;
140				font-weight: normal;
141				font-size: 1rem;
142				line-height: 1.5;
143				background-color: #F0F0F0;
144				border-bottom: #CCC solid 1px;
145				border-radius: .5em;
146			}
147
148			details ul > li > details > summary > span {
149				display: flex;
150				align-items: center;
151				column-gap: .25em;
152			}
153			details ul > li > details > summary > span:first-child {
154				flex-grow: 1;
155			}
156			details ul > li > details > summary > span > span {
157				display: flex;
158				align-items: center;
159				column-gap: .25em;
160				height: 1.5em;
161				overflow: hidden;
162			}
163			details ul > li > details > summary > span > span::before {
164				content: '';
165				display: inline-block;
166				min-width: 1.25em; height: 1em;
167				text-align: center;
168				background: transparent url('img/placeholder.svg') center no-repeat;
169				background-size: 1em;
170			}
171			details ul > li > details > summary > span > span.icon {
172				width: 1.25em;
173				overflow: hidden;
174			}
175			details ul > li > details > summary > span > span[title] {
176				cursor: help;
177			}
178
179			dl.visitor_details {
180				& {
181					display: grid;
182					grid-template-columns: min-content auto;
183					border-left: transparent none 0;
184				}
185				dt {
186					grid-column: 1;
187					white-space: nowrap;
188				}
189				dd {
190					grid-column: 2;
191					display: inline-block;
192					background-color: transparent;
193				}
194				dd.pages {
195					& {
196					}
197					ul {
198						li {
199							& {
200								display: flex;
201								justify-content: space-between;
202								align-items: center;
203							}
204						}
205					}
206				}
207			}
208			dd.has_icon::before {
209				content: '';
210				display: inline-block;
211				width: 1.25em; height: 1.25em;
212				background: transparent url('img/placeholder.svg') center no-repeat;
213				background-size: 1em;
214			}
215
216			/* bot icons */
217			span.bot::before, dd.bot::before { background-image: url('img/robot.svg') }
218			span.bot_bingbot::before, dd.bot_bingbot::before { background-image: url('img/bing.svg') }
219			span.bot_googlebot::before, dd.bot_googlebot::before,
220			span.bot_googleads::before, dd.bot_googleads::before,
221			span.bot_googleapi::before, dd.bot_googleapi::before { background-image: url('img/google.svg') }
222			span.bot_applebot::before, dd.bot_applebot::before { background-image: url('img/apple.svg') }
223			span.bot_openai::before, dd.bot_openai::before { background-image: url('img/openai.svg') }
224			span.bot_metabots::before, dd.bot_metabots::before { background-image: url('img/meta.svg') }
225			span.bot_yandexbots::before, dd.bot_yandexbots::before { background-image: url('img/yandex.svg') }
226			span.bot_seznambot::before, dd.bot_seznambot::before { background-image: url('img/seznam.svg') }
227
228			/* user info */
229			span.user_known::before { background-image: url('img/user.svg') }
230
231			/* platform icons */
232			span.platform_macos::before, dd.platform_macos::before { background-image: url('img/apple.svg') }
233			span.platform_win10::before, dd.platform_win10::before { background-image: url('img/win11.svg') }
234			span.platform_linux::before, dd.platform_linux::before { background-image: url('img/linux.svg') }
235			span.platform_ios::before, dd.platform_ios::before { background-image: url('img/ios.svg') }
236			span.platform_android::before, dd.platform_android::before { background-image: url('img/android.svg') }
237			span.platform_winold::before, dd.platform_winold::before { background-image: url('img/winold.png') }
238			span.platform_tizen::before, dd.platform_tizen::before { background-image: url('img/tizen.png') }
239			span.platform_hmos::before, dd.platform_hmos::before { background-image: url('img/hmos.svg') }
240			span.platform_chromium::before, dd.platform_chromium::before { background-image: url('img/chromium.svg') }
241			span.platform_bsd::before, dd.platform_bsd::before { background-image: url('img/freebsd.png') }
242
243			/* browser icons */
244			span.client_opera::before, dd.client_opera::before { background-image: url('img/opera.svg') }
245			span.client_msie::before, dd.client_msie::before { background-image: url('img/msie.svg') }
246			span.client_brave::before, dd.client_brave::before { background-image: url('img/brave.svg') }
247			span.client_msedge::before, dd.client_msedge::before { background-image: url('img/msedge.svg') }
248			span.client_chrome::before, dd.client_chrome::before { background-image: url('img/chrome.svg') }
249			span.client_chromeold::before, dd.client_chromeold::before { background-image: url('img/chromeold.svg') }
250			span.client_safari::before, dd.client_safari::before { background-image: url('img/safari.png') }
251			span.client_ddg::before, dd.client_ddg::before { background-image: url('img/ddg.svg') }
252			span.client_firefox::before, dd.client_firefox::before { background-image: url('img/firefox.png') }
253			span.client_samsung::before, dd.client_samsung::before { background-image: url('img/samsung.svg') }
254			span.client_uc::before, dd.client_uc::before { background-image: url('img/uc.svg') }
255			span.client_huawei::before, dd.client_huawei::before { background-image: url('img/huawei.png') }
256			span.client_vivaldi::before, dd.client_vivaldi::before { background-image: url('img/vivaldi.png') }
257
258			/* ip address type */
259			span.ip6::before, dd.ip6::before { background-image: url('img/ip6.svg') }
260			span.ip4::before, dd.ip4::before { background-image: url('img/ip4.svg') }
261			span.ip0::before, dd.ip0::before { background-image: url('img/localhost.svg') }
262
263			/* user agent */
264			span.agent::before { background-image: url('img/info.svg') }
265
266			/* pageviews */
267			span.pageviews {
268				border: #999 solid 1px;
269				padding: 0 2px;
270				font-size: smaller;
271				border-radius: .25em;
272			}
273			span.pageviews::before { background-image: url('img/page.svg') }
274
275		}
276
277		/* item footer */
278		footer {
279			& {
280				display: flex;
281				align-items: center;
282				column-gap: .25rem;
283				background-color: #F0F0F0;
284				color: #333;
285				border: #CCC solid 1px;
286				border-radius: 0 0 .5rem .5rem;
287				margin: 1pt 0 0 0;
288				padding: .25rem .5rem;
289				line-height: 1.25;
290			}
291			& > svg {
292				width: 1.25em; height: 1.25em;
293				fill: #333;
294				flex-shrink: 0;
295			}
296			& > span {
297				font-size: .96rem;
298				line-height: 1.25rem;
299			}
300			& > span.error {
301				color: #961D1B;
302				font-weight: bold;
303			}
304		}
305	}
306}
307
308/* dark mode overrides */
309@media (prefers-color-scheme: dark) {
310	body.darkmode.mode_admin #botmon__admin {
311
312		#botmon__today {
313
314			header {
315				background-color: #0c0c0d;
316				color: #adadb3;
317				border-color: #666;
318			}
319
320			/* list formatting */
321			dl {
322				& {
323					border-left-color: #777;
324				}
325				dt {
326					color: #adadb3;
327				}
328				dd:nth-child(even) {
329					background-color: #333337;
330				}
331			}
332
333			#botmon__today__content > details {
334				summary {
335					& {
336						background-color: #0c0c0d;
337						color: #adadb3;
338						border-color: #666;
339					}
340					&::after {
341						color: #76b0fd;
342					}
343				}
344				& > div {
345					border-color: #666;
346				}
347			}
348
349			/* visitor lists: */
350			#botmon__today__visitorlists {
351				details ul > li {
352					color: #aeaeae;
353				}
354			}
355
356			footer {
357				& {
358					background-color: #0c0c0d;
359					color: #adadb3;
360					border-color: #CCC;
361				}
362				& > svg {
363					fill: #777;
364				}
365				& > span.error {
366					color: #961D1B;
367				}
368			}
369		}
370	}
371}
372/* layout overrides for narrow screens: */
373@media (max-width: 670px) {
374	#botmon__admin {
375		.grid-2-columns,
376		.grid-3-columns {
377			grid-template-columns: 100%;
378		}
379	}
380}
381