xref: /plugin/botmon/admin.css (revision e2bc8f6fea7db332abd29354d4a02c78785f0349)
1#botmon__admin {
2
3	section[role="tabpanel"] {
4		margin: .25rem 0;
5	}
6
7	/* icon items */
8	.has_icon {
9		display: inline-flex;
10	}
11	.icon_only {
12		display: inline-grid;
13		grid-template-columns: 20px max-content;
14		overflow: hidden;
15		width: 20px;
16	}
17
18	.has_icon, .icon_only {
19		& {
20			align-items: center;
21			column-gap: .25em;
22		}
23
24		&::before {
25			content: '';
26			display: inline-block;
27			width: 20px; height: 20px;
28			background: transparent none center no-repeat;
29			background-position: 0 0;
30			background-size: 20px;
31		}
32
33		/* user info Icon */
34		&.user_known::before { background-image: url('img/user.svg') }
35
36		/* IP Address types */
37		&.ipaddr::before { background-image: url('img/addr.png') }
38		&.ip4::before { background-position-y: -20px }
39		&.ip6::before { background-position-y: -40px }
40
41		/* Bot icons */
42		&.bot::before { background-image: url('img/bots.png') }
43		&.bot_googlebot::before, &.bot_googleads::before, &.bot_googleapi::before,
44			&.bot_googleother::before, &.bot_googinspct::before { background-position-y: -20px }
45		&.bot_bingbot::before { background-position-y: -40px }
46		&.bot_applebot::before { background-position-y: -60px }
47		&.bot_openai::before { background-position-y: -80px }
48		&.bot_metabots::before { background-position-y: -100px }
49		&.bot_ahrefs::before { background-position-y: -120px }
50		&.bot_seznambot::before { background-position-y: -140px }
51		&.bot_claude::before { background-position-y: -160px }
52		&.bot_baidu::before { background-position-y: -180px }
53		&.bot_reddit::before { background-position-y: -200px }
54		&.bot_wayback::before { background-position-y: -220px }
55		&.bot_alibaba::before { background-position-y: -241px }
56		&.bot_ibou::before { background-position-y: -260px }
57		&.bot_discord::before { background-position-y: -280px }
58		&.bot_twitter::before { background-position-y: -300px }
59		&.bot_other::before { background-image: url('img/more.svg') }
60
61		/* platform icons */
62		&.platform::before { background-image: url('img/platforms.png') }
63		&.pf_win10::before { background-position-y: -20px }
64		&.pf_winold::before, dd.platform_winold::before,
65			&.pf_winsrvr:before { background-position-y: -40px }
66		&.pf_macos::before { background-position-y: -60px }
67		&.pf_macosold::before { background-position-y: -80px }
68		&.pf_ios::before { background-position-y: -100px }
69		&.pf_android::before { background-position-y: -120px }
70		&.pf_androidold::before { background-position-y: -140px }
71		&.pf_linux::before { background-position-y: -160px }
72		&.pf_bsd::before { background-position-y: -180px }
73		&.pf_chromium::before { background-position-y: -200px }
74		&.pf_hmos::before { background-position-y: -220px }
75		&.pf_tizen::before { background-position-y: -240px }
76		&.pf_fire::before { background-position-y: -260px }
77		&.pf_other::before { background-image: url('img/more.svg') }
78
79		/* browser icons */
80		&.client::before { background-image: url('img/clients.png') }
81		&.cl_firefox::before, &.cl_ffios::before { background-position-y: -20px }
82		&.cl_safari::before { background-position-y: -40px }
83		&.cl_chrome::before { background-position-y: -60px }
84		&.cl_msedge::before { background-position-y: -80px }
85		&.cl_msie::before { background-position-y: -100px }
86		&.cl_opera::before { background-position-y: -120px }
87		&.cl_brave::before { background-position-y: -140px }
88		&.cl_ddg::before { background-position-y: -160px }
89		&.cl_samsung::before { background-position-y: -180px }
90		&.cl_huawei::before { background-position-y: -200px }
91		&.cl_vivaldi::before { background-position-y: -220px }
92		&.cl_aol::before { background-position-y: -240px }
93		&.cl_ya::before { background-position-y: -260px }
94		&.cl_silk::before { background-position-y: -280px }
95		&.cl_ffold::before { background-position-y: -300px }
96		&.cl_chromeold::before { background-position-y: -320px }
97		&.cl_ecosia::before { background-position-y: -340px }
98		&.cl_webkit::before { background-position-y: -360px }
99		&.cl_operaold::before { background-position-y: -380px }
100		&.cl_whatsapp::before { background-position-y: -400px }
101		&.cl_applemsgs::before { background-position-y: -420px }
102		&.cl_other::before { background-image: url('img/more.svg') }
103
104		/* Country flags */
105		/* Note: flag images and CSS adapted from: https://github.com/lafeber/world-flags-sprite/ */
106		&.country::before {
107			content: '';
108			height: 20px; width: 20px;
109			background:url(img/flags.png) no-repeat 0 0;
110			background-size: 20px auto;
111		}
112		&.ctry_ad::before { background-position-y: -441px }
113		&.ctry_ae::before { background-position-y: -461px }
114		&.ctry_af::before { background-position-y: -481px }
115		&.ctry_ag::before { background-position-y: -501px }
116		&.ctry_ai::before { background-position-y: -521px }
117		&.ctry_al::before { background-position-y: -541px }
118		&.ctry_am::before { background-position-y: -561px }
119		&.ctry_ao::before { background-position-y: -581px }
120		&.ctry_aq::before { background-position-y: -601px }
121		&.ctry_ar::before { background-position-y: -621px }
122		&.ctry_as::before { background-position-y: -641px }
123		&.ctry_at::before { background-position-y: -661px }
124		&.ctry_au::before { background-position-y: -681px }
125		&.ctry_aw::before { background-position-y: -701px }
126		&.ctry_ax::before { background-position-y: -721px }
127		&.ctry_az::before { background-position-y: -741px }
128		&.ctry_ba::before { background-position-y: -761px }
129		&.ctry_bb::before { background-position-y: -781px }
130		&.ctry_bd::before { background-position-y: -801px }
131		&.ctry_be::before { background-position-y: -821px }
132		&.ctry_bf::before { background-position-y: -841px }
133		&.ctry_bg::before { background-position-y: -861px }
134		&.ctry_bh::before { background-position-y: -881px }
135		&.ctry_bi::before { background-position-y: -901px }
136		&.ctry_bj::before { background-position-y: -921px }
137		&.ctry_bm::before { background-position-y: -941px }
138		&.ctry_bn::before { background-position-y: -961px }
139		&.ctry_bo::before { background-position-y: -981px }
140		&.ctry_br::before { background-position-y: -1001px }
141		&.ctry_bs::before { background-position-y: -1021px }
142		&.ctry_bt::before { background-position-y: -1041px }
143		&.ctry_bw::before { background-position-y: -1061px }
144		&.ctry_by::before { background-position-y: -1081px }
145		&.ctry_bz::before { background-position-y: -1101px }
146		&.ctry_ca::before { background-position-y: -1121px }
147		&.ctry_cd::before { background-position-y: -1141px }
148		&.ctry_cf::before { background-position-y: -1161px }
149		&.ctry_cg::before { background-position-y: -1181px }
150		&.ctry_ch::before { background-position-y: -1201px }
151		&.ctry_ci::before { background-position-y: -1221px }
152		&.ctry_ck::before { background-position-y: -1241px }
153		&.ctry_cl::before { background-position-y: -1261px }
154		&.ctry_cm::before { background-position-y: -1281px }
155		&.ctry_cn::before { background-position-y: -1301px }
156		&.ctry_co::before { background-position-y: -1321px }
157		&.ctry_cr::before { background-position-y: -1341px }
158		&.ctry_cu::before { background-position-y: -1361px }
159		&.ctry_cv::before { background-position-y: -1381px }
160		&.ctry_cy::before { background-position-y: -1401px }
161		&.ctry_cz::before { background-position-y: -1421px }
162		&.ctry_de::before { background-position-y: -1441px }
163		&.ctry_dj::before { background-position-y: -1461px }
164		&.ctry_dk::before { background-position-y: -1481px }
165		&.ctry_dm::before { background-position-y: -1501px }
166		&.ctry_do::before { background-position-y: -1521px }
167		&.ctry_dz::before { background-position-y: -1541px }
168		&.ctry_ec::before { background-position-y: -1561px }
169		&.ctry_ee::before { background-position-y: -1581px }
170		&.ctry_eg::before { background-position-y: -1601px }
171		&.ctry_eh::before { background-position-y: -1621px }
172		&.ctry_er::before { background-position-y: -1641px }
173		&.ctry_es::before { background-position-y: -1661px }
174		&.ctry_et::before { background-position-y: -1681px }
175		&.ctry_fi::before { background-position-y: -1701px }
176		&.ctry_fj::before { background-position-y: -1721px }
177		&.ctry_fm::before { background-position-y: -1741px }
178		&.ctry_fo::before { background-position-y: -1761px }
179		&.ctry_fr::before, &.ctry_bl::before, &.ctry_cp::before, &.ctry_mf::before,
180			&.ctry_yt::before { background-position-y: -1781px }
181		&.ctry_ga::before { background-position-y: -1801px }
182		&.ctry_gb::before, &.ctry_bg::before, &.ctry_uk::before,
183			&.ctry_sh::before { background-position-y: -1821px }
184		&.ctry_gd::before { background-position-y: -1841px }
185		&.ctry_ge::before { background-position-y: -1861px }
186		&.ctry_gg::before { background-position-y: -1881px }
187		&.ctry_gh::before { background-position-y: -1901px }
188		&.ctry_gi::before { background-position-y: -1921px }
189		&.ctry_gl::before { background-position-y: -1941px }
190		&.ctry_gm::before { background-position-y: -1961px }
191		&.ctry_gn::before { background-position-y: -1981px }
192		&.ctry_gp::before { background-position-y: -2001px }
193		&.ctry_gq::before { background-position-y: -2021px }
194		&.ctry_gr::before { background-position-y: -2041px }
195		&.ctry_gt::before { background-position-y: -2061px }
196		&.ctry_gu::before { background-position-y: -2081px }
197		&.ctry_gw::before { background-position-y: -2101px }
198		&.ctry_gy::before { background-position-y: -2121px }
199		&.ctry_hk::before { background-position-y: -2141px }
200		&.ctry_hn::before { background-position-y: -2161px }
201		&.ctry_hr::before { background-position-y: -2181px }
202		&.ctry_ht::before { background-position-y: -2201px }
203		&.ctry_hu::before { background-position-y: -2221px }
204		&.ctry_id::before, &.ctry_mc::before { background-position-y: -2241px }
205		&.ctry_ie::before { background-position-y: -2261px }
206		&.ctry_il::before { background-position-y: -2281px }
207		&.ctry_im::before { background-position-y: -2301px }
208		&.ctry_in::before { background-position-y: -2321px }
209		&.ctry_iq::before { background-position-y: -2341px }
210		&.ctry_ir::before { background-position-y: -2361px }
211		&.ctry_is::before { background-position-y: -2381px }
212		&.ctry_it::before { background-position-y: -2401px }
213		&.ctry_je::before { background-position-y: -2421px }
214		&.ctry_jm::before { background-position-y: -2441px }
215		&.ctry_jo::before { background-position-y: -2461px }
216		&.ctry_jp::before { background-position-y: -2481px }
217		&.ctry_ke::before { background-position-y: -2501px }
218		&.ctry_kg::before { background-position-y: -2521px }
219		&.ctry_kh::before { background-position-y: -2541px }
220		&.ctry_ki::before { background-position-y: -2561px }
221		&.ctry_km::before { background-position-y: -2581px }
222		&.ctry_kn::before { background-position-y: -2601px }
223		&.ctry_kp::before { background-position-y: -2621px }
224		&.ctry_kr::before { background-position-y: -2641px }
225		&.ctry_kw::before { background-position-y: -2661px }
226		&.ctry_ky::before { background-position-y: -2681px }
227		&.ctry_kz::before { background-position-y: -2701px }
228		&.ctry_la::before { background-position-y: -2721px }
229		&.ctry_lb::before { background-position-y: -2741px }
230		&.ctry_lc::before { background-position-y: -2761px }
231		&.ctry_li::before { background-position-y: -2781px }
232		&.ctry_lk::before { background-position-y: -2801px }
233		&.ctry_lr::before { background-position-y: -2821px }
234		&.ctry_ls::before { background-position-y: -2841px }
235		&.ctry_lt::before { background-position-y: -2861px }
236		&.ctry_lu::before { background-position-y: -2881px }
237		&.ctry_lv::before { background-position-y: -2901px }
238		&.ctry_ly::before { background-position-y: -2921px }
239		&.ctry_ma::before { background-position-y: -2941px }
240		&.ctry_md::before { background-position-y: -2961px }
241		&.ctry_me::before { background-position-y: -2981px }
242		&.ctry_mg::before { background-position-y: -3001px }
243		&.ctry_mh::before { background-position-y: -3021px }
244		&.ctry_mk::before { background-position-y: -3041px }
245		&.ctry_ml::before { background-position-y: -3061px }
246		&.ctry_mm::before { background-position-y: -3081px }
247		&.ctry_mn::before { background-position-y: -3101px }
248		&.ctry_mo::before { background-position-y: -3121px }
249		&.ctry_mq::before { background-position-y: -3141px }
250		&.ctry_mr::before { background-position-y: -3161px }
251		&.ctry_ms::before { background-position-y: -3181px }
252		&.ctry_mt::before { background-position-y: -3201px }
253		&.ctry_mu::before { background-position-y: -3221px }
254		&.ctry_mv::before { background-position-y: -3241px }
255		&.ctry_mw::before { background-position-y: -3261px }
256		&.ctry_mx::before { background-position-y: -3281px }
257		&.ctry_my::before { background-position-y: -3301px }
258		&.ctry_mz::before { background-position-y: -3321px }
259		&.ctry_na::before { background-position-y: -3341px }
260		&.ctry_nc::before { background-position-y: -3361px }
261		&.ctry_ne::before { background-position-y: -3381px }
262		&.ctry_ng::before { background-position-y: -3401px }
263		&.ctry_ni::before { background-position-y: -3421px }
264		&.ctry_nl::before,
265			&.ctry_bq::before { background-position-y: -3441px }
266		&.ctry_no::before, &.ctry_bv::before , &.ctry_nq::before,
267			&.ctry_sj::before { background-position-y: -3461px }
268		&.ctry_np::before { background-position-y: -3481px }
269		&.ctry_nr::before { background-position-y: -3501px }
270		&.ctry_nz::before { background-position-y: -3521px }
271		&.ctry_om::before { background-position-y: -3541px }
272		&.ctry_pa::before { background-position-y: -3561px }
273		&.ctry_pe::before { background-position-y: -3581px }
274		&.ctry_pf::before { background-position-y: -3601px }
275		&.ctry_pg::before { background-position-y: -3621px }
276		&.ctry_ph::before { background-position-y: -3641px }
277		&.ctry_pk::before { background-position-y: -3661px }
278		&.ctry_pl::before { background-position-y: -3681px }
279		&.ctry_pr::before { background-position-y: -3701px }
280		&.ctry_ps::before { background-position-y: -3721px }
281		&.ctry_pt::before { background-position-y: -3741px }
282		&.ctry_pw::before { background-position-y: -3761px }
283		&.ctry_py::before { background-position-y: -3781px }
284		&.ctry_qa::before { background-position-y: -3801px }
285		&.ctry_re::before { background-position-y: -3821px }
286		&.ctry_ro::before { background-position-y: -3841px }
287		&.ctry_rs::before { background-position-y: -3861px }
288		&.ctry_ru::before { background-position-y: -3881px }
289		&.ctry_rw::before { background-position-y: -3901px }
290		&.ctry_sa::before { background-position-y: -3921px }
291		&.ctry_sb::before { background-position-y: -3941px }
292		&.ctry_sc::before { background-position-y: -3961px }
293		&.ctry_sd::before { background-position-y: -3981px }
294		&.ctry_se::before { background-position-y: -4001px }
295		&.ctry_sg::before { background-position-y: -4021px }
296		&.ctry_si::before { background-position-y: -4041px }
297		&.ctry_sk::before { background-position-y: -4061px }
298		&.ctry_sl::before { background-position-y: -4081px }
299		&.ctry_sm::before { background-position-y: -4101px }
300		&.ctry_sn::before { background-position-y: -4121px }
301		&.ctry_so::before { background-position-y: -4141px }
302		&.ctry_sr::before { background-position-y: -4161px }
303		&.ctry_st::before { background-position-y: -4181px }
304		&.ctry_sv::before { background-position-y: -4201px }
305		&.ctry_sy::before { background-position-y: -4221px }
306		&.ctry_sz::before { background-position-y: -4241px }
307		&.ctry_tc::before { background-position-y: -4261px }
308		&.ctry_td::before { background-position-y: -4281px }
309		&.ctry_tg::before { background-position-y: -4301px }
310		&.ctry_th::before { background-position-y: -4321px }
311		&.ctry_tj::before { background-position-y: -4341px }
312		&.ctry_tl::before { background-position-y: -4361px }
313		&.ctry_tm::before { background-position-y: -4381px }
314		&.ctry_tn::before { background-position-y: -4401px }
315		&.ctry_to::before { background-position-y: -4421px }
316		&.ctry_tr::before { background-position-y: -4441px }
317		&.ctry_tt::before { background-position-y: -4461px }
318		&.ctry_tv::before { background-position-y: -4481px }
319		&.ctry_tw::before { background-position-y: -4501px }
320		&.ctry_tz::before { background-position-y: -4521px }
321		&.ctry_ua::before { background-position-y: -4541px }
322		&.ctry_ug::before { background-position-y: -4561px }
323		&.ctry_us::before { background-position-y: -4581px }
324		&.ctry_uy::before { background-position-y: -4601px }
325		&.ctry_uz::before { background-position-y: -4621px }
326		&.ctry_va::before { background-position-y: -4641px }
327		&.ctry_vc::before { background-position-y: -4661px }
328		&.ctry_ve::before { background-position-y: -4681px }
329		&.ctry_vg::before { background-position-y: -4701px }
330		&.ctry_vi::before { background-position-y: -4721px }
331		&.ctry_vn::before { background-position-y: -4741px }
332		&.ctry_vu::before { background-position-y: -4761px }
333		&.ctry_ws::before { background-position-y: -4781px }
334		&.ctry_ye::before { background-position-y: -4801px }
335		&.ctry_za::before { background-position-y: -4821px }
336		&.ctry_zm::before { background-position-y: -4841px }
337		&.ctry_zw::before { background-position-y: -4861px }
338		&.ctry_sx::before { background-position-y: -4881px }
339		&.ctry_cw::before { background-position-y: -4901px }
340		&.ctry_ss::before { background-position-y: -4921px }
341		&.ctry_nu::before { background-position-y: -4941px }
342
343		&.ctry_local::before { background-image: url('img/addr.png') } /* localhost */
344		&.ctry_other::before { background-image: url('img/more.svg') } /* other countries */
345
346		/* Session icons */
347		&.session::before { background-image: url('img/idtyp.png') }
348		&.typ_dw::before { background-position-y: -20px }
349		&.typ_php::before { background-position-y: -40px }
350		&.typ_ip::before { background-position-y: -60px }
351		&.typ_usr::before { background-position-y: -80px }
352
353		/* External link icons */
354		&.extlink::before { background-image: url('img/links.png') }
355		&.extlink.ipinfo::before { background-position-y: -40px }
356		&.extlink.abuseipdb::before { background-position-y: -20px }
357
358		/* Common referers icons */
359		&.referer::before { background-image: url('img/referers.png') }
360		&.ref_null::before { background-position-y: -20px }
361		&.ref_google::before { background-position-y: -40px }
362		&.ref_bing::before { background-position-y: -60px }
363		&.ref_yahoo::before { background-position-y: -80px }
364		&.ref_dokuwiki::before { background-position-y: -100px }
365		&.ref_duckduckgo::before { background-position-y: -120px }
366		&.ref_ecosia::before { background-position-y: -140px }
367		&.ref_yandex::before { background-position-y: -160px }
368		&.ref_chatgpt::before { background-position-y: -180px }
369		&.ref_brave::before { background-position-y: -200px }
370		&.ref_wikipedia::before { background-position-y: -220px }
371		&.ref_denkfehler::before { background-position-y: -240px }
372		&.ref_fallacies::before { background-position-y: -260px }
373		&.ref_facebook::before { background-position-y: -280px }
374		&.ref_discord::before { background-position-y: -300px }
375		&.ref_other::before { background-image: url('img/more.svg') }
376	}
377
378	.page_icon {
379		display: inline-flex;
380		column-gap: .25em;
381		align-items: center;
382	}
383	.page_icon::before {
384		content: '';
385		display: inline-block;
386		width: 20px; height: 20px;
387		background: transparent url('img/page.svg') center no-repeat;
388		background-position: 0 0;
389		background-size: 20px;
390	}
391
392	/* grid layout for the overview: */
393	.botmon_bots_grid, .botmon_webmetrics_grid, .botmon_traffic_grid {
394		& {
395			display: grid;
396			grid-gap: 0 .33em;
397		}
398		dl {
399			dd {
400				display: flex;
401				justify-content: space-between;
402				align-items: baseline;
403			}
404		}
405	}
406	.botmon_bots_grid {
407		&[data-geoip="disabled"] {
408			& {
409				grid-template-columns: 1fr 1fr 1fr;
410			}
411			#botmon__botcountries {
412				display: none;
413			}
414		}
415		&:not([data-geoip="disabled"]) {
416			grid-template-columns: 1fr 1fr 1fr 1fr;
417		}
418	}
419	.botmon_webmetrics_grid {
420		&[data-geoip="disabled"] {
421			& {
422				grid-template-columns: 1fr 1fr 1fr;
423			}
424			#botmon__today__wm_countries {
425				display: none;
426			}
427		}
428		&:not([data-geoip="disabled"]) {
429			grid-template-columns: 1fr 1fr 1fr 1fr;
430		}
431	}
432	.botmon_traffic_grid {
433		grid-template-columns: 2fr 1fr;
434	}
435
436	/* The tabs bar */
437	#botmon__tabs ul.tabs li {
438		a[aria-selected="true"] {
439			background-color: #DDD;
440			color: #111;
441		}
442		a[aria-selected="false"] {
443			background-color: #EEE;
444			color: #111;
445		}
446	}
447
448	/* the "today" tab: */
449	#botmon__latest {
450
451		/* item header */
452		header {
453			background-color: #F0F0F0;
454			color: #333;
455			border: #999 solid 1px;
456			border-radius: .5rem .5rem 0 0;
457			margin: .5rem 0 1pt 0;
458			padding: .25rem .5rem;
459			font-size: 1rem;
460			line-height: 1.25;
461		}
462
463		/* list formatting */
464		dl {
465			& {
466				border-left: #555 solid 1px;
467				padding-left: .5rem;
468				margin: 0;
469				font-size: 1rem;
470				line-height: 1.5;
471			}
472			&:first-child {
473				border-left: none;
474				padding-left: 0;
475			}
476			dt {
477				margin-bottom: .2em;
478			}
479			dd {
480				padding: 0; margin: 0;
481			}
482			dd.spaced {
483				display: flex;
484				justify-content: space-between;
485			}
486			dd:nth-child(even) {
487				background-color: #EEE;
488			}
489		}
490
491		/* Content */
492		#botmon__today__content {
493			& details {
494				& {
495					margin: 0 0 1pt 0;
496					text-align: left;
497				}
498				summary {
499					& {
500						display: flex;
501						justify-content: flex-start;
502						align-items: center;
503						column-gap: .25em;
504						font-weight: bold;
505						font-size: 1rem;
506						line-height: 1.5;
507						margin: 0;
508						padding: .25em;
509						color: #333;
510						cursor: pointer;
511					}
512					&::marker, &::before {
513						content: none;
514						display: none;
515					}
516					&::before {
517						content: '';
518						display: inline-block;
519						width: 1.25em; height: 1.25em;
520						background: transparent url('img/chevron.svg') center no-repeat;
521						background-size: 1.25em;
522						transform: rotate(-90deg);
523						transition-duration: .25s;
524					}
525				}
526				&[open] {
527					& > summary::before {
528						transform: rotate(0deg);
529					}
530				}
531				& > div {
532					padding: .5rem;
533					border: #999 solid 1px;
534					border-top-width: 0;
535					border-radius: 0 0 .25rem .25rem;
536				}
537				& details summary {
538					& {
539						background-color: transparent;
540						border: transparent none 0;
541					}
542					span.title {
543						flex-grow: 1;
544					}
545					a.ext_info {
546						display: inline-block;
547						width: 1.25em; height: 1.25em;
548						overflow: hidden;
549						border-radius: 50%;
550					}
551					a.ext_info::before {
552						content: '';
553						display: inline-block;
554						width: 1.25em; height: 1.25em;
555						background: transparent url('img/info.svg') center no-repeat
556					}
557				}
558			}
559			& > details > summary {
560				background-color: #F0F0F0;
561				border: #999 solid 1px;
562			}
563		}
564
565		/* visitor lists: */
566		#botmon__today__visitorlists {
567			& > details summary {
568				border-radius: .5em;
569			}
570			details ul {
571				margin: 0;
572				padding: 0;
573				list-style: none;
574			}
575			details ul > li {
576				margin: 0 0 0 .75rem;
577				padding: 0;
578				color: #000;
579			}
580			details ul > li > details {
581				border: #ccc solid 1px;
582				border-radius: .5em;
583			}
584			details ul > li > details > summary {
585				display: flex;
586				justify-content: space-between;
587				align-items: center;
588				column-gap: .5em;
589				font-weight: normal;
590				font-size: 1rem;
591				line-height: 1.5;
592				background-color: #F0F0F0;
593				border-bottom: #CCC solid 1px;
594				border-radius: .7em;
595			}
596			details ul > li > details > summary.noServer {
597				opacity: 67%;
598			}
599			details ul > li > details > summary > span {
600				display: flex;
601				align-items: center;
602				column-gap: .25em;
603			}
604			details ul > li > details > summary > span:first-child {
605				flex-grow: 1;
606			}
607			details ul > li > details > summary > span > span[title] {
608				cursor: help;
609			}
610
611			dl.visitor_details {
612				& {
613					display: grid;
614					grid-template-columns: min-content auto;
615					border-left: transparent none 0;
616					margin: 0 .5rem .25rem 0;
617				}
618				dt {
619					grid-column: 1;
620					white-space: nowrap;
621				}
622				dd {
623					grid-column: 2;
624					background-color: transparent;
625				}
626				dd.pages {
627					& {
628					}
629					ul {
630						li {
631							& {
632								display: flex;
633								flex-direction: column;
634								line-height: 1.2rem;
635								margin: 0;
636								padding: 0 .25em;
637							}
638							&:nth-child(odd) {
639								background-color: #DFDFDF;
640							}
641							div.row {
642								display: flex;
643								flex-direction: row;
644								justify-content: space-between;
645								align-items: baseline;
646								white-space: nowrap;
647								line-height: 1.35em;
648							}
649							span {
650								display: inline-block;
651							}
652						}
653					}
654					a[hreflang] {
655						overflow: hidden;
656						text-overflow: ellipsis;
657						padding: 2pt 0 0 2pt;
658
659					}
660					a[hreflang]::after {
661						content: attr(hreflang);
662						font-size: smaller;
663						color: #666;
664						border: #666 solid 1px;
665						line-height: 1.25;
666						border-radius: 2pt;
667						padding: 0 1pt;
668						margin-left: .2em;
669					}
670					span.first-seen {
671						min-width: 4.2em;
672						text-align: right;
673					}
674					span.visit-length {
675						font-size: smaller;
676					}
677					span.bounce {
678						width: 1.25em; height: 1.25em;
679						overflow: hidden;
680					}
681					span.bounce::before {
682						display: inline-block;
683						content: '';
684						width: 1.25em; height: 1em;
685						background: transparent url('img/bounce.svg') center no-repeat;
686						background-size: .95em;
687					}
688					span.referer {
689						font-size: smaller;
690						margin-left: .67rem;
691					}
692				}
693			}
694
695			dd.eval > ul {
696				li {
697					display: flex;
698					justify-content: space-between;
699					align-items: center;
700				}
701				li:nth-child(odd) {
702					background-color: #DFDFDF;
703				}
704				li.total {
705					border-top: #333 solid 1px;
706					font-style: italic;
707				}
708			}
709
710			/* user agent */
711			span.agent::before {
712				background-image: url('img/info.svg')
713			}
714
715			/* pageviews */
716			span.pageviews {
717				border: #999 solid 1px;
718				padding: 0 2px;
719				font-size: smaller;
720				border-radius: .5em;
721				margin-right: .25em;
722			}
723			span.pageviews::before {
724				content : '';
725				display: inline-block;
726				width: 1.25em; height: 1.25em;
727				background: transparent url('img/page.svg') center no-repeat;
728				background-size: 1.25em;
729			}
730		}
731
732		/* item footer */
733		footer {
734			& {
735				display: flex;
736				align-items: center;
737				column-gap: .25rem;
738				background-color: #F0F0F0;
739				color: #333;
740				border: #999 solid 1px;
741				border-radius: 0 0 .5rem .5rem;
742				margin: 1pt 0 0 0;
743				padding: .25rem .5rem;
744				line-height: 1.25;
745			}
746			& > svg {
747				width: 1.25em; height: 1.25em;
748				fill: #333;
749				flex-shrink: 0;
750			}
751			& > span {
752				font-size: .96rem;
753				line-height: 1.25rem;
754			}
755			& > span.error {
756				color: #961D1B;
757				font-weight: bold;
758			}
759		}
760	}
761
762	/* the log tab: */
763	#botmon__log {
764
765		#botmon__loglist {
766			& {
767				border: #999 solid 1px;
768				background-color: #F0F0F0;
769				margin: .5rem 0 0 0;
770				padding: .5em;
771				border-radius: .5em 1pt 1pt .5em;
772				list-style: none inside;
773				display: block;
774				min-height: 24rem;
775				max-height: 32rem;
776				overflow: hidden auto
777			}
778			li {
779				& {
780					margin: 0; padding: 0;
781				}
782				&:nth-child(even) {
783					background-color: #DFDFDF;
784				}
785				&.info { color: #626262; font-style: italic;}
786				&.success { color: #217121; }
787				&.error { color: #bb2929; }
788			}
789		}
790	}
791}
792
793/* dark mode overrides */
794@media (prefers-color-scheme: dark) {
795	body.darkmode.mode_admin #botmon__admin {
796
797		#botmon__tabs ul.tabs li {
798			a[aria-selected="true"] {
799				background-color: #0c0c0d;
800				color: #adadb3;
801			}
802			a[aria-selected="false"] {
803				background-color: #39393D;
804				color: #ADADB3;
805			}
806		}
807
808
809		#botmon__latest {
810
811			header {
812				background-color: #0c0c0d;
813				color: #adadb3;
814				border-color: #666;
815			}
816
817			/* list formatting */
818			dl {
819				& {
820					border-left-color: #777;
821				}
822				dt {
823					color: #adadb3;
824				}
825				dd:nth-child(even) {
826					background-color: #333;
827				}
828			}
829
830			#botmon__today__content > details {
831				summary {
832					& {
833						background-color: #0c0c0d;
834						color: #adadb3;
835						border-color: #666;
836					}
837					&::after {
838						color: #76b0fd;
839					}
840				}
841				& > div {
842					border-color: #666;
843				}
844			}
845
846			/* visitor lists: */
847			#botmon__today__visitorlists {
848				details ul > li {
849					& {
850						color: #aeaeae;
851					}
852					& > details {
853						border-color: #666;
854					}
855					& > details summary {
856						background-color: #171717;
857					}
858				}
859
860				dl.visitor_details {
861					dd.pages {
862						ul li:nth-child(odd) {
863							background-color: #333;
864						}
865					}
866				}
867
868				dd.eval > ul {
869					li:nth-child(odd) {
870						background-color: #333;
871					}
872					li.total {
873						border-top-color: #CCC;
874					}
875				}
876				span.pageviews {
877					border-color: #555;
878				}
879
880			}
881
882			footer {
883				& {
884					background-color: #0c0c0d;
885					color: #adadb3;
886					border-color: #666;
887				}
888				& > svg {
889					fill: #777;
890				}
891				& > span.error {
892					color: #961D1B;
893				}
894			}
895		}
896
897		#botmon__log {
898			#botmon__loglist {
899				& {
900					border-color: #CCC;
901					background-color: #232327;
902				}
903				li {
904					&:nth-child(even) { background-color: #39393D; }
905					&.info { color: #a2a2a2;}
906					&.success { color: #50b750; }
907					&.error { color: #f87d7d; }
908				}
909			}
910		}
911
912	}
913}
914/* layout overrides for narrow screens: */
915@media (max-width: 800px) {
916	#botmon__admin #botmon__latest #botmon__today__visitorlists {
917		dl.visitor_details {
918			& {
919				display: block;
920				margin-top: .5rem;
921			}
922			dt {
923				margin-left: .67rem;
924				font-size: smaller;
925			}
926			dd {
927				margin-left: 1.5rem;
928			}
929			dd.pages, dd.eval {
930				margin-left: 0;
931			}
932		}
933	}
934}
935
936@media (max-width: 670px) {
937	#botmon__admin #botmon__latest {
938		.botmon_bots_grid, .botmon_webmetrics_grid, .botmon_traffic_grid {
939			& {
940				grid-template-columns: 1fr !important;
941			}
942			dt {
943				margin: .5em 0;
944			}
945			dl {
946				border-left: transparent none 0;
947				padding-left: 0;
948			}
949		}
950	}
951}
952