base.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. <!--
  2. Copyright (C) 2023 Nicola Murino
  3. This WebUI uses the KeenThemes Mega Bundle, a proprietary theme:
  4. https://keenthemes.com/products/templates-mega-bundle
  5. KeenThemes HTML/CSS/JS components are allowed for use only within the
  6. SFTPGo product and restricted to be used in a resealable HTML template
  7. that can compete with KeenThemes products anyhow.
  8. This WebUI is allowed for use only within the SFTPGo product and
  9. therefore cannot be used in derivative works/products without an
  10. explicit grant from the SFTPGo Team ([email protected]).
  11. -->
  12. {{- define "errmsg"}}
  13. <div id="errorMsg" class="{{if not . }}d-none {{end}}alert alert-dismissible bg-light-warning d-flex align-items-center p-5 mb-10">
  14. <i class="ki-duotone ki-information-5 fs-3x text-warning me-5">
  15. <span class="path1"></span>
  16. <span class="path2"></span>
  17. <span class="path3"></span>
  18. </i>
  19. <div class="text-gray-800 fw-bold fs-5 d-flex flex-column pe-0 pe-sm-10">
  20. <span id="errorTxt">{{.}}</span>
  21. </div>
  22. <button id="id_dismiss_error_msg" type="button" class="position-absolute position-sm-relative m-2 m-sm-0 top-0 end-0 btn btn-icon btn-sm btn-active-light-primary ms-sm-auto">
  23. <i class="ki-duotone ki-cross fs-2x text-primary">
  24. <span class="path1"></span>
  25. <span class="path2"></span>
  26. </i>
  27. </button>
  28. </div>
  29. {{- end}}
  30. {{- define "theme-setup"}}
  31. <script type="text/javascript" {{- if .}} nonce="{{.}}"{{- end}}>
  32. var defaultThemeMode = "system";
  33. var themeMode;
  34. if ( document.documentElement ) {
  35. if ( document.documentElement.hasAttribute("data-bs-theme-mode")) {
  36. themeMode = document.documentElement.getAttribute("data-bs-theme-mode");
  37. } else {
  38. if ( localStorage.getItem("data-bs-theme") !== null ) {
  39. themeMode = localStorage.getItem("data-bs-theme");
  40. } else {
  41. themeMode = defaultThemeMode;
  42. }
  43. }
  44. if (themeMode === "system") {
  45. themeMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
  46. }
  47. document.documentElement.setAttribute("data-bs-theme", themeMode);
  48. }
  49. </script>
  50. {{- end }}
  51. {{- define "commonjs"}}
  52. <script type="text/javascript" {{- if .}} nonce="{{.}}"{{- end}}>
  53. window.addEventListener("pageshow", function (event) {
  54. if (event.persisted) {
  55. let loadings = document.querySelectorAll('[data-kt-indicator=on]');
  56. if (loadings){
  57. [].forEach.call(loadings, function (loading) {
  58. loading.removeAttribute('data-kt-indicator');
  59. loading.disabled = false;
  60. });
  61. }
  62. }
  63. });
  64. </script>
  65. {{- end}}
  66. {{- define "basejs"}}
  67. <script type="text/javascript" {{- if .}} nonce="{{.}}"{{- end}}>
  68. function escapeHTML(str) {
  69. var div = document.createElement('div');
  70. div.appendChild(document.createTextNode(str));
  71. return div.innerHTML;
  72. }
  73. function unescapeHTML(escapedStr) {
  74. var div = document.createElement('div');
  75. div.innerHTML = escapedStr;
  76. var child = div.childNodes[0];
  77. return child ? child.nodeValue : '';
  78. }
  79. function escapeHTMLForceSafe(str) {
  80. return str
  81. .replace(/&/g, '_')
  82. .replace(/</g, '_')
  83. .replace(/>/g, '_')
  84. .replace(/\"/g, '_')
  85. .replace(/\'/g, '_');
  86. }
  87. function fixedEncodeURIComponent(str) {
  88. return encodeURIComponent(unescapeHTML(str)).replace(/[!'()*]/g, function (c) {
  89. return '%' + c.charCodeAt(0).toString(16);
  90. });
  91. }
  92. function replaceSlash(str){
  93. return str.replace(/\//g,'\u2215');
  94. }
  95. function b64EncodeUnicode(str) {
  96. return btoa(encodeURIComponent(str));
  97. }
  98. function UnicodeDecodeB64(str) {
  99. return decodeURIComponent(atob(str));
  100. }
  101. function fileSizeIEC(a,b,c,d,e){
  102. return (b=Math,c=b.log,d=1024,e=c(a)/c(d)|0,a/b.pow(d,e)).toFixed(1)
  103. +' '+(e?'KMGTPEZY'[--e]+'iB':'Bytes')
  104. }
  105. function initRepeaterItems() {
  106. let repeaterDeleteButtons = document.querySelectorAll('[data-repeater-delete]');
  107. let repeaterCreateButtons = document.querySelectorAll('[data-repeater-create]');
  108. repeaterDeleteButtons.forEach(d => {
  109. d.addEventListener("click", function(e){
  110. e.preventDefault();
  111. });
  112. });
  113. repeaterCreateButtons.forEach(d => {
  114. d.addEventListener("click", function(e){
  115. e.preventDefault();
  116. });
  117. });
  118. }
  119. function initRepeater(selector) {
  120. $(selector).repeater({
  121. initEmpty: false,
  122. show: function () {
  123. $(this).slideDown();
  124. $(this).find('[data-repeater-delete]').on("click", function(e){
  125. e.preventDefault();
  126. });
  127. },
  128. hide: function (deleteElement) {
  129. $(this).slideUp(deleteElement);
  130. }
  131. });
  132. }
  133. function clearChilds(el) {
  134. while (el.firstChild) {
  135. el.removeChild(el.firstChild);
  136. }
  137. }
  138. KTUtil.onDOMContentLoaded(function () {
  139. var dismissErrorBtn = $('#id_dismiss_error_msg');
  140. if (dismissErrorBtn){
  141. dismissErrorBtn.on("click", function(){
  142. $('#errorMsg').addClass("d-none");
  143. });
  144. }
  145. var logoutBtn = $('#id_logout_link');
  146. if (logoutBtn){
  147. logoutBtn.on("click", function(){
  148. doLogout();
  149. });
  150. }
  151. });
  152. </script>
  153. {{- end}}
  154. {{- define "globalstyle"}}
  155. <style {{- if .}} nonce="{{.}}"{{- end}}>
  156. .text-sidebar {
  157. color: var(--bs-white);
  158. }
  159. [data-bs-theme="dark"] .text-sidebar {
  160. color: var(--bs-white);
  161. }
  162. .wrap-word {
  163. overflow-wrap: break-word;
  164. }
  165. .line-through {
  166. text-decoration: line-through;
  167. }
  168. </style>
  169. {{- end}}
  170. {{- define "fonts"}}
  171. <style {{- if .}} nonce="{{.CSPNonce}}"{{- end}}>
  172. /* cyrillic-ext */
  173. @font-face {
  174. font-family: 'Inter';
  175. font-style: normal;
  176. font-weight: 300;
  177. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2JL7SUc.woff2) format('woff2');
  178. unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
  179. }
  180. /* cyrillic */
  181. @font-face {
  182. font-family: 'Inter';
  183. font-style: normal;
  184. font-weight: 300;
  185. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa0ZL7SUc.woff2) format('woff2');
  186. unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
  187. }
  188. /* greek-ext */
  189. @font-face {
  190. font-family: 'Inter';
  191. font-style: normal;
  192. font-weight: 300;
  193. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2ZL7SUc.woff2) format('woff2');
  194. unicode-range: U+1F00-1FFF;
  195. }
  196. /* greek */
  197. @font-face {
  198. font-family: 'Inter';
  199. font-style: normal;
  200. font-weight: 300;
  201. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1pL7SUc.woff2) format('woff2');
  202. unicode-range: U+0370-03FF;
  203. }
  204. /* vietnamese */
  205. @font-face {
  206. font-family: 'Inter';
  207. font-style: normal;
  208. font-weight: 300;
  209. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2pL7SUc.woff2) format('woff2');
  210. unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
  211. }
  212. /* latin-ext */
  213. @font-face {
  214. font-family: 'Inter';
  215. font-style: normal;
  216. font-weight: 300;
  217. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7SUc.woff2) format('woff2');
  218. unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
  219. }
  220. /* latin */
  221. @font-face {
  222. font-family: 'Inter';
  223. font-style: normal;
  224. font-weight: 300;
  225. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7.woff2) format('woff2');
  226. unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  227. }
  228. /* cyrillic-ext */
  229. @font-face {
  230. font-family: 'Inter';
  231. font-style: normal;
  232. font-weight: 400;
  233. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2JL7SUc.woff2) format('woff2');
  234. unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
  235. }
  236. /* cyrillic */
  237. @font-face {
  238. font-family: 'Inter';
  239. font-style: normal;
  240. font-weight: 400;
  241. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa0ZL7SUc.woff2) format('woff2');
  242. unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
  243. }
  244. /* greek-ext */
  245. @font-face {
  246. font-family: 'Inter';
  247. font-style: normal;
  248. font-weight: 400;
  249. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2ZL7SUc.woff2) format('woff2');
  250. unicode-range: U+1F00-1FFF;
  251. }
  252. /* greek */
  253. @font-face {
  254. font-family: 'Inter';
  255. font-style: normal;
  256. font-weight: 400;
  257. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1pL7SUc.woff2) format('woff2');
  258. unicode-range: U+0370-03FF;
  259. }
  260. /* vietnamese */
  261. @font-face {
  262. font-family: 'Inter';
  263. font-style: normal;
  264. font-weight: 400;
  265. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2pL7SUc.woff2) format('woff2');
  266. unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
  267. }
  268. /* latin-ext */
  269. @font-face {
  270. font-family: 'Inter';
  271. font-style: normal;
  272. font-weight: 400;
  273. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7SUc.woff2) format('woff2');
  274. unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
  275. }
  276. /* latin */
  277. @font-face {
  278. font-family: 'Inter';
  279. font-style: normal;
  280. font-weight: 400;
  281. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7.woff2) format('woff2');
  282. unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  283. }
  284. /* cyrillic-ext */
  285. @font-face {
  286. font-family: 'Inter';
  287. font-style: normal;
  288. font-weight: 500;
  289. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2JL7SUc.woff2) format('woff2');
  290. unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
  291. }
  292. /* cyrillic */
  293. @font-face {
  294. font-family: 'Inter';
  295. font-style: normal;
  296. font-weight: 500;
  297. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa0ZL7SUc.woff2) format('woff2');
  298. unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
  299. }
  300. /* greek-ext */
  301. @font-face {
  302. font-family: 'Inter';
  303. font-style: normal;
  304. font-weight: 500;
  305. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2ZL7SUc.woff2) format('woff2');
  306. unicode-range: U+1F00-1FFF;
  307. }
  308. /* greek */
  309. @font-face {
  310. font-family: 'Inter';
  311. font-style: normal;
  312. font-weight: 500;
  313. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1pL7SUc.woff2) format('woff2');
  314. unicode-range: U+0370-03FF;
  315. }
  316. /* vietnamese */
  317. @font-face {
  318. font-family: 'Inter';
  319. font-style: normal;
  320. font-weight: 500;
  321. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2pL7SUc.woff2) format('woff2');
  322. unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
  323. }
  324. /* latin-ext */
  325. @font-face {
  326. font-family: 'Inter';
  327. font-style: normal;
  328. font-weight: 500;
  329. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7SUc.woff2) format('woff2');
  330. unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
  331. }
  332. /* latin */
  333. @font-face {
  334. font-family: 'Inter';
  335. font-style: normal;
  336. font-weight: 500;
  337. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7.woff2) format('woff2');
  338. unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  339. }
  340. /* cyrillic-ext */
  341. @font-face {
  342. font-family: 'Inter';
  343. font-style: normal;
  344. font-weight: 600;
  345. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2JL7SUc.woff2) format('woff2');
  346. unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
  347. }
  348. /* cyrillic */
  349. @font-face {
  350. font-family: 'Inter';
  351. font-style: normal;
  352. font-weight: 600;
  353. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa0ZL7SUc.woff2) format('woff2');
  354. unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
  355. }
  356. /* greek-ext */
  357. @font-face {
  358. font-family: 'Inter';
  359. font-style: normal;
  360. font-weight: 600;
  361. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2ZL7SUc.woff2) format('woff2');
  362. unicode-range: U+1F00-1FFF;
  363. }
  364. /* greek */
  365. @font-face {
  366. font-family: 'Inter';
  367. font-style: normal;
  368. font-weight: 600;
  369. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1pL7SUc.woff2) format('woff2');
  370. unicode-range: U+0370-03FF;
  371. }
  372. /* vietnamese */
  373. @font-face {
  374. font-family: 'Inter';
  375. font-style: normal;
  376. font-weight: 600;
  377. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2pL7SUc.woff2) format('woff2');
  378. unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
  379. }
  380. /* latin-ext */
  381. @font-face {
  382. font-family: 'Inter';
  383. font-style: normal;
  384. font-weight: 600;
  385. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7SUc.woff2) format('woff2');
  386. unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
  387. }
  388. /* latin */
  389. @font-face {
  390. font-family: 'Inter';
  391. font-style: normal;
  392. font-weight: 600;
  393. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7.woff2) format('woff2');
  394. unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  395. }
  396. /* cyrillic-ext */
  397. @font-face {
  398. font-family: 'Inter';
  399. font-style: normal;
  400. font-weight: 700;
  401. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2JL7SUc.woff2) format('woff2');
  402. unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
  403. }
  404. /* cyrillic */
  405. @font-face {
  406. font-family: 'Inter';
  407. font-style: normal;
  408. font-weight: 700;
  409. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa0ZL7SUc.woff2) format('woff2');
  410. unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
  411. }
  412. /* greek-ext */
  413. @font-face {
  414. font-family: 'Inter';
  415. font-style: normal;
  416. font-weight: 700;
  417. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2ZL7SUc.woff2) format('woff2');
  418. unicode-range: U+1F00-1FFF;
  419. }
  420. /* greek */
  421. @font-face {
  422. font-family: 'Inter';
  423. font-style: normal;
  424. font-weight: 700;
  425. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1pL7SUc.woff2) format('woff2');
  426. unicode-range: U+0370-03FF;
  427. }
  428. /* vietnamese */
  429. @font-face {
  430. font-family: 'Inter';
  431. font-style: normal;
  432. font-weight: 700;
  433. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2pL7SUc.woff2) format('woff2');
  434. unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
  435. }
  436. /* latin-ext */
  437. @font-face {
  438. font-family: 'Inter';
  439. font-style: normal;
  440. font-weight: 700;
  441. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7SUc.woff2) format('woff2');
  442. unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
  443. }
  444. /* latin */
  445. @font-face {
  446. font-family: 'Inter';
  447. font-style: normal;
  448. font-weight: 700;
  449. src: url({{.StaticURL}}/vendor/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7.woff2) format('woff2');
  450. unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  451. }
  452. </style>
  453. {{- end}}