styles.css 47 KB

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