styles.css 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321
  1. @font-face {
  2. font-family: 'Nunito';
  3. font-style: normal;
  4. font-weight: 200 1000;
  5. src: url(/fonts/nunito-variable.woff2) format('woff2');
  6. }
  7. :root {
  8. --bg-color: hsl(206, 12%, 95%);
  9. --text-color: hsl(200, 35%, 25%);
  10. --color-primary: hsl(207, 90%, 54%);
  11. --outline-color: hsl(188, 100%, 54%);
  12. --button-bg: linear-gradient(to right, #e0e0e0, #bdbdbd);
  13. --button-bg-box-shadow-color: rgba(160, 160, 160, 0.5);
  14. --button-bg-primary: linear-gradient(to right, hsl(207, 90%, 61%), hsl(218, 100%, 58%));
  15. --button-bg-primary-box-shadow-color: hsla(207, 90%, 61%, 0.5);
  16. --button-bg-secondary: linear-gradient(to right, hsl(262, 47%, 55%), hsl(265, 100%, 46%));
  17. --button-bg-secondary-box-shadow-color: hsla(258, 58%, 42%, 0.5);
  18. --button-bg-danger: linear-gradient(to right, hsl(0, 84%, 58%), hsl(0, 78%, 50%));
  19. --button-bg-danger-box-shadow-color: hsla(0, 58%, 42%, 0.5);
  20. --button-bg-success: linear-gradient(to right, hsl(130, 58%, 45%), hsl(130, 67%, 45%));
  21. --button-bg-success-box-shadow-color: hsla(128, 80%, 48%, 0.5);
  22. --button-action-shadow-color: hsla(200, 15%, 60%, 0.12);
  23. --underline-color: hsl(200, 35%, 65%);
  24. --secondary-text-color: hsl(200, 14%, 60%);
  25. --send-icon-hover-color: hsl(262, 52%, 47%);
  26. --send-spinner-icon-color: hsl(200, 15%, 70%);
  27. --success-icon-color: hsl(144, 40%, 57%);
  28. --error-icon-color: hsl(0, 86%, 63%);
  29. --copy-icon-color: hsl(144, 40%, 57%);
  30. --copy-icon-bg-color: hsl(144, 100%, 96%);
  31. --copy-icon-shadow-color: hsla(200, 15%, 60%, 0.12);
  32. --focus-outline-color: hsla(207, 90%, 61%, 0.5);
  33. --checkbox-bg-color: hsl(262, 47%, 63%);
  34. --input-shadow-color: hsla(200, 15%, 70%, 0.2);
  35. --input-hover-shadow-color: hsla(200, 15%, 70%, 0.4);
  36. --input-label-color: hsl(200, 35%, 25%);
  37. --table-bg-color: hsl(200, 12%, 95%);
  38. --table-shadow-color: hsla(200, 20%, 70%, 0.3);
  39. --table-tr-border-color: hsl(200, 14%, 94%);
  40. --table-tr-hover-bg-color: hsl(200, 14%, 98%);
  41. --table-head-tr-border-color: hsl(200, 14%, 90%);
  42. --table-status-gray-bg-color: hsl(200, 12%, 95%);
  43. --keyframe-slidey-offset: 0;
  44. }
  45. /* ANIMATIONS */
  46. @keyframes spin {
  47. from { transform: rotate(0deg); }
  48. to { transform: rotate(360deg); }
  49. }
  50. @keyframes fadein {
  51. from { opacity: 0 }
  52. to { opacity: 1 }
  53. }
  54. @keyframes slidey {
  55. from { transform: translateY(var(--keyframe-slidey-offset)) }
  56. to { transform: translateY(0) }
  57. }
  58. @keyframes tooltip {
  59. to { opacity: 0.9; transform: translate(-50%, 0); }
  60. }
  61. /* GENERAL */
  62. body {
  63. margin: 0;
  64. padding: 0;
  65. background-color: var(--bg-color);
  66. font: 16px/1.45 'Nunito', sans-serif;
  67. overflow-x: hidden;
  68. color: var(--text-color);
  69. }
  70. * {
  71. box-sizing: border-box;
  72. outline-color: var(--outline-color);
  73. }
  74. *::-moz-focus-inner {
  75. border: none;
  76. }
  77. .hidden {
  78. display: none;
  79. }
  80. hr {
  81. width: 100%;
  82. height: 2px;
  83. outline: none;
  84. border: none;
  85. background-color: hsl(200, 20%, 92%);
  86. }
  87. span.bold { font-weight: bold; }
  88. span.underline { border-bottom: 2px dotted #999; }
  89. .space-between {
  90. display: flex;
  91. justify-content: space-between;
  92. align-items: center;
  93. }
  94. .align-center {
  95. display: flex;
  96. align-items: center;
  97. }
  98. a,
  99. button.link {
  100. color: var(--color-primary);
  101. border-bottom: 1px dotted transparent;
  102. text-decoration: none;
  103. transition: all 0.2s ease-out;
  104. cursor: pointer;
  105. }
  106. a:hover,
  107. button.link:hover {
  108. border-bottom-color: var(--color-primary);
  109. }
  110. a.wrapper-only {
  111. color: inherit;
  112. }
  113. a.nav {
  114. color: inherit;
  115. padding-bottom: 2px;
  116. }
  117. a.nav:hover {
  118. color: var(--color-primary);
  119. }
  120. a.button,
  121. button {
  122. position: relative;
  123. width: auto;
  124. height: 40px;
  125. display: flex;
  126. align-items: center;
  127. justify-content: center;
  128. padding: 0 32px;
  129. font-size: 13px;
  130. font-weight: normal;
  131. text-align: center;
  132. line-height: 1;
  133. word-break: keep-all;
  134. color: #444;
  135. border: none;
  136. border-radius: 100px;
  137. transition: all 0.4s ease-out;
  138. cursor: pointer;
  139. overflow: hidden;
  140. background: var(--button-bg);
  141. box-shadow: 0 5px 6px var(--button-bg-box-shadow-color);
  142. }
  143. a.button.primary,
  144. button.primary {
  145. color: white;
  146. background: var(--button-bg-primary);
  147. box-shadow: 0 5px 6px var(--button-bg-primary-box-shadow-color);
  148. }
  149. a.button.secondary,
  150. button.secondary {
  151. color: white;
  152. background: var(--button-bg-secondary);
  153. box-shadow: 0 5px 6px var(--button-bg-secondary-box-shadow-color);
  154. }
  155. a.button.danger,
  156. button.danger {
  157. color: white;
  158. background: var(--button-bg-danger);
  159. box-shadow: 0 5px 6px var(--button-bg-danger-box-shadow-color);
  160. }
  161. a.button.success,
  162. button.success {
  163. color: white;
  164. background: var(--button-bg-success);
  165. box-shadow: 0 5px 6px var(--button-bg-success-box-shadow-color);
  166. }
  167. a.button:focus,
  168. a.button:hover,
  169. button:focus,
  170. button:hover {
  171. box-shadow: 0 6px 15px var(--button-bg-box-shadow-color);
  172. transform: translateY(-2px) scale(1.02, 1.02);
  173. }
  174. a.button.primary:focus,
  175. a.button.primary:hover,
  176. button.primary:focus,
  177. button.primary:hover {
  178. box-shadow: 0 6px 15px var(--button-bg-primary-box-shadow-color);
  179. }
  180. a.button.secondary:focus,
  181. a.button.secondary:hover,
  182. button.secondary:focus,
  183. button.secondary:hover {
  184. box-shadow: 0 6px 15px var(--button-bg-secondary-box-shadow-color);
  185. }
  186. a.button.danger:focus,
  187. a.button.danger:hover,
  188. button.danger:focus,
  189. button.danger:hover {
  190. box-shadow: 0 6px 15px var(--button-bg-danger-box-shadow-color);
  191. }
  192. a.button.success:focus,
  193. a.button.success:hover,
  194. button.success:focus,
  195. button.success:hover {
  196. box-shadow: 0 6px 15px var(--button-bg-success-box-shadow-color);
  197. }
  198. a.button:disabled,
  199. button:disabled { cursor: default; }
  200. a.button:disabled:hover,
  201. button:disabled:hover { transform: none; }
  202. a.button svg.with-text,
  203. a.button span svg,
  204. button svg.with-text,
  205. button span svg {
  206. width: 1.1em;
  207. height: auto;
  208. margin-right: 0.5rem;
  209. stroke: white;
  210. stroke-width: 2;
  211. }
  212. a.button.action,
  213. button.action {
  214. padding: 5px;
  215. width: 24px;
  216. height: 24px;
  217. box-shadow: 0 2px 1px var(--button-action-shadow-color);
  218. }
  219. a.button.action:disabled,
  220. button.action:disabled {
  221. background: none;
  222. box-shadow: none;
  223. }
  224. a.button.action svg,
  225. button.action svg {
  226. width: 100%;
  227. margin-right: 0;
  228. }
  229. a.button.action.delete,
  230. button.action.delete {
  231. background: hsl(0, 100%, 96%);
  232. }
  233. a.button.action.delete svg,
  234. button.action.delete svg {
  235. stroke-width: 2;
  236. stroke: hsl(0, 100%, 69%);
  237. }
  238. a.button.action.edit,
  239. button.action.edit {
  240. background: hsl(46, 100%, 94%);
  241. }
  242. a.button.action.edit svg,
  243. button.action.edit svg {
  244. stroke-width: 2.5;
  245. stroke: hsl(46, 90%, 50%);
  246. }
  247. a.button.action.qrcode,
  248. button.action.qrcode {
  249. background: hsl(0, 0%, 94%);
  250. }
  251. a.button.action.qrcode svg,
  252. button.action.qrcode svg {
  253. fill: hsl(0, 0%, 35%);
  254. stroke: none;
  255. }
  256. a.button.action.stats,
  257. button.action.stats {
  258. background: hsl(260, 100%, 96%);
  259. }
  260. a.button.action.stats svg,
  261. button.action.stats svg {
  262. stroke-width: 2.5;
  263. stroke: hsl(260, 100%, 69%);
  264. }
  265. a.button.action.ban,
  266. button.action.ban {
  267. background: hsl(10, 100%, 96%);
  268. }
  269. a.button.action.ban svg,
  270. button.action.ban svg {
  271. stroke-width: 2;
  272. stroke: hsl(10, 100%, 40%);
  273. }
  274. a.button.action.password sv,
  275. button.action.password svg,
  276. a.button.action.banned svg,
  277. button.action.banned svg {
  278. stroke-width: 2.5;
  279. stroke: #bbb;
  280. }
  281. button.nav {
  282. box-sizing: border-box;
  283. width: auto;
  284. height: 28px;
  285. display: flex;
  286. flex: 0 0 auto;
  287. align-items: center;
  288. justify-content: center;
  289. padding: 0 8px;
  290. border: none;
  291. border-radius: 4px;
  292. box-shadow: 0 0px 10px rgba(100, 100, 100, 0.1);
  293. background: none;
  294. background-color: white;
  295. transition: all 0.2s ease-in-out;
  296. font-size: 12px;
  297. cursor: pointer;
  298. }
  299. button.nav:disabled {
  300. background-color: #f6f6f6;
  301. box-shadow: 0 0px 5px rgba(150, 150, 150, 0.1);
  302. opacity: 0.9;
  303. color: #bbb;
  304. cursor: default;
  305. }
  306. button.nav svg {
  307. width: 14px;
  308. height: auto;
  309. }
  310. button.nav svg { stroke-width: 2.5; }
  311. button.nav:hover { transform: translateY(-2px); }
  312. button.nav:disabled:hover { transform: none; }
  313. button.table {
  314. height: 32px;
  315. padding: 0 1rem;
  316. font-size: 12px;
  317. border-radius: 3px;
  318. transition: all 0.2s ease-in-out;
  319. box-shadow: 0 1px 2px var(--button-bg-box-shadow-color);
  320. }
  321. button.table:hover {
  322. transform: translateY(-2px);
  323. box-shadow: 0 1px 2px var(--button-bg-box-shadow-color);
  324. }
  325. button.table.primary,
  326. button.primary:focus,
  327. button.primary:hover {
  328. box-shadow: 0 1px 2px var(--button-bg-primary-box-shadow-color);
  329. }
  330. button.table.secondary,
  331. button.secondary:focus,
  332. button.secondary:hover {
  333. box-shadow: 0 1px 2px var(--button-bg-secondary-box-shadow-color);
  334. }
  335. button.table.danger,
  336. button.danger:focus,
  337. button.danger:hover {
  338. box-shadow: 0 1px 2px var(--button-bg-danger-box-shadow-color);
  339. }
  340. button.table.success,
  341. button.success:focus,
  342. button.success:hover {
  343. box-shadow: 0 1px 2px var(--button-bg-success-box-shadow-color);
  344. }
  345. button.link {
  346. position: relative;
  347. width: auto;
  348. height: auto;
  349. display: flex;
  350. align-items: center;
  351. justify-content: flex-start;
  352. padding: 0 0 2px 0;
  353. font-size: 1rem;
  354. font-weight: normal;
  355. border-radius: 0;
  356. text-align: left;
  357. line-height: normal;
  358. word-break: normal;
  359. cursor: pointer;
  360. background: none;
  361. box-shadow: none;
  362. }
  363. button.link:hover {
  364. box-shadow: none;
  365. transform: none;
  366. }
  367. button.link span {
  368. height: 1rem;
  369. }
  370. button.link svg {
  371. stroke: var(--color-primary);
  372. }
  373. svg.spinner {
  374. animation: spin 1s linear infinite, fadein 0.3s ease-in-out;
  375. }
  376. input {
  377. filter: none;
  378. }
  379. input[type="text"],
  380. input[type="email"],
  381. input[type="password"] {
  382. box-sizing: border-box;
  383. width: 240px;
  384. height: 44px;
  385. padding: 0 24px;
  386. font-size: 15px;
  387. letter-spacing: 0.05em;
  388. color: #444;
  389. background-color: white;
  390. border: none;
  391. border-radius: 100px;
  392. border-bottom: 5px solid #f5f5f5;
  393. border-bottom-width: 5px;
  394. box-shadow: 0 10px 35px var(--input-shadow-color);
  395. transition: all 0.5s ease-out;
  396. }
  397. input[type="text"]:focus,
  398. input[type="email"]:focus,
  399. input[type="password"]:focus {
  400. outline: none;
  401. box-shadow: 0 20px 35px var(--input-hover-shadow-color);
  402. }
  403. input[type="text"]::placeholder,
  404. input[type="email"]::placeholder,
  405. input[type="password"]::placeholder {
  406. font-size: 14px;
  407. letter-spacing: 0.05em;
  408. color: #888;
  409. }
  410. .error input[type="text"],
  411. .error input[type="email"],
  412. .error input[type="password"] {
  413. border-bottom-color: rgba(250, 10, 10, 0.8);
  414. box-shadow: 0 10px 15px hsla(0, 100%, 75%, 0.2);
  415. }
  416. select {
  417. position: relative;
  418. width: 240px;
  419. height: 44px;
  420. padding: 0 24px;
  421. font-size: 15px;
  422. box-sizing: border-box;
  423. letter-spacing: 0.05em;
  424. color: #444;
  425. background-color: white;
  426. box-shadow: 0 10px 35px var(--input-shadow-color);
  427. border: none;
  428. border-radius: 100px;
  429. border-bottom: 5px solid #f5f5f5;
  430. border-bottom-width: 5px;
  431. transition: all 0.5s ease-out;
  432. appearance: none;
  433. background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='48' viewBox='0 0 24 24' fill='none' stroke='%235c666b' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  434. background-repeat: no-repeat, repeat;
  435. background-position: right 1.2em top 50%, 0 0;
  436. background-size: 1em auto, 100%;
  437. }
  438. select:focus {
  439. outline: none;
  440. box-shadow: 0 20px 35px var(--input-hover-shadow-color)
  441. }
  442. .error select {
  443. border-bottom-color: rgba(250, 10, 10, 0.8);
  444. box-shadow: 0 10px 15px hsla(0, 100%, 75%, 0.2);
  445. }
  446. input[type="checkbox"] {
  447. position: relative;
  448. width: 1rem;
  449. height: 1rem;
  450. display: flex;
  451. align-items: center;
  452. justify-content: center;
  453. border-radius: 4px;
  454. background-color: white;
  455. box-shadow: 0 2px 4px rgba(50, 50, 50, 0.2);
  456. margin: 0;
  457. -webkit-appearance: none;
  458. appearance: none;
  459. cursor: pointer;
  460. }
  461. input[type="checkbox"]:focus {
  462. outline: 3px solid var(--focus-outline-color);
  463. }
  464. input[type="checkbox"]::after {
  465. content: "";
  466. position: absolute;
  467. top: 50%;
  468. left: 50%;
  469. width: 80%;
  470. height: 80%;
  471. display: block;
  472. border-radius: 2px;
  473. background-color: var(--checkbox-bg-color);
  474. box-shadow: 0 2px 4px rgba(50, 50, 50, 0.2);
  475. cursor: pointer;
  476. opacity: 0;
  477. transform: translate(-50%, -50%) scale(0);
  478. transition: all 0.1s ease-in-out;
  479. }
  480. input[type="checkbox"]:checked:after {
  481. opacity: 1;
  482. transform: translate(-50%, -50%) scale(1);
  483. }
  484. input.table-input,
  485. select.table-input {
  486. width: auto;
  487. height: 32px;
  488. font-size: 13px;
  489. padding: 0 1.5rem;
  490. border-radius: 3px;
  491. border-bottom-width: 2px;
  492. }
  493. select.table-input {
  494. width: 150px;
  495. }
  496. input.table-input::placeholder {
  497. font-size: 13px;
  498. }
  499. select:has(option[value=""]:checked) {
  500. letter-spacing: 0.05em;
  501. color: #888;
  502. }
  503. label {
  504. display: flex;
  505. color: var(--input-label-color);
  506. font-size: 1rem;
  507. flex-direction: column;
  508. align-items: flex-start;
  509. font-weight: bold;
  510. }
  511. label input {
  512. margin-top: 0.5rem;
  513. }
  514. label.checkbox {
  515. flex-direction: row;
  516. align-items: center;
  517. cursor: pointer;
  518. font-weight: normal;
  519. }
  520. label.checkbox input[type="checkbox"] {
  521. margin: 0 0.75rem 2px 0;
  522. }
  523. p.error,
  524. p.success {
  525. display: flex;
  526. align-items: center;
  527. font-weight: normal;
  528. animation: fadein 0.3s ease-in-out;
  529. }
  530. p.error { color: red; }
  531. p.success { color: #0ea30e; }
  532. table {
  533. width: 100%;
  534. display: flex;
  535. flex-direction: column;
  536. background-color: white;
  537. border-radius: 12px;
  538. box-shadow: 0 6px 15px var(--table-shadow-color);
  539. text-align: center;
  540. overflow: auto;
  541. }
  542. table tr {
  543. flex: 1 1 auto;
  544. }
  545. table tr,
  546. table th,
  547. table td,
  548. table thead,
  549. table tfoot {
  550. display: flex;
  551. overflow: hidden;
  552. }
  553. table tbody,
  554. table tr {
  555. overflow: visible;
  556. }
  557. table tbody,
  558. table thead,
  559. table tfoot {
  560. flex-direction: column;
  561. }
  562. table tr {
  563. padding: 0 0.5rem;
  564. border-bottom: 1px solid var(--table-tr-border-color);
  565. }
  566. table th,
  567. table td {
  568. flex-basis: 0;
  569. padding: 0.75rem;
  570. }
  571. table td {
  572. position: relative;
  573. white-space: nowrap;
  574. font-size: 15px;
  575. align-items: center;
  576. }
  577. table tbody {
  578. border-bottom-right-radius: 12px;
  579. border-bottom-left-radius: 12px;
  580. animation: fadein 0.3s ease-in-out;
  581. }
  582. table tbody + tfoot {
  583. border: none;
  584. }
  585. table thead {
  586. background-color: var(--table-bg-color);
  587. border-top-right-radius: 12px;
  588. border-top-left-radius: 12px;
  589. font-weight: bold;
  590. }
  591. table thead tr {
  592. border-bottom: 1px solid var(--table-head-tr-border-color);
  593. }
  594. table tfoot {
  595. background-color: var(--table-bg-color);
  596. border-bottom-right-radius: 12px;
  597. border-bottom-left-radius: 12px;
  598. }
  599. table tr.loading-placeholder {
  600. flex: 1 1 auto;
  601. justify-content: center;
  602. animation: fadein 0.3s ease-in-out;
  603. }
  604. table tr.loading-placeholder td {
  605. flex: 0 0 auto;
  606. font-size: 18px;
  607. font-weight: 300;
  608. }
  609. table select {
  610. margin-right: 1rem;
  611. }
  612. table .tab {
  613. display: flex;
  614. align-items: center;
  615. }
  616. table .tab a {
  617. position: relative;
  618. display: flex;
  619. align-items: center;
  620. justify-content: center;
  621. padding: 0.4rem 1rem;
  622. margin: 0 0.5rem;
  623. font-size: 12px;
  624. color: var(--text-color);
  625. border: none;
  626. border-radius: 4px;
  627. background-color: white;
  628. cursor: pointer;
  629. box-shadow: 0 0px 10px rgba(100, 100, 100, 0.1);
  630. font-weight: normal;
  631. transition: all 0.2s ease-in-out;
  632. }
  633. table .tab a:first-child { margin-left: 0}
  634. table .tab a.active {
  635. background-color: #f6f6f6;
  636. box-shadow: 0 0px 5px rgba(150, 150, 150, 0.1);
  637. color: #aaa;
  638. font-weight: bold;
  639. opacity: 0.9;
  640. cursor: default;
  641. }
  642. table .tab a:not(.active):hover {
  643. transform: translateY(-2px);
  644. }
  645. .dialog {
  646. position: fixed;
  647. width: 100%;
  648. height: 100%;
  649. top: 0;
  650. left: 0;
  651. display: none;
  652. justify-content: center;
  653. align-items: center;
  654. background-color: rgba(50, 50, 50, 0.8);
  655. z-index: 1000;
  656. animation: fadein 0.2s ease-in-out;
  657. }
  658. .dialog.open { display: flex; }
  659. .dialog .box {
  660. min-width: 450px;
  661. max-width: 90%;
  662. display: flex;
  663. flex-direction: column;
  664. align-items: center;
  665. text-align: center;
  666. padding: 3rem 2rem;
  667. background-color: white;
  668. border-radius: 8px;
  669. --keyframe-slidey-offset: -30px;
  670. animation: slidey 0.2s ease-in-out;
  671. }
  672. .dialog.qrcode .box {
  673. min-width: auto;
  674. padding: 2rem;
  675. }
  676. .dialog .content-wrapper {
  677. display: flex;
  678. flex-direction: column;
  679. }
  680. .dialog .loading {
  681. display: none;
  682. width: 24px;
  683. height: 24px;
  684. margin: 3rem 0;
  685. animation: fadein 0.2s ease-in-out;
  686. }
  687. .dialog.htmx-request .loading {
  688. display: block;
  689. }
  690. .dialog.htmx-request .content-wrapper {
  691. display: none;
  692. }
  693. .dialog .loading svg {
  694. animation: spin 1s linear infinite;
  695. }
  696. .dialog .content {
  697. display: flex;
  698. flex-direction: column;
  699. animation: fadein 0.2s ease-in-out;
  700. }
  701. .dialog .content h2 {
  702. font-weight: bold !important;
  703. margin-bottom: 0.5rem !important;
  704. margin-top: 0;
  705. }
  706. .dialog .content .buttons {
  707. display: flex;
  708. align-items: center;
  709. margin-top: 1.5rem;
  710. }
  711. .dialog .content .buttons button { margin-right: 2rem; }
  712. .dialog .content .buttons button:last-of-type { margin-right: 0; }
  713. .dialog .content {
  714. align-items: center;
  715. }
  716. .dialog .content #dialog-error {
  717. margin-top: 1rem;
  718. margin-bottom: -1rem;
  719. }
  720. .dialog .content .icon {
  721. width: 48px;
  722. height: 48px;
  723. border-radius: 100%;
  724. padding: 5px;
  725. margin-bottom: 1.5rem;
  726. border: 2px solid;
  727. }
  728. .dialog .content .icon svg {
  729. width: 100%;
  730. height: auto;
  731. }
  732. .dialog .content .icon.success {
  733. border-color: var(--success-icon-color);
  734. }
  735. .dialog .content .icon.success svg {
  736. stroke-width: 2;
  737. stroke: var(--success-icon-color);
  738. }
  739. .dialog .content .icon.error {
  740. border-color: var(--error-icon-color);
  741. }
  742. .dialog .content .icon.error svg {
  743. stroke-width: 1.5;
  744. stroke: var(--error-icon-color);
  745. }
  746. .dialog .content svg.spinner {
  747. display: none;
  748. width: 24px;
  749. margin: 0.5rem 0;
  750. }
  751. .dialog .content.htmx-request svg.spinner { display: block; }
  752. .dialog .content.htmx-request button { display: none; }
  753. .dialog .content label { margin: 0.5rem 0; }
  754. .dialog .content input[type="text"],
  755. .dialog .content input[type="password"],
  756. .dialog .content input[type="email"],
  757. .dialog .content select {
  758. width: 320px;
  759. height: 48px;
  760. }
  761. .inputs { display: flex; align-items: flex-start; margin-bottom: 1rem; }
  762. .inputs label { flex: 0 0 0; margin-right: 1rem; }
  763. .inputs label:last-child { margin-right: 0; }
  764. .search-input-wrapper {
  765. position: relative;
  766. }
  767. .search-input-wrapper button {
  768. position: absolute;
  769. display: none;
  770. right: 0;
  771. top: 50%;
  772. width: auto;
  773. height: auto;
  774. padding: 3px;
  775. margin: 0;
  776. background-color: transparent;
  777. background: none;
  778. box-shadow: none;
  779. transform: translateY(-50%);
  780. cursor: pointer;
  781. margin-right: 0.25rem;
  782. transition: all 0.2s ease-in-out;
  783. }
  784. .search-input-wrapper button:hover {
  785. transform: translateY(-55%);
  786. }
  787. .search-input-wrapper svg {
  788. width: 0.9rem;
  789. height: auto;
  790. stroke-width: 2;
  791. stroke: #888;
  792. }
  793. [data-tooltip] {
  794. position: relative;
  795. overflow: visible;
  796. }
  797. [data-tooltip]:before,
  798. [data-tooltip]:after {
  799. position: absolute;
  800. left: 50%;
  801. display: none;
  802. font-size: 11px;
  803. line-height: 1;
  804. opacity: 0;
  805. transform: translate(-50%, -0.5rem);
  806. }
  807. [data-tooltip]:before {
  808. content: "";
  809. border: 4px solid transparent;
  810. top: -4px;
  811. border-bottom-width: 0;
  812. border-top-color: #333;
  813. z-index: 1001;
  814. }
  815. [data-tooltip]:after {
  816. content: attr(data-tooltip);
  817. top: -25px;
  818. text-align: center;
  819. min-width: 1rem;
  820. white-space: nowrap;
  821. overflow: hidden;
  822. text-overflow: ellipsis;
  823. padding: 5px 7px;
  824. border-radius: 4px;
  825. box-shadow: 0 1em 2em -0.5em rgba(0, 0, 0, 0.35);
  826. background: #333;
  827. color: #fff;
  828. z-index: 1000;
  829. }
  830. [data-tooltip]:hover:before,
  831. [data-tooltip]:hover:after {
  832. display: block;
  833. }
  834. [data-tooltip]:before,
  835. [data-tooltip]:after,
  836. [data-tooltip]:hover:before,
  837. [data-tooltip]:hover:after {
  838. animation: tooltip 300ms ease-out forwards;
  839. }
  840. /* DISTINCT */
  841. .main-wrapper {
  842. min-height: 100vh;
  843. width: 100%;
  844. display: flex;
  845. flex: 0 0 auto;
  846. align-items: center;
  847. flex-direction: column;
  848. }
  849. .section-container {
  850. max-width: 90%;
  851. flex: 1 1 auto;
  852. display: flex;
  853. flex-direction: column;
  854. align-items: flex-start;
  855. margin-top: 1rem;
  856. }
  857. .htmx-spinner .spinner { display: none; }
  858. .htmx-spinner.htmx-request button svg { display: none; }
  859. .htmx-spinner.htmx-request .spinner { display: block; }
  860. /* LOGIN & SIGNUP */
  861. form#login-signup {
  862. width: 420px;
  863. max-width: 100%;
  864. flex: 1 1 auto;
  865. display: flex;
  866. padding: 0 16px;
  867. flex-direction: column;
  868. margin: 3rem 0 0;
  869. }
  870. form#login-signup label { margin-bottom: 2rem; }
  871. form#login-signup input {
  872. width: 100%;
  873. height: 72px;
  874. margin-top: 1rem;
  875. padding: 0 3rem;
  876. font-size: 16px;
  877. }
  878. form#login-signup .buttons-wrapper {
  879. display: flex;
  880. align-items: center;
  881. justify-content: space-between;
  882. margin-bottom: 1.5rem;
  883. }
  884. form#login-signup .buttons-wrapper button {
  885. height: 56px;
  886. flex: 0 0 48%;
  887. padding: 0 1rem 2px;
  888. margin: 0;
  889. }
  890. form#login-signup .buttons-wrapper button.full { flex-basis: 100%; }
  891. form#login-signup a.forgot-password {
  892. align-self: flex-start;
  893. font-size: 14px;
  894. }
  895. form#login-signup svg.spinner { display: none; }
  896. form#login-signup.htmx-request:not(.signup) .login svg { display: none; }
  897. form#login-signup.htmx-request:not(.signup) .login svg.spinner { display: block; }
  898. form#login-signup.htmx-request.signup .signup svg { display: none; }
  899. form#login-signup.htmx-request.signup .signup svg.spinner { display: block; }
  900. form#login-signup.htmx-request .error { opacity: 0; }
  901. form#login-signup p.error {
  902. margin-bottom: 0;
  903. }
  904. .admin-form-title {
  905. font-size: 26px;
  906. font-weight: 300;
  907. margin: 0 0 3rem;
  908. text-align: center;
  909. }
  910. .login-signup-message {
  911. flex: 1 1 auto;
  912. margin-top: 3rem;
  913. }
  914. .login-signup-message h1 {
  915. font-weight: 300;
  916. font-size: 24px;
  917. }
  918. /* HEADER */
  919. header {
  920. box-sizing: border-box;
  921. margin: 0;
  922. width: 1232px;
  923. max-width: 100%;
  924. padding: 0 32px;
  925. height: 102px;
  926. justify-content: space-between;
  927. align-items: center;
  928. display: flex;
  929. }
  930. header .logo-wrapper {
  931. display: flex;
  932. align-items: center;
  933. }
  934. header a.logo {
  935. position: relative;
  936. display: flex;
  937. align-items: center;
  938. font-size: 22px;
  939. font-weight: bold;
  940. text-decoration: none;
  941. border: none;
  942. margin: 0;
  943. padding: 0;
  944. }
  945. header a.logo:hover { border: none; color: inherit; }
  946. header .logo img {
  947. margin: 0 12px 0 0;
  948. padding: 0;
  949. }
  950. header ul.logo-links {
  951. list-style: none;
  952. display: flex;
  953. align-items: flex-end;
  954. margin: 0 0 0 0.5rem;
  955. padding: 0;
  956. }
  957. header ul.logo-links li {
  958. padding: 2px 0 0;
  959. margin: 0 0 0 32px;
  960. }
  961. header ul.logo-links li a {
  962. font-size: 1rem;
  963. }
  964. header nav ul {
  965. display: flex;
  966. flex-direction: row-reverse;
  967. align-items: center;
  968. list-style: none;
  969. margin: 0;
  970. padding: 0;
  971. }
  972. header nav ul li {
  973. margin: 0 0 0 2rem;
  974. padding: 0;
  975. }
  976. header nav ul li:last-child { margin-left: 0; }
  977. /* SHORTENER */
  978. main {
  979. width: 800px;
  980. max-width: 100%;
  981. flex: 1 1 auto;
  982. display: flex;
  983. flex-direction: column;
  984. align-items: center;
  985. padding: 0 1rem;
  986. margin-top: 1rem;
  987. }
  988. main #shorturl {
  989. display: flex;
  990. align-items: center;
  991. margin: 1rem 0 3rem;
  992. }
  993. main #shorturl h1 {
  994. margin: 0;
  995. border-bottom: 2px dotted transparent;
  996. font-weight: 300;
  997. font-size: 2rem;
  998. }
  999. main #shorturl h1.link {
  1000. cursor: pointer;
  1001. border-bottom-color: var(--underline-color);
  1002. transition: opacity 0.3s ease-in-out;
  1003. --keyframe-slidey-offset: -10px;
  1004. animation: fadein 0.2s ease-in-out, slidey 0.2s ease-in-out;
  1005. }
  1006. main #shorturl h1.link:hover {
  1007. opacity: 0.8;
  1008. }
  1009. .clipboard {
  1010. width: 35px;
  1011. height: 35px;
  1012. display: flex;
  1013. margin-right: 1rem;
  1014. }
  1015. .clipboard button {
  1016. width: 100%;
  1017. height: 100%;
  1018. display: flex;
  1019. margin: 0;
  1020. padding: 7px;
  1021. box-shadow: none;
  1022. outline: none;
  1023. border: none;
  1024. background: none;
  1025. border-radius: 100%;
  1026. background-color: var(--copy-icon-bg-color);
  1027. transition: transform 0.4s ease-out;
  1028. box-shadow: 0 2px 1px var(--copy-icon-shadow-color);
  1029. cursor: pointer;
  1030. --keyframe-slidey-offset: -10px;
  1031. animation: slidey 0.2s ease-in-out;
  1032. }
  1033. .clipboard.small { width: 24px; height: 24px; }
  1034. .clipboard.small button { width: 24px; height: 24px; padding: 5px; }
  1035. .clipboard button:hover,
  1036. .clipboard button:focus {
  1037. transform: translateY(-2px) scale(1.02, 1.02);
  1038. }
  1039. .clipboard button:focus {
  1040. outline: 3px solid var(--focus-outline-color);
  1041. }
  1042. .clipboard svg {
  1043. stroke: var(--copy-icon-color);
  1044. width: 100%;
  1045. height: auto;
  1046. }
  1047. .clipboard svg.copy {
  1048. stroke-width: 2.5;
  1049. }
  1050. .clipboard svg.check {
  1051. display: none;
  1052. padding: 3px;
  1053. stroke-width: 3;
  1054. --keyframe-slidey-offset: -10px;
  1055. animation: slidey 0.2s ease-in-out;
  1056. }
  1057. .clipboard.copied button {
  1058. background-color: transparent;
  1059. box-shadow: none;
  1060. }
  1061. .clipboard.copied button { display: none; }
  1062. .clipboard.copied svg.check { display: block; }
  1063. main #shorturl h1 span {
  1064. border-bottom: 1px dotted #999;
  1065. }
  1066. main form {
  1067. position: relative;
  1068. width: 100%;
  1069. display: flex;
  1070. flex-direction: column;
  1071. }
  1072. main form input#target {
  1073. position: relative;
  1074. width: 100%;
  1075. height: 72px;
  1076. display: flex;
  1077. padding: 0 84px 0 40px;
  1078. font-size: 20px;
  1079. }
  1080. main form input#target::placeholder {
  1081. font-size: 17px;
  1082. }
  1083. main form p.error {
  1084. font-size: 13px;
  1085. margin-left: 0.5rem;
  1086. }
  1087. main form .target-wrapper p.error {
  1088. font-size: 15px;
  1089. margin-left: 1rem;
  1090. margin-bottom: 0;
  1091. }
  1092. main form .target-wrapper {
  1093. position: relative;
  1094. width: 100%;
  1095. height: auto;
  1096. }
  1097. main form button.submit {
  1098. box-sizing: content-box;
  1099. position: absolute;
  1100. cursor: pointer;
  1101. width: 28px;
  1102. height: auto;
  1103. right: 0;
  1104. top: 16px;
  1105. padding: 4px;
  1106. margin: 0 2rem 0;
  1107. background: none;
  1108. box-shadow: none;
  1109. outline: none;
  1110. border: none;
  1111. }
  1112. main form button.submit:focus,
  1113. main form button.submit:hover {
  1114. outline: none;
  1115. }
  1116. main form button.submit svg.send {
  1117. width: 100%;
  1118. fill: #aaa;
  1119. animation: fadein 0.3s ease-in-out;
  1120. transition: fill 0.2s ease-in-out;
  1121. }
  1122. main form button.submit:hover svg.send {
  1123. fill: var(--send-icon-hover-color);
  1124. }
  1125. main form button.submit svg.spinner {
  1126. display: none;
  1127. fill: none;
  1128. stroke: var(--send-spinner-icon-color);
  1129. stroke-width: 2;
  1130. }
  1131. main form.htmx-request button.submit svg.send { display: none; }
  1132. main form.htmx-request button.submit svg.spinner { display: block; }
  1133. main form label#advanced {
  1134. margin-top: 2rem;
  1135. align-self: flex-start;
  1136. }
  1137. main form label#advanced input {
  1138. width: 1.1rem;
  1139. height: 1.1rem;
  1140. margin-bottom: 2px;
  1141. }
  1142. #advanced-options {
  1143. display: flex;
  1144. flex-direction: column;
  1145. margin-top: 1.5rem;
  1146. }
  1147. #advanced-options.hidden { display: none; }
  1148. .advanced-input-wrapper {
  1149. width: 100%;
  1150. display: flex;
  1151. align-items: flex-start;
  1152. margin-bottom: 1rem;
  1153. }
  1154. .advanced-input-wrapper label {
  1155. flex: 1 1 0;
  1156. padding-right: 1rem;
  1157. }
  1158. .advanced-input-wrapper label.expire-in { flex: 1 1 34%; }
  1159. .advanced-input-wrapper label.description { flex: 1 1 65%; }
  1160. .advanced-input-wrapper label:last-child { padding-right: 0; }
  1161. .advanced-input-wrapper label input,
  1162. .advanced-input-wrapper label select {
  1163. width: 100%;
  1164. margin-top: 0.5rem;
  1165. }
  1166. /* MAIN TABLE */
  1167. #main-table-wrapper {
  1168. width: 1200px;
  1169. max-width: 100%;
  1170. display: flex;
  1171. flex-direction: column;
  1172. flex: 1 1 auto;
  1173. align-items: flex-start;
  1174. padding: 0 1rem;
  1175. margin: 7rem 0 7.5rem;
  1176. }
  1177. #main-table-wrapper h2 {
  1178. font-weight: 300;
  1179. margin-bottom: 1rem;
  1180. }
  1181. #main-table-wrapper table thead,
  1182. #main-table-wrapper table tbody,
  1183. #main-table-wrapper table tfoot {
  1184. min-width: 1000px;
  1185. }
  1186. #main-table-wrapper tr {
  1187. padding: 0 0.5rem;
  1188. }
  1189. #main-table-wrapper th,
  1190. #main-table-wrapper td {
  1191. padding: 1rem;
  1192. }
  1193. #main-table-wrapper td {
  1194. font-size: 1rem;
  1195. }
  1196. #main-table-wrapper table .original-url { flex: 7 7 0; }
  1197. #main-table-wrapper table .created-at { flex: 2.5 2.5 0; }
  1198. #main-table-wrapper table .short-link { flex: 3 3 0; }
  1199. #main-table-wrapper.admin-table-wrapper table .short-link { overflow: visible; }
  1200. #main-table-wrapper table .views { flex: 1 1 0; justify-content: flex-end; }
  1201. #main-table-wrapper table .actions { flex: 3 3 0; justify-content: flex-end; overflow: visible; }
  1202. #main-table-wrapper table .actions a.button,
  1203. #main-table-wrapper table .actions button { margin-right: 0.5rem; }
  1204. #main-table-wrapper table .actions a.button:last-child,
  1205. #main-table-wrapper table .actions button:last-child { margin-right: 0; }
  1206. #main-table-wrapper table .users-id { flex: 3 3 0; justify-content: flex-end; }
  1207. #main-table-wrapper table .users-email { flex: 9 9 0; }
  1208. #main-table-wrapper table .users-created-at { flex: 4 4 0; }
  1209. #main-table-wrapper table .users-updated-at { flex: 4 4 0; }
  1210. #main-table-wrapper table .users-verified { flex: 3 3 0; overflow: visible; }
  1211. #main-table-wrapper table .users-role { flex: 2 2 0; overflow: visible; }
  1212. #main-table-wrapper table .users-links-count { flex: 3 3 0; justify-content: flex-end; overflow: visible; }
  1213. #main-table-wrapper table .users-actions { flex: 2 2 0; }
  1214. #main-table-wrapper table .domains-id { flex: 2 2 0; justify-content: flex-end; }
  1215. #main-table-wrapper table .domains-address { flex: 7 7 0; }
  1216. #main-table-wrapper table .domains-homepage { flex: 5 5 0; }
  1217. #main-table-wrapper table .domains-created-at { flex: 3 3 0; }
  1218. #main-table-wrapper table .domains-links-count { flex: 3 3 0; justify-content: flex-end; overflow: visible; }
  1219. #main-table-wrapper table .domains-actions { flex: 2 2 0; }
  1220. #main-table-wrapper table td.original-url,
  1221. #main-table-wrapper table td.created-at,
  1222. #main-table-wrapper.admin-table-wrapper table td.short-link,
  1223. #main-table-wrapper table td.users-email,
  1224. #main-table-wrapper table td.domains-address,
  1225. #main-table-wrapper table td.users-created-at,
  1226. #main-table-wrapper table td.users-verified {
  1227. flex-direction: column;
  1228. align-items: flex-start;
  1229. justify-content: center;
  1230. }
  1231. table .short-link-wrapper { display: flex; align-items: center; }
  1232. #main-table-wrapper table td .description {
  1233. display: flex;
  1234. align-items: center;
  1235. margin: 0;
  1236. font-size: 14px;
  1237. color: #888;
  1238. }
  1239. #main-table-wrapper table td .description a {
  1240. color: #aaa;
  1241. border-bottom-color: #aaa;
  1242. }
  1243. #main-table-wrapper table td .description svg {
  1244. stroke: #aaa;
  1245. stroke-width: 2;
  1246. width: 0.85em;
  1247. margin-right: 0.25rem;
  1248. }
  1249. #main-table-wrapper table td .description span { color: #aaa; }
  1250. #main-table-wrapper table td .description a:hover { border-bottom-color: transparent; }
  1251. #main-table-wrapper table .status {
  1252. font-size: 11px;
  1253. font-weight: bold;
  1254. padding: 4px 12px;
  1255. border-radius: 12px;
  1256. margin-top: 0.25rem;
  1257. }
  1258. #main-table-wrapper table .status:first-child {
  1259. margin-top: 0;
  1260. }
  1261. #main-table-wrapper table .status.gray { background-color: var(--table-status-gray-bg-color); }
  1262. #main-table-wrapper table .status.green { background-color: hsl(102.4, 100%, 93.3%); }
  1263. #main-table-wrapper table .status.red { background-color: hsl(0, 100%, 96.7%); }
  1264. #main-table-wrapper table tr.no-data {
  1265. flex: 1 1 auto;
  1266. justify-content: center;
  1267. animation: fadein 0.3s ease-in-out;
  1268. }
  1269. #main-table-wrapper table.htmx-request tbody tr { opacity: 0.5; }
  1270. #main-table-wrapper table tr.loading-placeholder { opacity: 0.6 !important; }
  1271. #main-table-wrapper table tr.loading-placeholder td,
  1272. #main-table-wrapper table tr.no-data td {
  1273. flex: 0 0 auto;
  1274. font-size: 18px;
  1275. font-weight: 300;
  1276. }
  1277. #main-table-wrapper table tr.loading-placeholder svg.spinner {
  1278. width: 1rem;
  1279. height: auto;
  1280. margin-right: 0.5rem;
  1281. stroke-width: 1.5;
  1282. }
  1283. #main-table-wrapper table thead tr.controls { justify-content: space-between; }
  1284. #main-table-wrapper table thead tr.controls.with-filters { align-items: flex-end; }
  1285. #main-table-wrapper table tfoot tr.controls { justify-content: flex-end; }
  1286. #main-table-wrapper table th.search {
  1287. flex: 1 1 auto;
  1288. align-items: center;
  1289. }
  1290. #main-table-wrapper table th.filters {
  1291. flex: 1 1 auto;
  1292. flex-direction: column;
  1293. align-items: start;
  1294. }
  1295. #main-table-wrapper table th.filters > div {
  1296. display: flex;
  1297. align-items: center;
  1298. margin-bottom: 1rem;
  1299. }
  1300. #main-table-wrapper table th.filters > div:last-child { margin-bottom: 0; }
  1301. #main-table-wrapper table th.nav {
  1302. flex: 0 0 auto;
  1303. align-items: center;
  1304. }
  1305. #main-table-wrapper table tr.controls .checkbox {
  1306. margin-left: 1rem;
  1307. font-size: 15px;
  1308. }
  1309. #main-table-wrapper table .limit,
  1310. #main-table-wrapper table .pagination {
  1311. display: flex;
  1312. align-items: center;
  1313. }
  1314. #main-table-wrapper table button.nav { margin-right: 0.75rem; }
  1315. #main-table-wrapper table button.nav:last-child { margin-right: 0; }
  1316. #main-table-wrapper table .nav-divider {
  1317. height: 20px;
  1318. width: 1px;
  1319. opacity: 0.4;
  1320. background-color: #888;
  1321. margin: 0 1.5rem;
  1322. }
  1323. #main-table-wrapper table tbody tr:hover {
  1324. background-color: var(--table-tr-hover-bg-color);
  1325. }
  1326. #main-table-wrapper table tbody td.right-fade:after {
  1327. content: "";
  1328. position: absolute;
  1329. right: 0;
  1330. top: 0;
  1331. height: 100%;
  1332. width: 16px;
  1333. background: linear-gradient(to left, white, rgba(255, 255, 255, 0.001));
  1334. }
  1335. #main-table-wrapper table tbody tr:hover td.right-fade:after {
  1336. background: linear-gradient(to left, var(--table-tr-hover-bg-color), rgba(255, 255, 255, 0.001));
  1337. }
  1338. #main-table-wrapper table .clipboard { margin-right: 0.5rem; }
  1339. #main-table-wrapper table .clipboard svg.check { width: 24px; }
  1340. #main-table-wrapper table tr.edit {
  1341. background-color: #fafafa;
  1342. }
  1343. #main-table-wrapper table tr.edit td {
  1344. width: 100%;
  1345. padding: 2rem 1.5rem;
  1346. flex-basis: auto;
  1347. }
  1348. #main-table-wrapper table tr.edit td form {
  1349. width: 100;
  1350. display: flex;
  1351. flex-direction: column;
  1352. align-items: flex-start;
  1353. }
  1354. #main-table-wrapper table tr.edit td form > div {
  1355. width: 100%;
  1356. display: flex;
  1357. align-items: start;
  1358. }
  1359. #main-table-wrapper table tr.edit label { margin: 0 0.5rem 1rem; }
  1360. #main-table-wrapper table tr.edit label:first-child { margin-left: 0; }
  1361. #main-table-wrapper table tr.edit label:last-child { margin-right: 0; }
  1362. #main-table-wrapper table tr.edit input {
  1363. height: 44px;
  1364. padding: 0 1.5rem;
  1365. font-size: 15px;
  1366. }
  1367. #main-table-wrapper table tr.edit input,
  1368. #main-table-wrapper table tr.edit input + p {
  1369. width: 240px;
  1370. max-width: 100%;
  1371. font-size: 14px;
  1372. text-wrap: wrap;
  1373. text-align: left;
  1374. }
  1375. #main-table-wrapper table tr.edit input[name="target"],
  1376. #main-table-wrapper table tr.edit input[name="description"],
  1377. #main-table-wrapper table tr.edit input[name="target"] + p,
  1378. #main-table-wrapper table tr.edit input[name="description"] + p {
  1379. width: 420px;
  1380. }
  1381. #main-table-wrapper table tr.edit button {
  1382. height: 38px;
  1383. margin-right: 1rem;
  1384. }
  1385. #main-table-wrapper table tr.edit button:last-child { margin-right: 0; }
  1386. #main-table-wrapper table tr.edit form {
  1387. --keyframe-slidey-offset: -5px;
  1388. animation: fadein 0.3s ease-in-out, slidey 0.32s ease-in-out;
  1389. }
  1390. #main-table-wrapper table tr.edit form.no-animation { animation: none; }
  1391. #main-table-wrapper table tr.edit { display: none; }
  1392. #main-table-wrapper table tr.edit.show { display: flex; }
  1393. #main-table-wrapper table tr.edit td.loading { display: none; }
  1394. #main-table-wrapper table tr.edit.htmx-request td.loading { display: block; }
  1395. #main-table-wrapper table tr.edit td.loading svg { width: 16px; height: 16px; }
  1396. #main-table-wrapper table tr.edit form.htmx-request button .reload { display: none; }
  1397. #main-table-wrapper table tr.edit form button .loader { display: none; }
  1398. #main-table-wrapper table tr.edit form.htmx-request button .loader { display: inline-block; }
  1399. #main-table-wrapper table tr.edit form .response p { margin: 2rem 0 0; }
  1400. #main-table-wrapper table tr.edit p.no-data {
  1401. width: 100%;
  1402. text-align: center;
  1403. }
  1404. .dialog .ban-checklist {
  1405. display: flex;
  1406. align-items: center;
  1407. }
  1408. .dialog .ban-checklist label { margin: 1rem 1.5rem 1rem 0; }
  1409. .dialog .ban-checklist label:last-child { margin-right: 0; }
  1410. #main-table-wrapper tr.category { justify-content: space-between; align-items: center; }
  1411. #main-table-wrapper th.category-total { flex: 1 1 auto; }
  1412. #main-table-wrapper th.category-total p { margin: 0; font-size: 15px; font-weight: normal }
  1413. #main-table-wrapper th.category-tab { flex: 2 2 auto; justify-content: flex-end; }
  1414. /* ADMIN */
  1415. table .search-input-wrapper {
  1416. margin-right: 1rem;
  1417. }
  1418. input.search.admin {
  1419. max-width: 200px;
  1420. }
  1421. .content.admin-create form {
  1422. display: flex;
  1423. flex-direction: column;
  1424. }
  1425. .content.admin-create .checkbox-wrapper {
  1426. display: flex;
  1427. align-items: center;
  1428. }
  1429. .content.admin-create .checkbox-wrapper label { margin-right: 1rem; }
  1430. .content.admin-create .buttons { justify-content: center; }
  1431. .content.admin-create .buttons button { flex: 1 1 auto; }
  1432. /* FOOTER */
  1433. footer {
  1434. width: 100%;
  1435. display: flex;
  1436. justify-content: center;
  1437. padding: 1rem 0;
  1438. font-size: 13px;
  1439. text-align: center;
  1440. }
  1441. footer button.link {
  1442. display: inline-block;
  1443. font-size: 13px;
  1444. }
  1445. footer button.link .spinner {
  1446. display: none;
  1447. width: 1em;
  1448. margin: 0 0 -2px;
  1449. }
  1450. footer button.link.htmx-request .spinner { display: inline; }
  1451. /* SETTINGS */
  1452. #settings {
  1453. width: 600px;
  1454. max-width: 100%;
  1455. padding: 0 16px;
  1456. overflow: hidden;
  1457. }
  1458. h1.settings-welcome {
  1459. font-size: 28px;
  1460. font-weight: 300;
  1461. }
  1462. h1.settings-welcome span {
  1463. border-bottom: 2px dotted #999;
  1464. padding-bottom: 2px;
  1465. font-weight: normal;
  1466. }
  1467. /* SETTINGS - DOMAIN */
  1468. #domains-table { margin-top: 1rem; }
  1469. #domains-table .domain { flex: 2 2 0; }
  1470. #domains-table .homepage { flex: 2 2 0; }
  1471. #domains-table .actions { flex: 1 1 0; justify-content: flex-end; padding-right: 1rem; }
  1472. #domains-table .no-entry { flex: 1 1 0; opacity: 0.8; }
  1473. .add-domain-wrapper {
  1474. width: 100%;
  1475. display: flex;
  1476. flex-direction: column;
  1477. align-items: flex-start;
  1478. margin: 1.5rem 0 2rem;
  1479. }
  1480. .add-domain-wrapper > .spinner {
  1481. width: 20px;
  1482. display: none;
  1483. margin: 1rem 0 0 1rem;
  1484. }
  1485. .add-domain-wrapper.htmx-request > button { display: none; }
  1486. .add-domain-wrapper.htmx-request > .spinner { display: block; }
  1487. form#add-domain { margin-top: 1rem; }
  1488. form#add-domain .buttons-wrapper { display: flex; }
  1489. form#add-domain button { margin-right: 1rem }
  1490. form#add-domain .spinner { width: 20px; display: none; }
  1491. form#add-domain.htmx-request .buttons-wrapper { display: none; }
  1492. form#add-domain.htmx-request .spinner { display: block; }
  1493. form#add-domain .error { font-size: 0.85rem; }
  1494. /* SETTINGS - API */
  1495. #apikey-wrapper { margin-bottom: 1.5rem; }
  1496. #apikey {
  1497. display: flex;
  1498. align-items: center;
  1499. margin-bottom: 1rem;
  1500. }
  1501. #apikey p {
  1502. font-weight: bold;
  1503. border-bottom: 1px dotted #999;
  1504. transition: opacity 0.2s ease-in-out;
  1505. cursor: pointer;
  1506. line-break: anywhere;
  1507. }
  1508. #apikey p:hover {
  1509. opacity: 0.8;
  1510. }
  1511. form#generate-apikey .spinner { display: none; }
  1512. form#generate-apikey.htmx-request svg { display: none; }
  1513. form#generate-apikey.htmx-request .spinner { display: block; }
  1514. /* SETTINGS - CHANGE PASSWORD */
  1515. #change-password-wrapper { margin-bottom: 1.5rem; }
  1516. form#change-password { margin-top: 1.5rem; }
  1517. form#change-password button { margin-top: 1rem; }
  1518. form#change-password .spinner { display: none; }
  1519. form#change-password.htmx-request svg { display: none; }
  1520. form#change-password.htmx-request .spinner { display: block; }
  1521. /* SETTINGS - CHANGE EMAIL */
  1522. #change-email-wrapper { margin-bottom: 1.5rem; }
  1523. form#change-email { margin-top: 1.5rem; }
  1524. form#change-email button { margin-top: 1rem; }
  1525. form#change-email .spinner { display: none; }
  1526. form#change-email.htmx-request svg { display: none; }
  1527. form#change-email.htmx-request .spinner { display: block; }
  1528. /* SETTINGS - DELETE ACCOUNT */
  1529. #delete-account-wrapper { margin-bottom: 1.5rem; }
  1530. form#delete-account { margin-top: 1.5rem; }
  1531. form#delete-account button { margin-top: 1rem; }
  1532. form#delete-account .spinner { display: none; }
  1533. form#delete-account.htmx-request svg { display: none; }
  1534. form#delete-account.htmx-request .spinner { display: block; }
  1535. /* STATS */
  1536. #stats-section {
  1537. width: 1200px;
  1538. max-width: 100%;
  1539. padding: 0 16px;
  1540. }
  1541. .loading-stats {
  1542. width: 100%;
  1543. flex: 1 1 0;
  1544. margin-top: -5rem;
  1545. display: flex;
  1546. align-items: center;
  1547. justify-content: center;
  1548. }
  1549. .loading-stats .spinner {
  1550. width: 1.25rem;
  1551. margin-right: 0.5rem;
  1552. }
  1553. .stats-info {
  1554. width: 100%;
  1555. display: flex;
  1556. align-items: flex-end;
  1557. justify-content: space-between;
  1558. }
  1559. .stats-info h2 { font-weight: 300; font-size: 24px; }
  1560. .stats-info p { font-size: 14px; }
  1561. .stats-info h2,
  1562. .stats-info p { margin: 0 }
  1563. #stats {
  1564. width: 100%;
  1565. display: flex;
  1566. flex-direction: column;
  1567. align-items: stretch;
  1568. background-color: white;
  1569. border-radius: 12px;
  1570. box-shadow: 0 6px 15px var(--table-shadow-color);
  1571. overflow: hidden;
  1572. padding: 0;
  1573. }
  1574. .stats-head {
  1575. width: 100%;
  1576. display: flex;
  1577. align-items: center;
  1578. background-color: var(--table-bg-color);
  1579. justify-content: space-between;
  1580. padding: 0.75rem 1.5rem;
  1581. }
  1582. .total-number { font-weight: bold; }
  1583. .stats-nav { display: flex; align-items: center; }
  1584. .stats-nav button { margin-right: 0.75rem; }
  1585. .stats-nav button:last-child { margin-right: 0; }
  1586. .stats-period {
  1587. display: flex;
  1588. flex-direction: column;
  1589. align-items: stretch;
  1590. padding: 0.75rem 1.5rem;
  1591. }
  1592. .stats-period h2 {
  1593. font-size: 24px;
  1594. font-weight: 300;
  1595. margin: 1rem 0 0;
  1596. }
  1597. .stats-period span.total-in-period {
  1598. font-weight: bold;
  1599. border-bottom: 1px dotted var(--underline-color);
  1600. }
  1601. p.last-update {
  1602. font-size: 14px;
  1603. color: var(--secondary-text-color);
  1604. margin: 0.75rem 0 0;
  1605. }
  1606. #stats canvas {
  1607. width: 100%;
  1608. margin: 2rem 0;
  1609. }
  1610. .stats-columns-wrapper {
  1611. display: flex;
  1612. align-items: flex-start;
  1613. }
  1614. .stats-columns-wrapper > div {
  1615. flex: 1 1 50%;
  1616. }
  1617. svg.map { width: 100%; }
  1618. svg.map path {
  1619. fill: hsl(200, 15%, 92%);
  1620. stroke: #fff;
  1621. transition: all 0.1s ease-in-out;
  1622. }
  1623. svg.map path.color-1 { fill: hsl(261, 46%, 90%); }
  1624. svg.map path.color-2 { fill: hsl(261, 46%, 86%); }
  1625. svg.map path.color-3 { fill: hsl(261, 46%, 82%); }
  1626. svg.map path.color-4 { fill: hsl(261, 46%, 76%); }
  1627. svg.map path.color-5 { fill: hsl(261, 46%, 72%); }
  1628. svg.map path.color-6 { fill: hsl(261, 46%, 68%); }
  1629. svg.map path.active { stroke: hsl(261, 46%, 50%); stroke-width: 1.5; }
  1630. #map-tooltip {
  1631. position: fixed;
  1632. }
  1633. #map-tooltip.visible::before,
  1634. #map-tooltip.visible::after {
  1635. display: block !important;
  1636. }
  1637. #map-tooltip:before {
  1638. border-top-color: rgba(255, 255, 255, 0.95);
  1639. }
  1640. #map-tooltip:after {
  1641. box-shadow: 0 1em 2em -0.5em rgba(0, 0, 0, 0.15);
  1642. background: rgba(255, 255, 255, 0.95);
  1643. color: #333;
  1644. }
  1645. .stats-back-to-home {
  1646. width: 100%;
  1647. display: flex;
  1648. justify-content: center;
  1649. margin: 2rem 0;
  1650. }
  1651. .stats-error {
  1652. width: 100%;
  1653. flex: 1 1 auto;
  1654. display: flex;
  1655. flex-direction: column;
  1656. align-items: center;
  1657. justify-content: center;
  1658. text-align: center;
  1659. }
  1660. .stats-error p { margin-top: -3rem; display: flex; align-items: center; }
  1661. .stats-error p svg { width: 1.2rem; margin: 0 0.5rem 0.1rem 0; }
  1662. .stats-error .stats-back-to-home { margin-top: 0 }
  1663. /* 404 - NOT FOUND */
  1664. #notfound {
  1665. width: 800px;
  1666. align-items: center;
  1667. }
  1668. #notfound h2 {
  1669. font-size: 28px;
  1670. font-weight: 300;
  1671. text-align: center;
  1672. }
  1673. /* BANNED */
  1674. #banned { width: 1200px; align-items: center; text-align: center }
  1675. #banned h2 { font-weight: normal; }
  1676. #banned h4 { font-weight: normal; margin: 0; }
  1677. /* REPORT */
  1678. #report { width: 600px; }
  1679. #report form {
  1680. display: flex;
  1681. flex-direction: column;
  1682. margin-top: 2rem;
  1683. }
  1684. #report form .inputs-wrapper {
  1685. display: flex;
  1686. align-items: flex-end;
  1687. }
  1688. #report form button { margin: 0 0 0.2rem 1rem; }
  1689. #report form .spinner { display: none; }
  1690. #report form.htmx-request svg { display: none; }
  1691. #report form.htmx-request .spinner { display: block; }
  1692. #report-email .spinner { display: none; }
  1693. #report-email .htmx-request svg { display: none; }
  1694. #report-email .htmx-request .spinner { display: block; }
  1695. .eye-icon svg { stroke-width: 0.5; }
  1696. /* RESET PASSWORD */
  1697. #reset-password form {
  1698. width: 100%;
  1699. display: flex;
  1700. flex-direction: column;
  1701. }
  1702. #reset-password form .inputs-wrapper {
  1703. display: flex;
  1704. align-items: flex-end;
  1705. margin-top: 2rem;
  1706. }
  1707. #reset-password form label { flex: 0 0 280px; }
  1708. #reset-password form label input { width: 100%; }
  1709. #reset-password form button { margin: 0 0 0.2rem 1rem; }
  1710. #new-password h2 { margin-bottom: 0.5rem; }
  1711. #new-password p { margin-bottom: 1.5rem; }
  1712. #new-password-form label { margin-bottom: 1.5rem; }
  1713. #new-password-form label input { width: 280px; }
  1714. #new-password form {
  1715. width: 420px;
  1716. max-width: 100%;
  1717. flex: 1 1 auto;
  1718. display: flex;
  1719. padding: 0 16px;
  1720. flex-direction: column;
  1721. }
  1722. #new-password form label { margin-bottom: 2rem; }
  1723. #new-password form input {
  1724. width: 100%;
  1725. height: 72px;
  1726. margin-top: 1rem;
  1727. padding: 0 3rem;
  1728. font-size: 16px;
  1729. }
  1730. #new-password form button {
  1731. height: 56px;
  1732. padding: 0 1rem 2px;
  1733. margin: 0;
  1734. }
  1735. /* VERIFY USER */
  1736. /* VERIFY CHANGE EMAIL */
  1737. /* RESET PASSWORD TOKEN */
  1738. .verify-page {
  1739. width: 600px;
  1740. align-items: center;
  1741. }
  1742. .verify-page h2,
  1743. .verify-page h3 {
  1744. display: flex;
  1745. align-items: center;
  1746. text-align: center;
  1747. font-weight: normal;
  1748. }
  1749. .verify-page h2 svg,
  1750. .verify-page h3 svg {
  1751. width: 1.15em;
  1752. height: auto;
  1753. margin-right: 0.5rem;
  1754. }
  1755. /* URL INFO */
  1756. #url-info {
  1757. width: 1200px;
  1758. align-items: center;
  1759. text-align: center;
  1760. padding: 0 16px;
  1761. }
  1762. #url-info h3 { font-weight: normal; margin: 0; }
  1763. #url-info p { line-break: anywhere; }
  1764. /* PROTECTED */
  1765. #protected { width: 600px; }
  1766. #protected form { width: 100%; margin-top: 1rem; }
  1767. #protected form .inputs-wrapper { width: 100%; display: flex; align-items: flex-end; }
  1768. #protected form label { flex: 0 0 280px; }
  1769. #protected form label input { width: 100%; }
  1770. #protected form button { margin: 0 0 0.2rem 1rem; }
  1771. #protected form .spinner { display: none; }
  1772. #protected form.htmx-request svg { display: none; }
  1773. #protected form.htmx-request .spinner { display: block; }
  1774. /* TERMS */
  1775. #terms { width: 600px; }
  1776. /* ERROR PAGE */
  1777. #error-page { align-items: center; text-align: center; }
  1778. #error-page h2 { margin: 0; }
  1779. #error-page .back-to-home { margin-top: 2rem; }
  1780. /* RESPONSIVE STYLES */
  1781. @media only screen and (max-width: 768px) {
  1782. html, body { font-size: 14px; }
  1783. input[type="text"],
  1784. input[type="email"],
  1785. input[type="password"],
  1786. select {
  1787. font-size: 14px;
  1788. padding: 0 16px;
  1789. height: 38px;
  1790. letter-spacing: 0.04em;
  1791. border-bottom-width: 4px;
  1792. }
  1793. label input { margin-top: 0.25rem; }
  1794. input[type="text"]::placeholder,
  1795. input[type="email"]::placeholder,
  1796. input[type="password"]::placeholder { font-size: 13px; letter-spacing: 0.04em; }
  1797. table tr { padding: 0 0.25rem; }
  1798. table th,
  1799. table td { padding: 0.5rem; }
  1800. table td { font-size: 14px; }
  1801. table tr.loading-placeholder td { font-size: 16px; }
  1802. a.button,
  1803. button { height: 32px; padding: 0 22px; font-size: 12px; }
  1804. a.button.action,
  1805. button.action { padding: 4px; width: 20px; height: 20px; }
  1806. button.nav { height: 26px; padding: 0 7px; font-size: 11px; }
  1807. .dialog .box { min-width: 300px; padding: 2rem 1.25rem; }
  1808. .dialog.qrcode .box { padding: 1.5rem; }
  1809. .dialog .loading { width: 20px; height: 20px; margin: 2rem 0; }
  1810. .dialog .content .buttons { margin-top: 1rem; }
  1811. header { padding: 16px 16px 0; height: 72px; }
  1812. header a.logo { font-size: 20px; }
  1813. header ul.logo-links { display: none; }
  1814. header .logo img { margin-right: 8px; }
  1815. header nav ul li { margin-left: 0.75rem }
  1816. header nav ul li a.button { height: 28px; padding: 0 1rem; font-size: 11px; }
  1817. form#login-signup label { margin-bottom: 1.5rem; }
  1818. form#login-signup input {
  1819. height: 58px;
  1820. margin-top: 0.75rem;
  1821. padding: 0 2rem;
  1822. font-size: 15px;
  1823. }
  1824. form#login-signup .buttons-wrapper { margin-bottom: 1rem; }
  1825. form#login-signup .buttons-wrapper button { height: 44px; }
  1826. form#login-signup a.forgot-password { font-size: 13px; }
  1827. .login-signup-message { margin-top: 1.5rem; }
  1828. .login-signup-message h1 { font-size: 20px; }
  1829. main #shorturl { margin-bottom: 1.5rem; }
  1830. main #shorturl h1 { font-size: 1.6rem; }
  1831. .clipboard { width: 30px; height: 30px; margin-right: 0.5rem; }
  1832. .clipboard svg.check { padding: 2px; }
  1833. main form input#target { height: 58px; padding: 0 58px 0 26px; font-size: 15px; }
  1834. main form input#target::placeholder { font-size: 14px; }
  1835. main form p.error { font-size: 12px; margin-left: 0.25rem; }
  1836. main form .target-wrapper p.error { font-size: 13px; margin-left: 0.5rem; }
  1837. main form button.submit { width: 22px; top: 13px; margin: 0 1rem 0; }
  1838. main form label#advanced { margin-top: 1.5rem; }
  1839. main form label#advanced input { margin-bottom: 3px; }
  1840. #main-table-wrapper { margin: 4rem 0 4.5rem;}
  1841. #main-table-wrapper h2 { margin-bottom: 0.5rem; }
  1842. #main-table-wrapper table thead,
  1843. #main-table-wrapper table tbody,
  1844. #main-table-wrapper table tfoot { min-width: 800px; }
  1845. #main-table-wrapper tr { padding: 0 0.25rem; }
  1846. #main-table-wrapper th,
  1847. #main-table-wrapper td { padding: 0.75rem; }
  1848. #main-table-wrapper table .actions a.button,
  1849. #main-table-wrapper table .actions button { margin-right: 0.3rem; }
  1850. #main-table-wrapper table td p.description { font-size: 12px; }
  1851. #main-table-wrapper table tr.no-data td { font-size: 16px; }
  1852. #main-table-wrapper.admin-table-wrapper table th.nav { flex-direction: column; align-items: flex-end; }
  1853. #main-table-wrapper.admin-table-wrapper table th .nav-divider { display: none; }
  1854. #main-table-wrapper.admin-table-wrapper table th .limit { margin-bottom: 1rem; }
  1855. table .tab a { padding: 0.3rem 0.9rem; }
  1856. #main-table-wrapper th.category-total p { font-size: 13px; }
  1857. #main-table-wrapper table thead tr.controls.with-filters { align-items: flex-start; }
  1858. #main-table-wrapper table th select, input.table-input { height: 28px; font-size: 12px; padding: 0 1rem; }
  1859. #main-table-wrapper table th select { background-position: right 0.7em top 50%, 0 0; }
  1860. .search-input-wrapper button { padding: 2px; margin-right: 0.15rem; }
  1861. #main-table-wrapper table th input.search.admin { max-width: 150px; padding: 0 1.5rem 0 1rem; }
  1862. #main-table-wrapper table th select.table-input { max-width: 120px; }
  1863. #main-table-wrapper table th button.table { height: 28px; }
  1864. #main-table-wrapper table th input::placeholder { font-size: 12px; }
  1865. #main-table-wrapper table tr.controls .checkbox { font-size: 13px; }
  1866. #main-table-wrapper table button.nav { margin-right: 0.5rem; }
  1867. #main-table-wrapper table .nav-divider { height: 18px; margin: 0 1rem; }
  1868. #main-table-wrapper table tbody td.right-fade:after { width: 14px; }
  1869. #main-table-wrapper table tr.edit td { padding: 1.25rem 1rem; }
  1870. #main-table-wrapper table tr.edit label { margin: 0 0.25rem 0.5rem; }
  1871. #main-table-wrapper table tr.edit input { height: 38px; padding: 0 1rem; font-size: 13px; }
  1872. #main-table-wrapper table tr.edit input,
  1873. #main-table-wrapper table tr.edit input + p { width: 200px; }
  1874. #main-table-wrapper table tr.edit input[name="target"],
  1875. #main-table-wrapper table tr.edit input[name="description"],
  1876. #main-table-wrapper table tr.edit input[name="target"] + p,
  1877. #main-table-wrapper table tr.edit input[name="description"] + p { width: 320px; }
  1878. #main-table-wrapper table tr.edit button { height: 32px; margin-right: 0.5rem; }
  1879. #main-table-wrapper table tr.edit td.loading svg { width: 14px; height: 14px; }
  1880. #main-table-wrapper table tr.edit form .response p { margin: 1rem 0 0; }
  1881. .dialog .ban-checklist label { margin: 0.5rem 1rem 0.5rem 0; }
  1882. footer { padding: 0.75rem 0; font-size: 12px; }
  1883. footer button.link { font-size: 12px; }
  1884. h1.settings-welcome { font-size: 18px; }
  1885. .add-domain-wrapper { margin: 1rem 0 1rem; }
  1886. .add-domain-wrapper > .spinner { width: 18px; margin: 0.5rem 0 0 0.5rem; }
  1887. form#add-domain { margin-top: 0.75rem; }
  1888. form#add-domain button { margin-right: 0.5rem }
  1889. .stats-info { flex-direction: column; align-items: flex-start; justify-content: flex-start; }
  1890. .stats-info h2 { font-size: 18px; margin-bottom: 0.25rem; }
  1891. .stats-info p { font-size: 11px; line-break: anywhere; }
  1892. .stats-head { padding: 0rem 1rem; }
  1893. .stats-head p { font-size: 0.9rem; }
  1894. .stats-nav button { margin-right: 0.5rem; }
  1895. .stats-period { padding: 0.5rem 1rem; }
  1896. .stats-period h2 { font-size: 18px; margin: 0.5rem 0 0; }
  1897. p.last-update { font-size: 12px; }
  1898. #stats canvas { margin: 1rem 0; }
  1899. .stats-columns-wrapper { flex-direction: column; }
  1900. .stats-columns-wrapper > div { flex-basis: 100%; }
  1901. #notfound h2 { font-size: 20px; }
  1902. #report form { margin-top: 1.5rem; }
  1903. #report form .inputs-wrapper { flex-direction: column; align-items: flex-start; }
  1904. #report form button { margin: 0.75rem 0 0.2rem 0; }
  1905. #reset-password form .inputs-wrapper { flex-direction: column; align-items: flex-start; margin-top: 1rem; }
  1906. #reset-password form label { flex-basis: 0; width: 280px; }
  1907. #reset-password form button { margin: 0.75rem 0 0.2rem 0; }
  1908. #new-password form label { margin-bottom: 1.5rem; }
  1909. #new-password form input {
  1910. height: 58px;
  1911. margin-top: 0.75rem;
  1912. padding: 0 2rem;
  1913. font-size: 15px;
  1914. }
  1915. #new-password form button { height: 44px; }
  1916. .verify-page h2,
  1917. .verify-page h3 { display: flex; flex-direction: column; }
  1918. #protected form { margin-top: 0.5rem; }
  1919. #protected form .inputs-wrapper { flex-direction: column; align-items: flex-start; }
  1920. #protected form label { flex-basis: 0; width: 280px; }
  1921. #protected form button { margin: 0.75rem 0 0.2rem 0; }
  1922. }
  1923. @media only screen and (max-width: 640px) {
  1924. table tr.loading-placeholder { justify-content: flex-start; }
  1925. .inputs { flex-direction: column; margin-bottom: 0.75rem; }
  1926. .inputs label { margin: 0 0 0.75rem; }
  1927. .inputs label:last-child { margin: 0; }
  1928. .advanced-input-wrapper { flex-direction: column; margin-bottom: 0; }
  1929. .advanced-input-wrapper label { width: 100%; margin-bottom: 0.75rem; padding-right: 0; }
  1930. .advanced-input-wrapper label input,
  1931. .advanced-input-wrapper label select { margin-top: 0.5rem; }
  1932. form#add-domain .spinner { width: 18px; }
  1933. #apikey-wrapper { max-width: 100%; }
  1934. #apikey p { font-size: 0.85rem; }
  1935. #apikey .clipboard { width: 22px; height: 22px; }
  1936. }