xref: /plugin/botmon/style.less (revision 13592cace57a4d294b99e5df5ce8ae4211aa0e29)
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					& {
110						background-color: transparent;
111						border: transparent none 0;
112					}
113					span.title {
114						flex-grow: 1;
115					}
116				}
117			}
118			& > details > summary {
119				background-color: #F0F0F0;
120				border: #CCC solid 1px;
121			}
122		}
123
124		/* visitor lists: */
125		#botmon__today__visitorlists {
126			details ul {
127				margin: 0;
128				padding: 0;
129				list-style: none;
130			}
131			details ul > li {
132				margin: 0 0 0 .75rem;
133				padding: 0;
134				color: #000;
135			}
136			details ul > li > details {
137				border: #ccc solid 1px;
138				border-radius: .5em;
139			}
140			details ul > li > details > summary {
141				display: flex;
142				justify-content: space-between;
143				align-items: center;
144				column-gap: .5em;
145				font-weight: normal;
146				font-size: 1rem;
147				line-height: 1.5;
148				background-color: #F0F0F0;
149				border-bottom: #CCC solid 1px;
150				border-radius: .7em;
151			}
152
153			details ul > li > details > summary > span {
154				display: flex;
155				align-items: center;
156				column-gap: .25em;
157			}
158			details ul > li > details > summary > span:first-child {
159				flex-grow: 1;
160			}
161			details ul > li > details > summary > span > span {
162				display: flex;
163				align-items: center;
164				column-gap: .25em;
165				height: 1.5em;
166				overflow: hidden;
167				margin-right: .2rem;
168			}
169			details ul > li > details > summary > span > span::before {
170				content: '';
171				display: inline-block;
172				min-width: 1.25em; height: 1em;
173				text-align: center;
174				background: transparent url('img/placeholder.svg') center no-repeat;
175				background-size: 1em;
176			}
177			details ul > li > details > summary > span > span.icon {
178				width: 1.25em;
179				overflow: hidden;
180			}
181			details ul > li > details > summary > span > span[title] {
182				cursor: help;
183			}
184
185			dl.visitor_details {
186				& {
187					display: grid;
188					grid-template-columns: min-content auto;
189					border-left: transparent none 0;
190				}
191				dt {
192					grid-column: 1;
193					white-space: nowrap;
194				}
195				dd {
196					grid-column: 2;
197					display: inline-block;
198					background-color: transparent;
199				}
200				dd.pages {
201					& {
202					}
203					ul {
204						li {
205							& {
206								display: flex;
207								justify-content: space-between;
208								align-items: center;
209							}
210						}
211					}
212				}
213			}
214			dd.has_icon::before {
215				content: '';
216				display: inline-block;
217				width: 1.25em; height: 1.25em;
218				background: transparent url('img/placeholder.svg') center no-repeat;
219				background-size: 1em;
220			}
221
222			ul.eval {
223				li {
224					display: flex;
225					justify-content: space-between;
226					align-items: center;
227				}
228				li:nth-child(odd) {
229					background-color: #EEE;
230				}
231				li.total {
232					border-top: #333 solid 1px;
233					font-style: italic;
234				}
235			}
236
237			/* bot icons */
238			span.bot::before, dd.bot::before { background-image: url('img/robot.svg') }
239			span.bot_bingbot::before, dd.bot_bingbot::before { background-image: url('img/bing.svg') }
240			span.bot_googlebot::before, dd.bot_googlebot::before,
241			span.bot_googleads::before, dd.bot_googleads::before,
242			span.bot_googleapi::before, dd.bot_googleapi::before { background-image: url('img/google.svg') }
243			span.bot_applebot::before, dd.bot_applebot::before { background-image: url('img/apple.svg') }
244			span.bot_slurp::before, dd.bot_slurp::before { background-image: url('img/yahoo.svg') }
245			span.bot_ddg::before, dd.bot_ddg::before { background-image: url('img/ddg.svg') }
246			span.bot_openai::before, dd.bot_openai::before { background-image: url('img/openai.svg') }
247			span.bot_claude::before, dd.bot_claude::before { background-image: url('img/anthropic.png') }
248			span.bot_perplexity::before, dd.bot_perplexity::before { background-image: url('img/perplexity.svg') }
249			span.bot_metabots::before, dd.bot_metabots::before { background-image: url('img/meta.svg') }
250			span.bot_qwant::before, dd.bot_qwant::before { background-image: url('img/qwant.svg') }
251			span.bot_yandex::before, dd.bot_yandex::before { background-image: url('img/yandex.svg') }
252			span.bot_seznambot::before, dd.bot_seznambot::before { background-image: url('img/seznam.svg') }
253			span.bot_ahrefs::before, dd.bot_ahrefs::before { background-image: url('img/ahrefs.png') }
254			span.bot_ccbot::before, dd.bot_ccbot::before { background-image: url('img/ccbot.png') }
255			span.bot_mjbot::before, dd.bot_mjbot::before { background-image: url('img/majestic.png') }
256			span.bot_petal::before, dd.bot_petal::before { background-image: url('img/petal.svg') }
257			span.bot_barkrowler::before, dd.bot_barkrowler::before { background-image: url('img/babbar.png') }
258			span.bot_semrush::before, dd.bot_semrush::before { background-image: url('img/semrush.png') }
259			span.bot_bytespider::before, dd.bot_bytespider::before { background-image: url('img/bytedance.svg') }
260			span.bot_dfseo::before, dd.bot_dfseo::before { background-image: url('img/dataforseo.png') }
261			span.bot_hunter::before, dd.bot_hunter::before { background-image: url('img/hunter.png') }
262			span.bot_serpstat::before, dd.bot_serpstat::before { background-image: url('img/serpstat.svg') }
263			span.bot_netestate::before, dd.bot_netestate::before { background-image: url('img/netestate.png') }
264			span.bot_imagesift::before, dd.bot_imagesift::before { background-image: url('img/hive.svg') }
265			/*span.bot_dotbot::before, dd.bot_dotbot::before { background-image: url('img/moz.svg') }*/
266			/*span.bot_maui::before, dd.bot_maui::before { background-image: url('img/maui.svg') }*/
267			span.bot_plagaware::before, dd.bot_plagaware::before { background-image: url('img/plagaware.png') }
268
269			/* user info */
270			span.user_known::before { background-image: url('img/user.svg') }
271
272			/* platform icons */
273			span.platform_win10::before, dd.platform_win10::before { background-image: url('img/win11.svg') }
274			span.platform_macos::before, dd.platform_macos::before { background-image: url('img/apple.svg') }
275			span.platform_linux::before, dd.platform_linux::before { background-image: url('img/linux.svg') }
276			span.platform_ios::before, dd.platform_ios::before { background-image: url('img/ios.svg') }
277			span.platform_android::before, dd.platform_android::before { background-image: url('img/android.svg') }
278			span.platform_winold::before, dd.platform_winold::before { background-image: url('img/winold.png') }
279			span.platform_macosold::before, dd.platform_macosold::before { background-image: url('img/macos.svg') }
280			span.platform_tizen::before, dd.platform_tizen::before { background-image: url('img/tizen.png') }
281			span.platform_hmos::before, dd.platform_hmos::before { background-image: url('img/hmos.svg') }
282			span.platform_chromium::before, dd.platform_chromium::before { background-image: url('img/chromium.svg') }
283			span.platform_bsd::before, dd.platform_bsd::before { background-image: url('img/freebsd.png') }
284
285			/* browser icons */
286			span.client_opera::before, dd.client_opera::before { background-image: url('img/opera.svg') }
287			span.client_msie::before, dd.client_msie::before { background-image: url('img/msie.svg') }
288			span.client_brave::before, dd.client_brave::before { background-image: url('img/brave.svg') }
289			span.client_msedge::before, dd.client_msedge::before { background-image: url('img/msedge.svg') }
290			span.client_chrome::before, dd.client_chrome::before { background-image: url('img/chrome.svg') }
291			span.client_chromeold::before, dd.client_chromeold::before { background-image: url('img/chromeold.svg') }
292			span.client_safari::before, dd.client_safari::before { background-image: url('img/safari.png') }
293			span.client_ddg::before, dd.client_ddg::before { background-image: url('img/ddg.svg') }
294			span.client_firefox::before, dd.client_firefox::before { background-image: url('img/firefox.png') }
295			span.client_samsung::before, dd.client_samsung::before { background-image: url('img/samsung.svg') }
296			span.client_uc::before, dd.client_uc::before { background-image: url('img/uc.svg') }
297			span.client_huawei::before, dd.client_huawei::before { background-image: url('img/huawei.png') }
298			span.client_vivaldi::before, dd.client_vivaldi::before { background-image: url('img/vivaldi.svg') }
299			span.client_aol::before, dd.client_aol::before { background-image: url('img/aol.png') }
300			span.client_ya::before, dd.client_ya::before { background-image: url('img/yandex.png') }
301
302			/* ip address type */
303			span.ip6::before, dd.ip6::before { background-image: url('img/ip6.svg') }
304			span.ip4::before, dd.ip4::before { background-image: url('img/ip4.svg') }
305			span.ip0::before, dd.ip0::before { background-image: url('img/localhost.svg') }
306
307			/* user agent */
308			span.agent::before { background-image: url('img/info.svg') }
309
310			/* pageviews */
311			span.pageviews {
312				border: #999 solid 1px;
313				padding: 0 2px;
314				font-size: smaller;
315				border-radius: .25em;
316			}
317			span.pageviews::before { background-image: url('img/page.svg') }
318
319		}
320
321		/* item footer */
322		footer {
323			& {
324				display: flex;
325				align-items: center;
326				column-gap: .25rem;
327				background-color: #F0F0F0;
328				color: #333;
329				border: #CCC solid 1px;
330				border-radius: 0 0 .5rem .5rem;
331				margin: 1pt 0 0 0;
332				padding: .25rem .5rem;
333				line-height: 1.25;
334			}
335			& > svg {
336				width: 1.25em; height: 1.25em;
337				fill: #333;
338				flex-shrink: 0;
339			}
340			& > span {
341				font-size: .96rem;
342				line-height: 1.25rem;
343			}
344			& > span.error {
345				color: #961D1B;
346				font-weight: bold;
347			}
348		}
349	}
350}
351
352/* dark mode overrides */
353@media (prefers-color-scheme: dark) {
354	body.darkmode.mode_admin #botmon__admin {
355
356		#botmon__today {
357
358			header {
359				background-color: #0c0c0d;
360				color: #adadb3;
361				border-color: #666;
362			}
363
364			/* list formatting */
365			dl {
366				& {
367					border-left-color: #777;
368				}
369				dt {
370					color: #adadb3;
371				}
372				dd:nth-child(even) {
373					background-color: #333337;
374				}
375			}
376
377			#botmon__today__content > details {
378				summary {
379					& {
380						background-color: #0c0c0d;
381						color: #adadb3;
382						border-color: #666;
383					}
384					&::after {
385						color: #76b0fd;
386					}
387				}
388				& > div {
389					border-color: #666;
390				}
391			}
392
393			/* visitor lists: */
394			#botmon__today__visitorlists {
395				details ul > li {
396					color: #aeaeae;
397				}
398			}
399
400			ul.eval {
401				li:nth-child(odd) {
402					background-color: #202022;
403				}
404				li.total {
405					border-top-color: #CCC;
406				}
407			}
408
409			footer {
410				& {
411					background-color: #0c0c0d;
412					color: #adadb3;
413					border-color: #CCC;
414				}
415				& > svg {
416					fill: #777;
417				}
418				& > span.error {
419					color: #961D1B;
420				}
421			}
422		}
423	}
424}
425/* layout overrides for narrow screens: */
426@media (max-width: 670px) {
427	#botmon__admin {
428		.grid-2-columns,
429		.grid-3-columns {
430			grid-template-columns: 100%;
431		}
432	}
433}
434