From f2f69a83b87cda20efbaec023f65fc087e6c41ad Mon Sep 17 00:00:00 2001 From: sairaj mote Date: Thu, 29 Dec 2022 02:38:57 +0530 Subject: [PATCH] Code refactoring and UI changes --- components.min.js | 7 + css/main.css | 1473 +++++++++--------- css/main.min.css | 2 +- css/main.scss | 1265 +++++++++------- index.html | 3687 +++++++++++++++------------------------------ 5 files changed, 2602 insertions(+), 3832 deletions(-) create mode 100644 components.min.js diff --git a/components.min.js b/components.min.js new file mode 100644 index 0000000..a75fd42 --- /dev/null +++ b/components.min.js @@ -0,0 +1,7 @@ +// Components downloaded: chips,copy,input,notifications,spinner,theme-toggle +const smChips = document.createElement("template"); smChips.innerHTML = '
', customElements.define("sm-chips", class extends HTMLElement { constructor() { super(), this.attachShadow({ mode: "open" }).append(smChips.content.cloneNode(!0)), this.chipsWrapper = this.shadowRoot.querySelector(".sm-chips"), this.coverLeft = this.shadowRoot.querySelector(".cover--left"), this.coverRight = this.shadowRoot.querySelector(".cover--right"), this.navButtonLeft = this.shadowRoot.querySelector(".nav-button--left"), this.navButtonRight = this.shadowRoot.querySelector(".nav-button--right"), this.slottedOptions = void 0, this._value = void 0, this.scrollDistance = 0, this.assignedElements = [], this.scrollLeft = this.scrollLeft.bind(this), this.scrollRight = this.scrollRight.bind(this), this.fireEvent = this.fireEvent.bind(this), this.setSelectedOption = this.setSelectedOption.bind(this) } get value() { return this._value } set value(t) { this.setSelectedOption(t) } scrollLeft() { this.chipsWrapper.scrollBy({ left: -this.scrollDistance, behavior: "smooth" }) } scrollRight() { this.chipsWrapper.scrollBy({ left: this.scrollDistance, behavior: "smooth" }) } setSelectedOption(t) { this._value !== t && (this._value = t, this.assignedElements.forEach(e => { e.value == t ? (e.setAttribute("selected", ""), e.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "center" })) : e.removeAttribute("selected") })) } fireEvent() { this.dispatchEvent(new CustomEvent("change", { bubbles: !0, composed: !0, detail: { value: this._value } })) } connectedCallback() { this.setAttribute("role", "listbox"); const t = this.shadowRoot.querySelector("slot"); t.addEventListener("slotchange", e => { clearTimeout(this.slotChangeTimeout), this.slotChangeTimeout = setTimeout(() => { n.disconnect(), i.disconnect(), this.assignedElements = t.assignedElements(), this.assignedElements.forEach(t => { t.hasAttribute("selected") && (this._value = t.value) }), this.hasAttribute("multiline") || (this.assignedElements.length > 0 ? (n.observe(this.assignedElements[0]), i.observe(this.assignedElements[this.assignedElements.length - 1])) : (this.navButtonLeft.classList.add("hide"), this.navButtonRight.classList.add("hide"), this.coverLeft.classList.add("hide"), this.coverRight.classList.add("hide"), n.disconnect(), i.disconnect())) }, 100) }); const e = new ResizeObserver(t => { t.forEach(t => { if (t.contentBoxSize) { const e = Array.isArray(t.contentBoxSize) ? t.contentBoxSize[0] : t.contentBoxSize; this.scrollDistance = .6 * e.inlineSize } else this.scrollDistance = .6 * t.contentRect.width }) }); e.observe(this), this.chipsWrapper.addEventListener("option-clicked", t => { this._value !== t.target.value && (this.setSelectedOption(t.target.value), this.fireEvent()) }); const n = new IntersectionObserver(t => { t.forEach(t => { t.isIntersecting ? (this.navButtonLeft.classList.add("hide"), this.coverLeft.classList.add("hide")) : (this.navButtonLeft.classList.remove("hide"), this.coverLeft.classList.remove("hide")) }) }, { threshold: .9, root: this }), i = new IntersectionObserver(t => { t.forEach(t => { t.isIntersecting ? (this.navButtonRight.classList.add("hide"), this.coverRight.classList.add("hide")) : (this.navButtonRight.classList.remove("hide"), this.coverRight.classList.remove("hide")) }) }, { threshold: .9, root: this }); this.navButtonLeft.addEventListener("click", this.scrollLeft), this.navButtonRight.addEventListener("click", this.scrollRight) } disconnectedCallback() { this.navButtonLeft.removeEventListener("click", this.scrollLeft), this.navButtonRight.removeEventListener("click", this.scrollRight) } }); const smChip = document.createElement("template"); smChip.innerHTML = ' ', customElements.define("sm-chip", class extends HTMLElement { constructor() { super(), this.attachShadow({ mode: "open" }).append(smChip.content.cloneNode(!0)), this._value = void 0, this.radioButton = this.shadowRoot.querySelector("input"), this.fireEvent = this.fireEvent.bind(this), this.handleKeyDown = this.handleKeyDown.bind(this) } get value() { return this._value } fireEvent() { this.dispatchEvent(new CustomEvent("option-clicked", { bubbles: !0, composed: !0, detail: { value: this._value } })) } handleKeyDown(t) { "Enter" !== t.key && "Space" !== t.key || this.fireEvent() } connectedCallback() { this.setAttribute("role", "option"), this.setAttribute("tabindex", "0"), this._value = this.getAttribute("value"), this.addEventListener("click", this.fireEvent), this.addEventListener("keydown", this.handleKeyDown) } disconnectedCallback() { this.removeEventListener("click", this.fireEvent), this.removeEventListener("keydown", this.handleKeyDown) } }); +const smCopy = document.createElement("template"); smCopy.innerHTML = '

', customElements.define("sm-copy", class extends HTMLElement { constructor() { super(), this.attachShadow({ mode: "open" }).append(smCopy.content.cloneNode(!0)), this.copyContent = this.shadowRoot.querySelector(".copy-content"), this.copyButton = this.shadowRoot.querySelector(".copy-button"), this.copy = this.copy.bind(this) } static get observedAttributes() { return ["value"] } set value(t) { this.setAttribute("value", t) } get value() { return this.getAttribute("value") } fireEvent() { this.dispatchEvent(new CustomEvent("copy", { composed: !0, bubbles: !0, cancelable: !0 })) } copy() { navigator.clipboard.writeText(this.copyContent.textContent).then(t => this.fireEvent()).catch(t => console.error(t)) } connectedCallback() { this.copyButton.addEventListener("click", this.copy) } attributeChangedCallback(t, n, o) { "value" === t && (this.copyContent.textContent = o) } disconnectedCallback() { this.copyButton.removeEventListener("click", this.copy) } }); +const smInput = document.createElement("template"); smInput.innerHTML = '
', customElements.define("sm-input", class extends HTMLElement { constructor() { super(), this.attachShadow({ mode: "open" }).append(smInput.content.cloneNode(!0)), this.inputParent = this.shadowRoot.querySelector(".input"), this.input = this.shadowRoot.querySelector("input"), this.clearBtn = this.shadowRoot.querySelector(".clear"), this.label = this.shadowRoot.querySelector(".label"), this.feedbackText = this.shadowRoot.querySelector(".feedback-text"), this.outerContainer = this.shadowRoot.querySelector(".outer-container"), this.optionList = this.shadowRoot.querySelector(".datalist"), this._helperText = "", this._errorText = "", this.isRequired = !1, this.datalist = [], this.validationFunction = void 0, this.reflectedAttributes = ["value", "required", "disabled", "type", "inputmode", "readonly", "min", "max", "pattern", "minlength", "maxlength", "step", "list", "autocomplete"], this.reset = this.reset.bind(this), this.clear = this.clear.bind(this), this.focusIn = this.focusIn.bind(this), this.focusOut = this.focusOut.bind(this), this.fireEvent = this.fireEvent.bind(this), this.checkInput = this.checkInput.bind(this), this.allowOnlyNum = this.allowOnlyNum.bind(this), this.handleOptionClick = this.handleOptionClick.bind(this), this.handleInputNavigation = this.handleInputNavigation.bind(this), this.handleDatalistNavigation = this.handleDatalistNavigation.bind(this), this.handleFocus = this.handleFocus.bind(this), this.handleBlur = this.handleBlur.bind(this) } static get observedAttributes() { return ["value", "placeholder", "required", "disabled", "type", "inputmode", "readonly", "min", "max", "pattern", "minlength", "maxlength", "step", "helper-text", "error-text", "list"] } get value() { return this.input.value } set value(t) { t !== this.input.value && (this.input.value = t, this.checkInput()) } get placeholder() { return this.getAttribute("placeholder") } set placeholder(t) { this.setAttribute("placeholder", t) } get type() { return this.getAttribute("type") } set type(t) { this.setAttribute("type", t) } get validity() { return this.input.validity } get disabled() { return this.hasAttribute("disabled") } set disabled(t) { t ? this.inputParent.classList.add("disabled") : this.inputParent.classList.remove("disabled") } get readOnly() { return this.hasAttribute("readonly") } set readOnly(t) { t ? this.setAttribute("readonly", "") : this.removeAttribute("readonly") } set customValidation(t) { this.validationFunction = t } set errorText(t) { this._errorText = t } set helperText(t) { this._helperText = t } get isValid() { if ("" !== this.input.value) { const t = this.input.checkValidity(); let e = !0; return this.validationFunction && (e = Boolean(this.validationFunction(this.input.value))), t && e ? (this.feedbackText.classList.remove("error"), this.feedbackText.classList.add("success"), this.feedbackText.textContent = "") : this._errorText && (this.feedbackText.classList.add("error"), this.feedbackText.classList.remove("success"), this.feedbackText.innerHTML = ` ${this._errorText}`), t && e } } reset() { this.value = "" } clear() { this.value = "", this.input.focus(), this.fireEvent() } focusIn() { this.input.focus() } focusOut() { this.input.blur() } fireEvent() { let t = new Event("input", { bubbles: !0, cancelable: !0, composed: !0 }); this.dispatchEvent(t) } searchDatalist(t) { const e = this.datalist.filter(e => e.toLowerCase().includes(t.toLowerCase())); if (e.sort((e, n) => { const i = e.toLowerCase().indexOf(t.toLowerCase()), s = n.toLowerCase().indexOf(t.toLowerCase()); return i - s }), e.length) { if (this.optionList.children.length > e.length) { const t = this.optionList.children.length - e.length; for (let e = 0; e < t; e++)this.optionList.removeChild(this.optionList.lastChild) } e.forEach((t, e) => { if (this.optionList.children[e]) this.optionList.children[e].textContent = t; else { const e = document.createElement("li"); e.textContent = t, e.classList.add("datalist-item"), e.setAttribute("tabindex", "0"), this.optionList.appendChild(e) } }), this.optionList.classList.remove("hidden") } else this.optionList.classList.add("hidden") } checkInput(t) { this.hasAttribute("readonly") || ("" !== this.input.value ? this.clearBtn.classList.remove("hidden") : this.clearBtn.classList.add("hidden")), this.hasAttribute("placeholder") && "" !== this.getAttribute("placeholder").trim() && ("" !== this.input.value ? (this.animate ? this.inputParent.classList.add("animate-placeholder") : this.label.classList.add("hidden"), this.datalist.length && (this.searchTimeout && clearTimeout(this.searchTimeout), this.searchTimeout = setTimeout(() => { this.searchDatalist(this.input.value.trim()) }, 100))) : (this.animate ? this.inputParent.classList.remove("animate-placeholder") : this.label.classList.remove("hidden"), this.feedbackText.textContent = "", this.datalist.length && (this.optionList.innerHTML = "", this.optionList.classList.add("hidden")))) } allowOnlyNum(t) { 1 === t.key.length && (("." !== t.key || !t.target.value.includes(".") && 0 !== t.target.value.length) && ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "."].includes(t.key) || t.preventDefault()) } handleOptionClick(t) { this.input.value = t.target.textContent, this.optionList.classList.add("hidden"), this.input.focus() } handleInputNavigation(t) { "ArrowDown" === t.key ? (t.preventDefault(), this.optionList.children.length && this.optionList.children[0].focus()) : "ArrowUp" === t.key && (t.preventDefault(), this.optionList.children.length && this.optionList.children[this.optionList.children.length - 1].focus()) } handleDatalistNavigation(t) { "ArrowUp" === t.key ? (t.preventDefault(), this.shadowRoot.activeElement.previousElementSibling ? this.shadowRoot.activeElement.previousElementSibling.focus() : this.input.focus()) : "ArrowDown" === t.key ? (t.preventDefault(), this.shadowRoot.activeElement.nextElementSibling ? this.shadowRoot.activeElement.nextElementSibling.focus() : this.input.focus()) : "Enter" !== t.key && " " !== t.key || (t.preventDefault(), this.input.value = t.target.textContent, this.optionList.classList.add("hidden"), this.input.focus()) } handleFocus(t) { this.datalist.length && this.searchDatalist(this.input.value.trim()) } handleBlur(t) { this.datalist.length && this.optionList.classList.add("hidden") } connectedCallback() { this.animate = this.hasAttribute("animate"), this.setAttribute("role", "textbox"), this.input.addEventListener("input", this.checkInput), this.clearBtn.addEventListener("click", this.clear), this.datalist.length && (this.optionList.addEventListener("click", this.handleOptionClick), this.input.addEventListener("keydown", this.handleInputNavigation), this.optionList.addEventListener("keydown", this.handleDatalistNavigation)), this.input.addEventListener("focusin", this.handleFocus), this.addEventListener("focusout", this.handleBlur) } attributeChangedCallback(t, e, n) { e !== n && (this.reflectedAttributes.includes(t) && (this.hasAttribute(t) ? this.input.setAttribute(t, this.getAttribute(t) ? this.getAttribute(t) : "") : this.input.removeAttribute(t)), "placeholder" === t ? (this.label.textContent = n, this.setAttribute("aria-label", n)) : this.hasAttribute("value") ? this.checkInput() : "type" === t ? this.hasAttribute("type") && "number" === this.getAttribute("type") ? (this.input.setAttribute("inputmode", "decimal"), this.input.addEventListener("keydown", this.allowOnlyNum)) : this.input.removeEventListener("keydown", this.allowOnlyNum) : "helper-text" === t ? this._helperText = this.getAttribute("helper-text") : "error-text" === t ? this._errorText = this.getAttribute("error-text") : "required" === t ? (this.isRequired = this.hasAttribute("required"), this.isRequired ? this.setAttribute("aria-required", "true") : this.setAttribute("aria-required", "false")) : "readonly" === t ? this.hasAttribute("readonly") ? this.inputParent.classList.add("readonly") : this.inputParent.classList.remove("readonly") : "disabled" === t ? this.hasAttribute("disabled") ? this.inputParent.classList.add("disabled") : this.inputParent.classList.remove("disabled") : "list" === t && this.hasAttribute("list") && "" !== this.getAttribute("list").trim() && (this.datalist = this.getAttribute("list").split(","))) } disconnectedCallback() { this.input.removeEventListener("input", this.checkInput), this.clearBtn.removeEventListener("click", this.clear), this.input.removeEventListener("keydown", this.allowOnlyNum), this.optionList.removeEventListener("click", this.handleOptionClick), this.input.removeEventListener("keydown", this.handleInputNavigation), this.optionList.removeEventListener("keydown", this.handleDatalistNavigation), this.input.removeEventListener("focusin", this.handleFocus), this.removeEventListener("focusout", this.handleBlur) } }); +const smNotifications = document.createElement("template"); smNotifications.innerHTML = '
', customElements.define("sm-notifications", class extends HTMLElement { constructor() { super(), this.shadow = this.attachShadow({ mode: "open" }).append(smNotifications.content.cloneNode(!0)), this.notificationPanel = this.shadowRoot.querySelector(".notification-panel"), this.animationOptions = { duration: 300, fill: "forwards", easing: "cubic-bezier(0.175, 0.885, 0.32, 1.275)" }, this.push = this.push.bind(this), this.createNotification = this.createNotification.bind(this), this.removeNotification = this.removeNotification.bind(this), this.clearAll = this.clearAll.bind(this), this.remove = this.remove.bind(this), this.handlePointerMove = this.handlePointerMove.bind(this), this.startX = 0, this.currentX = 0, this.endX = 0, this.swipeDistance = 0, this.swipeDirection = "", this.swipeThreshold = 0, this.startTime = 0, this.swipeTime = 0, this.swipeTimeThreshold = 200, this.currentTarget = null, this.mediaQuery = window.matchMedia("(min-width: 640px)"), this.handleOrientationChange = this.handleOrientationChange.bind(this), this.isLandscape = !1 } randString(n) { let t = ""; const i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; for (let e = 0; e < n; e++)t += i.charAt(Math.floor(Math.random() * i.length)); return t } createNotification(n, t = {}) { const { pinned: i = !1, icon: e = "", action: o } = t, r = document.createElement("div"); r.id = this.randString(8), r.classList.add("notification"); let a = ""; return a += `
${e}
${n} `, o && (a += ` `), i && (r.classList.add("pinned"), a += ' '), r.innerHTML = a, r } push(n, t = {}) { const i = this.createNotification(n, t); return this.isLandscape ? this.notificationPanel.append(i) : this.notificationPanel.prepend(i), this.notificationPanel.animate([{ transform: `translateY(${this.isLandscape ? "" : "-"}${i.clientHeight}px)` }, { transform: "none" }], this.animationOptions), i.animate([{ transform: "translateY(-1rem)", opacity: "0" }, { transform: "none", opacity: "1" }], this.animationOptions).onfinish = (n => { n.target.commitStyles(), n.target.cancel() }), i.querySelector(".action") && i.querySelector(".action").addEventListener("click", t.action.callback), i.id } removeNotification(n, t = "left") { if (!n) return; const i = "left" === t ? "-" : "+"; n.animate([{ transform: this.currentX ? `translateX(${this.currentX}px)` : "none", opacity: "1" }, { transform: `translateX(calc(${i}${Math.abs(this.currentX)}px ${i} 1rem))`, opacity: "0" }], this.animationOptions).onfinish = (() => { n.remove() }) } remove(n) { const t = this.notificationPanel.querySelector(`#${n}`); t && this.removeNotification(t) } clearAll() { Array.from(this.notificationPanel.children).forEach(n => { this.removeNotification(n) }) } handlePointerMove(n) { this.currentX = n.clientX - this.startX, this.currentTarget.style.transform = `translateX(${this.currentX}px)` } handleOrientationChange(n) { this.isLandscape = n.matches, n.matches } connectedCallback() { this.handleOrientationChange(this.mediaQuery), this.mediaQuery.addEventListener("change", this.handleOrientationChange), this.notificationPanel.addEventListener("pointerdown", n => { n.target.closest(".close") ? this.removeNotification(n.target.closest(".notification")) : n.target.closest(".notification") && (this.swipeThreshold = n.target.closest(".notification").getBoundingClientRect().width / 2, this.currentTarget = n.target.closest(".notification"), this.currentTarget.setPointerCapture(n.pointerId), this.startTime = Date.now(), this.startX = n.clientX, this.startY = n.clientY, this.notificationPanel.addEventListener("pointermove", this.handlePointerMove)) }), this.notificationPanel.addEventListener("pointerup", n => { this.endX = n.clientX, this.endY = n.clientY, this.swipeDistance = Math.abs(this.endX - this.startX), this.swipeTime = Date.now() - this.startTime, this.endX > this.startX ? this.swipeDirection = "right" : this.swipeDirection = "left", this.swipeTime < this.swipeTimeThreshold ? this.swipeDistance > 50 && this.removeNotification(this.currentTarget, this.swipeDirection) : this.swipeDistance > this.swipeThreshold ? this.removeNotification(this.currentTarget, this.swipeDirection) : this.currentTarget.animate([{ transform: `translateX(${this.currentX}px)` }, { transform: "none" }], this.animationOptions).onfinish = (n => { n.target.commitStyles(), n.target.cancel() }), this.notificationPanel.removeEventListener("pointermove", this.handlePointerMove), this.notificationPanel.releasePointerCapture(n.pointerId), this.currentX = 0 }); const n = new MutationObserver(n => { n.forEach(n => { "childList" === n.type && n.addedNodes.length && !n.addedNodes[0].classList.contains("pinned") && setTimeout(() => { this.removeNotification(n.addedNodes[0]) }, 5e3) }) }); n.observe(this.notificationPanel, { childList: !0 }) } disconnectedCallback() { mediaQueryList.removeEventListener("change", handleOrientationChange) } }); +const spinner = document.createElement("template"); spinner.innerHTML = ''; class SpinnerLoader extends HTMLElement { constructor() { super(), this.attachShadow({ mode: "open" }).append(spinner.content.cloneNode(!0)) } } window.customElements.define("sm-spinner", SpinnerLoader); +const themeToggle = document.createElement("template"); themeToggle.innerHTML = ' '; class ThemeToggle extends HTMLElement { constructor() { super(), this.attachShadow({ mode: "open" }).append(themeToggle.content.cloneNode(!0)), this.isChecked = !1, this.hasTheme = "light", this.toggleState = this.toggleState.bind(this), this.fireEvent = this.fireEvent.bind(this), this.handleThemeChange = this.handleThemeChange.bind(this) } static get observedAttributes() { return ["checked"] } daylight() { this.hasTheme = "light", document.body.dataset.theme = "light", this.setAttribute("aria-checked", "false") } nightlight() { this.hasTheme = "dark", document.body.dataset.theme = "dark", this.setAttribute("aria-checked", "true") } toggleState() { this.toggleAttribute("checked"), this.fireEvent() } handleKeyDown(e) { " " === e.key && this.toggleState() } handleThemeChange(e) { e.detail.theme !== this.hasTheme && ("dark" === e.detail.theme ? this.setAttribute("checked", "") : this.removeAttribute("checked")) } fireEvent() { this.dispatchEvent(new CustomEvent("themechange", { bubbles: !0, composed: !0, detail: { theme: this.hasTheme } })) } connectedCallback() { this.setAttribute("role", "switch"), this.setAttribute("aria-label", "theme toggle"), "dark" === localStorage.getItem(`${window.location.hostname}-theme`) ? (this.nightlight(), this.setAttribute("checked", "")) : "light" === localStorage.getItem(`${window.location.hostname}-theme`) ? (this.daylight(), this.removeAttribute("checked")) : window.matchMedia("(prefers-color-scheme: dark)").matches ? (this.nightlight(), this.setAttribute("checked", "")) : (this.daylight(), this.removeAttribute("checked")), this.addEventListener("click", this.toggleState), this.addEventListener("keydown", this.handleKeyDown), document.addEventListener("themechange", this.handleThemeChange) } disconnectedCallback() { this.removeEventListener("click", this.toggleState), this.removeEventListener("keydown", this.handleKeyDown), document.removeEventListener("themechange", this.handleThemeChange) } attributeChangedCallback(e, t, n) { "checked" === e && (this.hasAttribute("checked") ? (this.nightlight(), localStorage.setItem(`${window.location.hostname}-theme`, "dark")) : (this.daylight(), localStorage.setItem(`${window.location.hostname}-theme`, "light"))) } } window.customElements.define("theme-toggle", ThemeToggle); \ No newline at end of file diff --git a/css/main.css b/css/main.css index 09c06a3..8aac9a0 100644 --- a/css/main.css +++ b/css/main.css @@ -1,185 +1,617 @@ -@import url("https://fonts.googleapis.com/css2?family=Barlow:wght@500;600;700&family=Roboto:wght@400;500;700&display=swap"); -*, -::before, -::after { +* { padding: 0; margin: 0; - -webkit-box-sizing: border-box; - box-sizing: border-box; - font-family: "Roboto", sans-serif; + box-sizing: border-box; + font-family: "Inter", sans-serif; +} + +:root { + font-size: clamp(1rem, 1.2vmax, 1.2rem); +} + +html, +body { + height: 100%; } body { - --primary-color: #1565c0; - --text: 17, 17, 17; - --text-light: 100, 100, 100; - --foreground: 255, 255, 255; - --background: #e8e8e8; - --dark-shade: #dadada; - font-size: 16px; - color: rgba(var(--text), 1); - background: rgba(var(--foreground), 1); - background-size: cover; + --accent-color: #3d5afe; + --secondary-color: #ffac2e; + --text-color: 34, 34, 34; + --foreground-color: 252, 253, 255; + --background-color: 241, 243, 248; + --danger-color: rgb(255, 75, 75); + --green: #1cad59; + --yellow: rgb(220, 165, 0); + color: rgba(var(--text-color), 1); + background-color: rgba(var(--background-color), 1); } body[data-theme=dark] { - --primary-color: #2196f3; - --text: 218, 218, 218; - --text-light: 170, 170, 170; - --foreground: 20, 20, 20; - --background: #0a0a0a; - --dark-shade: #1a1a1a; + --accent-color: #92a2ff; + --secondary-color: #d60739; + --text-color: 200, 200, 200; + --foreground-color: 27, 28, 29; + --background-color: 21, 22, 22; + --danger-color: rgb(255, 106, 106); + --green: #00e676; + --yellow: rgb(255, 213, 5); +} +body[data-theme=dark] ::-webkit-calendar-picker-indicator { + filter: invert(1); } -input[type=text]::-ms-clear { - display: none; - width: 0; - height: 0; +h1, +h2, +h3, +h4, +h5, +h6 { + letter-spacing: -0.01em; + font-weight: 700; } -input[type=text]::-ms-reveal { - display: none; - width: 0; - height: 0; +p, +strong { + line-height: 1.7; + color: rgba(var(--text-color), 0.9); + max-width: 70ch; } -input[type=search]::-webkit-search-decoration, -input[type=search]::-webkit-search-cancel-button, -input[type=search]::-webkit-search-results-button, -input[type=search]::-webkit-search-results-decoration { - display: none; +img { + -o-object-fit: cover; + object-fit: cover; } -input[type=number] { - -moz-appearance: textfield; +a:where([class]) { + color: inherit; + text-decoration: none; +} +a:where([class]):focus-visible { + box-shadow: 0 0 0 0.1rem rgba(var(--text-color), 1) inset; } -input:invalid { - outline: none; - -webkit-box-shadow: none; - box-shadow: none; +a { + color: var(--accent-color); } -::-moz-focus-inner { +a:-webkit-any-link:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; +} + +a:-moz-any-link:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; +} + +a:any-link:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; +} + +button, +.button { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + position: relative; + display: inline-flex; border: none; -} - -button { - border: none; - border-radius: 0.2em; - text-transform: uppercase; + background-color: transparent; + overflow: hidden; + color: inherit; + -webkit-tap-highlight-color: transparent; + align-items: center; + font-size: inherit; font-weight: 500; - letter-spacing: 0.06em; - background: none; + white-space: nowrap; + padding: 0.8rem; + border-radius: 0.3rem; + justify-content: center; + flex-shrink: 0; +} +button:focus-visible, +.button:focus-visible { + outline: var(--accent-color) solid medium; +} +button:not(:disabled), +.button:not(:disabled) { cursor: pointer; - padding: 0.6rem 1rem; - color: var(--primary-color); - -ms-flex-item-align: center; - align-self: center; } -h1 { - font-size: 4rem; +.button { + background-color: rgba(var(--text-color), 0.02); + border: solid thin rgba(var(--text-color), 0.06); +} +.button--primary { + color: rgba(var(--background-color), 1); + background-color: var(--accent-color); +} +.button--primary .icon { + fill: rgba(var(--background-color), 1); +} +.button--colored { + color: var(--accent-color); +} +.button--colored .icon { + fill: var(--accent-color); +} +.button--danger { + background-color: rgba(255, 115, 115, 0.062745098); + color: var(--danger-color); +} +.button--danger .icon { + fill: var(--danger-color); +} +.button--small { + padding: 0.4rem 0.6rem; +} +.button--outlined { + border: solid rgba(var(--text-color), 0.3) 0.1rem; + background-color: rgba(var(--foreground-color), 1); +} +.button--transparent { + background-color: transparent; } -h2 { - font-size: 2rem; +button:disabled { + opacity: 0.4; + cursor: not-allowed; + filter: saturate(0); +} + +.cta { + text-transform: uppercase; + font-size: 0.8rem; + font-weight: 700; + letter-spacing: 0.05em; + padding: 0.8rem 1rem; +} + +.icon { + width: 1.2rem; + height: 1.2rem; + fill: rgba(var(--text-color), 0.8); + flex-shrink: 0; +} + +.icon-only { + padding: 0.5rem; + border-radius: 0.3rem; + aspect-ratio: 1/1; +} + +a:-webkit-any-link:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; +} + +a:-moz-any-link:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; +} + +a:any-link:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; +} + +details summary { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + cursor: pointer; + align-items: center; + justify-content: space-between; + color: var(--accent-color); +} + +details[open] summary { + margin-bottom: 1rem; +} +details[open] > summary .down-arrow { + transform: rotate(180deg); +} + +sm-input { + --border-radius: 0.5rem; + --background-color: rgba(var(--foreground-color), 1); +} + +sm-spinner { + --size: 1.5rem; + --stroke-width: 0.1rem; +} + +sm-chips { + --gap: 0.3rem; +} + +sm-chip { + position: relative; + font-size: 0.9rem; + --border-radius: 0.5rem; + --padding: 0.5rem 0.8rem; + --background: rgba(var(--text-color), 0.06); + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; font-weight: 500; } +sm-chip[selected] { + --background: var(--accent-color); + color: rgba(var(--background-color), 1); +} -h3 { - font-size: 1.5rem; +ul { + list-style: none; +} + +.overflow-ellipsis { + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.wrap-around { + overflow-wrap: break-word; + word-wrap: break-word; + word-break: break-word; +} + +.full-bleed { + grid-column: 1/-1; +} + +.uppercase { + text-transform: uppercase; +} + +.capitalize { + text-transform: capitalize; +} + +.sticky { + position: -webkit-sticky; + position: sticky; +} + +.top-0 { + top: 0; } .flex { - display: -webkit-box; - display: -ms-flexbox; display: flex; } +.flex-wrap { + flex-wrap: wrap; +} + +.flex-1 { + flex: 1; +} + +.flex-shrink-0 { + flex-shrink: 0; +} + .grid { display: grid; } -.grid-2 { - grid-template-columns: auto auto; - gap: 1em; +.flow-column { + grid-auto-flow: column; } -.hide { - opacity: 0; - pointer-events: none; +.gap-0-3 { + gap: 0.3rem; } -.hide-completely { +.gap-0-5 { + gap: 0.5rem; +} + +.gap-1 { + gap: 1rem; +} + +.gap-1-5 { + gap: 1.5rem; +} + +.gap-2 { + gap: 2rem; +} + +.gap-3 { + gap: 3rem; +} + +.text-align-right { + text-align: right; +} + +.text-align-left { + text-align: left; +} + +.align-items-start { + align-items: flex-start; +} + +.align-items-center { + align-items: center; +} + +.align-content-start { + align-content: flex-start; +} + +.align-start { + align-content: flex-start; +} + +.align-center { + align-items: center; +} + +.align-end { + align-items: flex-end; +} + +.text-center { + text-align: center; +} + +.justify-start { + justify-items: start; +} + +.justify-content-start { + justify-content: start; +} + +.justify-content-center { + justify-content: center; +} + +.justify-right { + margin-left: auto; +} + +.align-self-center { + align-self: center; +} + +.align-self-end { + align-self: end; +} + +.justify-self-center { + justify-self: center; +} + +.justify-self-start { + justify-self: start; +} + +.justify-self-end { + justify-self: end; +} + +.flex-direction-column { + flex-direction: column; +} + +.space-between { + justify-content: space-between; +} + +.space-evenly { + justify-content: space-evenly; +} + +.w-100 { + width: 100%; +} + +.h-100 { + height: 100%; +} + +.padding-block-1 { + padding-block: 1rem; +} + +.margin-right-0-3 { + margin-right: 0.3rem; +} + +.margin-right-0-5 { + margin-right: 0.5rem; +} + +.margin-right-1 { + margin-right: 1rem; +} + +.margin-left-0-5 { + margin-left: 0.5rem; +} + +.margin-left-auto { + margin-left: auto; +} + +.margin-right-auto { + margin-right: auto; +} + +.margin-top-1 { + margin-top: 1rem; +} + +.margin-bottom-0-5 { + margin-bottom: 0.5rem; +} + +.margin-bottom-1 { + margin-bottom: 1rem; +} + +.margin-bottom-2 { + margin-bottom: 2rem; +} + +.margin-block-0-5 { + margin-block: 0.5rem; +} + +.margin-block-1 { + margin-block: 1rem; +} + +.margin-block-1-5 { + margin-block: 1.5rem; +} + +.margin-inline-1 { + margin-inline: 1rem; +} + +.margin-inline-1-5 { + margin-inline: 1.5rem; +} + +.hidden { display: none !important; } -.breakable { - word-break: break-word; +.h1 { + font-size: 2.5rem; +} + +.h2 { + font-size: 2rem; +} + +.h3 { + font-size: 1.4rem; +} + +.h4 { + font-size: 1rem; +} + +.h5 { + font-size: 0.8rem; +} + +.grid-3 { + grid-template-columns: 1fr auto auto; +} + +.flow-column { + grid-auto-flow: column; +} + +.w-100 { + width: 100%; +} + +.color-0-8 { + color: rgba(var(--text-color), 0.8); +} + +.weight-400 { + font-weight: 400; +} + +.weight-500 { font-weight: 500; - letter-spacing: 0.06rem; } -.other-font { - font-family: "Barlow", sans-serif; +.ws-pre-line { + white-space: pre-line; } -.uppercase { - text-transform: uppercase !important; +.card { + background-color: rgba(var(--foreground-color), 1); + border-radius: 0.5rem; + padding: max(1rem, 3vw); } -.capitalise { - text-transform: capitalize !important; +.ripple { + height: 8rem; + width: 8rem; + position: absolute; + border-radius: 50%; + transform: scale(0); + background: radial-gradient(circle, rgba(var(--text-color), 0.3) 0%, rgba(0, 0, 0, 0) 50%); + pointer-events: none; } -.toggle { +.interactive { position: relative; + overflow: hidden; cursor: pointer; - z-index: 1; + -webkit-tap-highlight-color: transparent; } -.toggle input[type=checkbox] { + +.observe-empty-state:empty { display: none; } -.toggle .switch { - overflow: hidden; - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; + +.observe-empty-state:not(:empty) ~ .empty-state { + display: none; +} + +.multi-state-button { + display: grid; + text-align: center; + align-items: center; justify-items: center; - padding: 0.2rem; - min-height: 1.6rem; - max-height: 1.6rem; - border-radius: 0.5rem; +} +.multi-state-button > * { + grid-area: 1/1/2/2; +} +.multi-state-button button { + z-index: 1; +} + +#confirmation_popup, +#prompt_popup { + flex-direction: column; +} +#confirmation_popup h4, +#prompt_popup h4 { + font-size: 1.2rem; + margin-bottom: 1rem; +} +#confirmation_popup .flex, +#prompt_popup .flex { + margin-top: 1rem; +} + +.popup__header { position: relative; + display: grid; + gap: 0.5rem; + width: 100%; + padding: 0 1.5rem; + align-items: center; } -.toggle .circle { - border-radius: 0.5rem; - -webkit-transition: -webkit-transform 0.3s; - transition: -webkit-transform 0.3s; - transition: transform 0.3s; - transition: transform 0.3s, -webkit-transform 0.3s; - fill: rgba(var(--text), 0.8); - overflow: visible; - stroke-linecap: round; - stroke-linejoin: round; - height: 1.2rem; - width: 1.2rem; +.popup__header > * { + grid-row: 1; } -.toggle .circle:first-of-type { - margin-bottom: 0.4rem; +.popup__header h3, +.popup__header h4 { + grid-column: 1/-1; + justify-self: center; + align-self: center; } -.toggle .circle line { - stroke: rgba(var(--text), 0.8); - stroke-width: 6; -} -.toggle input:checked ~ .switch .circle { - -webkit-transform: translateY(-1.7rem); - transform: translateY(-1.7rem); +.popup__header__close { + grid-column: 1; + margin-left: -1rem; + justify-self: flex-start; } section { @@ -203,12 +635,6 @@ ul[type=circle] li:last-of-type { ul { list-style: none; } -ul .balance { - margin-bottom: 2rem; -} -ul .balance:last-of-type { - margin-bottom: 0; -} .top-bottom-padding { padding: 1.5rem 0; @@ -216,23 +642,22 @@ ul .balance:last-of-type { .margin, .page { - margin: 0 1.5rem; + margin: 0 1rem; } -.margin-left-auto { - margin-left: auto; +.page { + display: flex; + flex-direction: column; } .card { padding: 2rem 1.5rem; border-radius: 0.5rem; - background: rgba(var(--text), 0.06); + background: rgba(var(--text-color), 0.06); margin: 1.5rem 0; } .card h4 { margin-bottom: 0.4rem; - font-weight: 400; - text-transform: capitalize; } .card h2 { margin-bottom: 1.5rem; @@ -241,52 +666,27 @@ ul .balance:last-of-type { .transaction-container { display: grid; margin-top: 1.5rem; - gap: 1.5rem; - grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + gap: 0.5rem; } .label { text-transform: capitalize; font-size: 0.8rem; margin-bottom: 0.3rem; - line-height: 1.4em; - color: rgba(var(--text-light), 1); + color: rgba(var(--text-color), 0.8); margin-top: 1.5rem; - font-weight: 400; + font-weight: 500; } .label:first-of-type { margin-top: 0; } -.label + h4:not(.address) { - text-transform: capitalize; +.label + * { + font-weight: 700; } .header { justify-items: center; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; -} - -#logo { - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - letter-spacing: 0.1em; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - cursor: pointer; -} -#logo h4 { - font-weight: 400; -} -#logo #main_logo { - height: 1.2rem; - width: 1.2rem; - margin-right: 0.2rem; - fill: rgba(var(--text), 1); + flex-direction: column; } #homepage { @@ -295,313 +695,66 @@ ul .balance:last-of-type { #first_section { display: grid; - grid-template-rows: 1fr auto; - min-height: calc(100vh - 8rem); } header.grid-2 { margin-top: 2rem; } -#search_page { - position: fixed; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 20; - margin: 0; - background: rgba(var(--foreground), 1); - padding: 1.5rem 8vw; -} -#search_page header { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - margin-top: 2rem; -} -#search_page header .icon { - margin: 0; - cursor: pointer; - height: 2.2rem; - width: 2.2rem; - padding: 0.6rem; -} -#search_page h1 { - font-weight: 500; - font-size: 3rem; -} -#search_page .input { - -webkit-animation: fade 0.4s; - animation: fade 0.4s; -} -#search_page .input input:valid ~ #suggestions { - opacity: 1; - pointer-events: all; - -webkit-transform: none; - transform: none; -} -#search_page #suggestions { - opacity: 0; - pointer-events: none; - -webkit-transform: translateY(-0.5rem); - transform: translateY(-0.5rem); - -webkit-transition: opacity 0.3s, -webkit-transform 0.3s; - transition: opacity 0.3s, -webkit-transform 0.3s; - transition: transform 0.3s, opacity 0.3s; - transition: transform 0.3s, opacity 0.3s, -webkit-transform 0.3s; - position: absolute; - top: 100%; - width: 100%; - background: var(--background); - border-radius: 0.5rem; - padding: 0.5rem 0; - max-height: 30vh; - overflow-y: auto; - margin-top: 0.5rem; -} -#search_page #suggestions:empty { - padding: 0; -} -#search_page .suggestion { - padding: 0.6rem 1.5rem 0.6rem 3rem; - opacity: 0.8; - cursor: pointer; -} -#search_page .suggestion:hover, #search_page .suggestion:focus { - opacity: 1; -} - -#main_search { - position: relative; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; -} -#main_search h2 { - margin-top: 2rem; - -ms-flex-item-align: start; - align-self: flex-start; - font-size: 4rem; - letter-spacing: 0.1em; - font-weight: 600; -} -#main_search h4 { - line-height: 1.4em; - margin-top: 2rem; - font-weight: 400; - color: rgba(var(--text-light), 1); -} -#main_search label { - position: relative; -} - -.input { - border-radius: 0.2rem; - position: relative; - display: grid; - grid-template-columns: auto 1fr; - z-index: 1; - width: 100%; - margin: 1.5rem 0; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - padding: 0.8rem; - gap: 1em; - background: var(--background); -} -.input input { - border: none; - width: 100%; - background: transparent; - outline: none; - font-size: 1rem; - color: rgba(var(--text), 1); -} - -.icon { - height: 1rem; - overflow: visible; - width: 1rem; - fill: none; - stroke: rgba(var(--text), 1); - stroke-linecap: round; - stroke-linejoin: round; - stroke-width: 6; -} - -.copy-row { - display: grid; - grid-template-columns: 1fr auto; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - gap: 0.5rem; -} -.copy-row .icon { - cursor: pointer; -} - -#textCopied { - padding: 1rem; - border-radius: 2rem; - background: rgba(var(--text), 0.2); - color: rgba(var(--text), 1); - position: fixed; - bottom: 0; - pointer-events: none; - margin: 2rem 0; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); - -webkit-transition: 0.3s opacity ease; - transition: 0.3s opacity ease; - z-index: 20; -} - @-webkit-keyframes flyInLeft { from { opacity: 0; - -webkit-transform: translateX(-0.5rem); - transform: translateX(-0.5rem); + transform: translateX(-0.5rem); } to { opacity: 1; - -webkit-transform: none; - transform: none; + transform: none; } } @keyframes flyInLeft { from { opacity: 0; - -webkit-transform: translateX(-0.5rem); - transform: translateX(-0.5rem); + transform: translateX(-0.5rem); } to { opacity: 1; - -webkit-transform: none; - transform: none; + transform: none; } } @-webkit-keyframes flyInRight { from { opacity: 0; - -webkit-transform: translateX(0.5rem); - transform: translateX(0.5rem); + transform: translateX(0.5rem); } to { opacity: 1; - -webkit-transform: none; - transform: none; + transform: none; } } @keyframes flyInRight { from { opacity: 0; - -webkit-transform: translateX(0.5rem); - transform: translateX(0.5rem); + transform: translateX(0.5rem); } to { opacity: 1; - -webkit-transform: none; - transform: none; + transform: none; } } -@-webkit-keyframes flyOutLeft { - from { - opacity: 1; - -webkit-transform: none; - transform: none; - } - to { - opacity: 0; - -webkit-transform: translateX(-0.5rem); - transform: translateX(-0.5rem); - } -} -@keyframes flyOutLeft { - from { - opacity: 1; - -webkit-transform: none; - transform: none; - } - to { - opacity: 0; - -webkit-transform: translateX(-0.5rem); - transform: translateX(-0.5rem); - } -} -@-webkit-keyframes flyOutRight { - from { - opacity: 1; - -webkit-transform: none; - transform: none; - } - to { - opacity: 0; - -webkit-transform: translateX(0.5rem); - transform: translateX(0.5rem); - } -} -@keyframes flyOutRight { - from { - opacity: 1; - -webkit-transform: none; - transform: none; - } - to { - opacity: 0; - -webkit-transform: translateX(0.5rem); - transform: translateX(0.5rem); - } -} -.fly-in-from-left { - -webkit-animation: flyInLeft 0.2s forwards; - animation: flyInLeft 0.2s forwards; -} - -.fly-in-from-right { - -webkit-animation: flyInRight 0.2s forwards; - animation: flyInRight 0.2s forwards; -} - -.fly-out-to-left { - -webkit-animation: flyOutLeft 0.2s forwards; - animation: flyOutLeft 0.2s forwards; -} - -.fly-out-to-right { - -webkit-animation: flyOutRight 0.2s forwards; - animation: flyOutRight 0.2s forwards; -} - #highlights { padding: 1.5rem 0; display: grid; - grid-template-columns: 1fr 1fr; - grid-template-areas: "token token" "total wallet" "contract contract"; + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); gap: 1.5rem; } #highlights .highlight-item { opacity: 0; - display: -webkit-box; - display: -ms-flexbox; display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - padding: 1.5rem; - border-left: 0.1rem solid rgba(var(--text), 0.2); + flex-direction: column; + padding: 1rem 1.5rem; + border-left: 0.1rem solid rgba(var(--text-color), 0.2); + --animation-duration: 0.3s; } #highlights .highlight-item .label { margin-top: auto; @@ -620,69 +773,93 @@ header.grid-2 { text-transform: capitalize; } #highlights .highlight-item:first-of-type { - grid-area: token; - -webkit-animation: flyInLeft 0.4s 0.2s forwards; - animation: flyInLeft 0.4s 0.2s forwards; + -webkit-animation: flyInLeft var(--animation-duration) forwards; + animation: flyInLeft var(--animation-duration) forwards; } #highlights .highlight-item:nth-of-type(2) { - grid-area: total; - -webkit-animation: flyInLeft 0.4s 0.4s forwards; - animation: flyInLeft 0.4s 0.4s forwards; + -webkit-animation: flyInLeft var(--animation-duration) 0.1s forwards; + animation: flyInLeft var(--animation-duration) 0.1s forwards; } #highlights .highlight-item:nth-of-type(3) { - grid-area: wallet; - -webkit-animation: flyInLeft 0.4s 0.6s forwards; - animation: flyInLeft 0.4s 0.6s forwards; + -webkit-animation: flyInLeft var(--animation-duration) 0.2s forwards; + animation: flyInLeft var(--animation-duration) 0.2s forwards; } #highlights .highlight-item:last-of-type { - grid-area: contract; - -webkit-animation: flyInLeft 0.4s 0.8s forwards; - animation: flyInLeft 0.4s 0.8s forwards; -} - -#latest_transaction_section, -#latest_blocks_section { - background: rgba(var(--foreground), 1); -} -#latest_transaction_section header, -#latest_blocks_section header { - grid-template-columns: 1fr auto; - background: inherit; - z-index: 2; + -webkit-animation: flyInLeft var(--animation-duration) 0.3s forwards; + animation: flyInLeft var(--animation-duration) 0.3s forwards; } #main_header { - height: 8rem; + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-areas: "logo theme" "search search"; + margin-top: 1rem; + gap: 1rem; } -#main_header > .flex:first-of-type { - margin-top: 1.5rem; + +#logo { + grid-area: logo; + color: inherit; +} + +theme-toggle { + grid-area: theme; + justify-self: end; + align-self: center; +} + +#search_wrapper { + grid-area: search; + width: min(28rem, 100%); + position: relative; +} + +#main_search_field { + width: 100%; + --min-height: 2.8rem; +} + +#suggestions { + position: absolute; + top: 100%; + left: 0; + width: 100%; + background: rgba(var(--foreground-color), 1); + border-radius: 0.5rem; + z-index: 1; + overflow: hidden; + max-height: 0; + transition: max-height 0.2s ease-in-out; +} +#suggestions:not(:empty) { + max-height: 20rem; + overflow-y: auto; +} + +.suggestion { + padding: 0.8rem 1rem; + display: flex; + align-items: center; + cursor: pointer; +} +.suggestion:hover, .suggestion:active, .suggestion:focus { + background: rgba(var(--text-color), 0.06); + outline: none; +} +.suggestion .address { + font-size: 0.8rem; + color: rgba(var(--text-color), 0.6); + margin-left: auto; } #page_header { padding: 1rem 0; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; + align-items: center; } #page_header h3 { font-weight: 500; text-transform: capitalize; } -#page_header .icon { - height: 1.8rem; - width: 1.8rem; - cursor: pointer; -} -#page_header .icon:first-of-type { - margin-right: 1rem; - padding: 0.4rem 0.4rem 0.4rem 0; -} -#page_header .icon:nth-of-type(2) { - padding: 0.4rem 0 0.4rem 0.4rem; -} -#page_header #secondary_search_btn { - margin-left: auto; -} .page { padding: 0 0 1rem 0; @@ -702,46 +879,25 @@ p { } .balance-card { - display: inline-grid; - grid-template-columns: auto auto; - grid-template-areas: "labl logo" "balance logo" "address address"; - background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40' style='fill:none; stroke: %23ffffff08'%3E%3Ccircle cx='3.5' cy='3.5' r='2.12'/%3E%3Ccircle cx='5' cy='10' r='1'/%3E%3Ccircle cx='8.5' cy='4.5' r='1.5'/%3E%3Ccircle cx='6' cy='33' r='2'/%3E%3Ccircle cx='14' cy='29' r='1'/%3E%3Ccircle cx='9.5' cy='22.5' r='1.5'/%3E%3Ccircle cx='29.5' cy='17.5' r='4.5'/%3E%3Ccircle cx='22' cy='8' r='1'/%3E%3Ccircle cx='15.5' cy='12.5' r='2.5'/%3E%3Ccircle cx='27.5' cy='30.5' r='0.5'/%3E%3Ccircle cx='18.5' cy='35.5' r='2.5'/%3E%3Ccircle cx='32' cy='36' r='1'/%3E%3Ccircle cx='35' cy='25' r='1'/%3E%3Ccircle cx='23' cy='21' r='2'/%3E%3Ccircle cx='36.5' cy='1.5' r='0.5'/%3E%3Ccircle cx='30.5' cy='3.5' r='1.5'/%3E%3Ccircle cx='34.5' cy='6.5' r='1.5'/%3E%3C/svg%3E"), linear-gradient(135deg, #4d20a7, #21106e); + display: flex; + flex-direction: column; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40' style='fill:none; stroke: %23ffffff08'%3E%3Ccircle cx='3.5' cy='3.5' r='2.12'/%3E%3Ccircle cx='5' cy='10' r='1'/%3E%3Ccircle cx='8.5' cy='4.5' r='1.5'/%3E%3Ccircle cx='6' cy='33' r='2'/%3E%3Ccircle cx='14' cy='29' r='1'/%3E%3Ccircle cx='9.5' cy='22.5' r='1.5'/%3E%3Ccircle cx='29.5' cy='17.5' r='4.5'/%3E%3Ccircle cx='22' cy='8' r='1'/%3E%3Ccircle cx='15.5' cy='12.5' r='2.5'/%3E%3Ccircle cx='27.5' cy='30.5' r='0.5'/%3E%3Ccircle cx='18.5' cy='35.5' r='2.5'/%3E%3Ccircle cx='32' cy='36' r='1'/%3E%3Ccircle cx='35' cy='25' r='1'/%3E%3Ccircle cx='23' cy='21' r='2'/%3E%3Ccircle cx='36.5' cy='1.5' r='0.5'/%3E%3Ccircle cx='30.5' cy='3.5' r='1.5'/%3E%3Ccircle cx='34.5' cy='6.5' r='1.5'/%3E%3C/svg%3E"), linear-gradient(135deg, rgb(77, 32, 167), rgb(33, 16, 110)); background-size: cover; color: white; border-radius: 0.5rem; padding: 2rem 1.5rem; margin-bottom: 1rem; } -.balance-card .flo-logo { - grid-area: logo; - fill: white; - height: 1.5rem; - width: 1.5rem; - opacity: 0.8; - justify-self: flex-end; -} +.balance-card h2, .balance-card h3, -.balance-card h4 { - display: inline-block; - width: auto; +.balance-card h4, +.balance-card h5 { + opacity: 0.8; } .balance-card h3 { - grid-area: balance; - font-weight: 400; - opacity: 0.8; -} -.balance-card h4 { - font-weight: 400; -} -.balance-card p { - font-size: 0.8rem; - grid-area: address; - opacity: 0.8; - letter-spacing: 0.1em; - margin-top: 3rem; + font-size: 1.5rem; } .balance-card .label { - grid-area: labl; color: white; opacity: 0.7; } @@ -750,26 +906,19 @@ p { .status { padding: 0.5rem 0.8rem; border-radius: 2rem; - display: -webkit-inline-box; - display: -ms-inline-flexbox; display: inline-flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; + align-items: center; margin-bottom: 0.5rem; text-transform: capitalize; } .choice-container { - display: -webkit-box; - display: -ms-flexbox; display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; + flex-wrap: wrap; } .choice { - border: solid 1px rgba(var(--text), 0.2); + border: solid 1px rgba(var(--text-color), 0.2); } .choice:last-of-type { margin-bottom: 0; @@ -779,8 +928,8 @@ p { font-size: 0.8rem; } .status.closed { - background: rgba(var(--foreground), 1); - border: solid 1px rgba(var(--text), 0.2); + background: rgba(var(--foreground-color), 1); + border: solid 1px rgba(var(--text-color), 0.2); } .address, @@ -789,7 +938,7 @@ p { .contract, .block-height { cursor: pointer; - color: var(--primary-color); + color: var(--accent-color); } .address { @@ -797,43 +946,6 @@ p { word-break: break-all; } -.tabs { - position: sticky; - top: 0; - padding: 1rem 0 1rem 0; - background: rgba(var(--foreground), 1); - z-index: 2; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - overflow-x: auto; -} -.tabs .tab { - cursor: pointer; - opacity: 0.6; - margin-right: 1.5rem; - -webkit-tap-highlight-color: transparent; - white-space: nowrap; - font-size: 1.1rem; -} -.tabs .tab:last-of-type { - margin-right: 0; -} -.tabs .tab.active { - opacity: 1; -} -.tabs .line { - position: absolute; - height: 0.12rem; - background: rgba(var(--text), 1); - width: 1px; - bottom: 0; - -webkit-transition: width 0.4s, -webkit-transform 0.4s; - transition: width 0.4s, -webkit-transform 0.4s; - transition: transform 0.4s, width 0.4s; - transition: transform 0.4s, width 0.4s, -webkit-transform 0.4s; -} - .contract-choice { display: grid; gap: 0.5rem 1rem; @@ -843,176 +955,112 @@ p { margin-bottom: 0; } -@-webkit-keyframes fade { - from { - opacity: 0; - -webkit-transform: translateY(1rem); - transform: translateY(1rem); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fade { - from { - opacity: 0; - -webkit-transform: translateY(1rem); - transform: translateY(1rem); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} .transaction { display: grid; - gap: 2rem 1rem; - padding: 2rem; + gap: 1.5rem; + padding: max(1rem, 2vw); border-radius: 0.5rem; - grid-template-columns: -webkit-min-content 1fr; - grid-template-columns: min-content 1fr; - grid-template-rows: auto 1fr; - background: rgba(var(--text), 0.06); - grid-template-areas: ". ." "info info"; + background-color: rgba(var(--foreground-color), 0.8); + content-visibility: auto; } .transaction .contract-info { - grid-area: info; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} -.transaction h4 { - font-weight: 500; + align-items: flex-start; + display: grid; + gap: 1.5rem; } .transaction > .icon:first-of-type { + fill: none; + stroke: rgba(var(--text-color), 0.8); stroke-width: 4; - justify-self: center; - height: 3rem; - width: 3rem; - padding: 0.8rem; + stroke-linecap: round; + stroke-linejoin: round; + overflow: visible; + height: 2.5rem; + width: 2.5rem; + padding: 0.7rem; border-radius: 1rem; - background: rgba(var(--foreground), 1); + background: rgba(var(--text-color), 0.1); } -#loader_page { - display: grid; - place-content: center; - height: 100vh; - width: 100vw; - text-align: center; +#loading { position: fixed; + display: grid; + top: 0; + left: 0; + bottom: 0; + right: 0; + place-content: center; + justify-items: center; + background: rgba(var(--foreground-color), 1); z-index: 10; - background: rgba(var(--foreground), 1); } -#loader_page h4 { +#loading h4 { margin-top: 1.5rem; font-weight: 500; } -#loader { - justify-self: center; - height: 2.5rem; - width: 2.5rem; - -webkit-transform-origin: center; - transform-origin: center; - stroke-dashoffset: 200; - stroke-dasharray: 200; - -webkit-animation: load 2s infinite linear; - animation: load 2s infinite linear; - stroke: var(--primary-color); -} - -@-webkit-keyframes load { - 50% { - stroke-dashoffset: 0; - } - 100% { - stroke-dashoffset: -200; - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes load { - 50% { - stroke-dashoffset: 0; - } - 100% { - stroke-dashoffset: -200; - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} #all_blocks_page, -#top_blocks_container, -#token_balance_container { +#top_blocks_container { display: grid; + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); gap: 1rem; - grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); margin-top: 1rem; } -#all_blocks_page .card, -#top_blocks_container .card, -#token_balance_container .card { - margin: 0; + +.block-card { + grid-template-columns: 5rem 1fr auto; + gap: 1rem; + background-color: rgba(var(--foreground-color), 1); + padding: 1rem; + border-radius: 0.5rem; +} +.block-card time { + font-size: 0.8rem; + color: rgba(var(--text-color), 0.8); } #token_balance_container { + display: grid; + gap: 0.5rem; margin-top: 1.5rem; } +#token_balance_container .holder-balance { + padding: 1rem; + border-radius: 0.5rem; + background: rgba(var(--foreground-color), 1); +} #error_page { padding: 1.5rem 0; } +.view-wrapper { + display: grid; + align-items: flex-start; +} +.view-wrapper > * { + grid-area: 1/1; +} + @media only screen and (min-width: 640px) { .margin, .page { margin: 0 4vw; } - - .input { - width: 60% !important; - } - section header h1 { font-size: 2rem; } - - #main_search h1 { - font-size: 6rem; - text-align: center; + #main_header { + grid-template-areas: "logo theme"; } - - #highlights { - gap: 2rem; - grid-template-columns: repeat(2, auto); - grid-template-areas: "token total" " wallet contract"; + #search_wrapper { + grid-area: 1/1/2/-1; + margin: 0 auto; + max-width: calc(100% - 16rem); } - #highlights .highlight-item h1 { - font-size: 2.5rem; - } - #highlights .highlight-item:first-of-type { - grid-area: token; - } - #highlights .highlight-item:nth-of-type(2) { - grid-area: total; - } - #highlights .highlight-item:nth-of-type(3) { - grid-area: wallet; - } - #highlights .highlight-item:last-of-type { - grid-area: contract; - } - #page_header { padding: 1.5rem 0; } - #transaction_page { display: grid; gap: 0 1.5rem; @@ -1022,105 +1070,32 @@ p { #transaction_page .head { grid-area: header; } - + .transaction { + grid-template-columns: auto 1fr; + } + .transaction > .icon:first-of-type { + grid-area: 1/1/3/2; + } .contract-choice { grid-template-columns: 2fr 1fr 1fr; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; + align-items: center; } } @media only screen and (min-width: 1280px) { .margin, .page { - margin: 0 12vw; - } - - .input { - width: 50% !important; - } - - #highlights { - grid-template-columns: repeat(4, auto); - grid-template-areas: "token total wallet contract"; - } - #highlights .highlight-item:first-of-type { - grid-area: token; - } - #highlights .highlight-item:nth-of-type(2) { - grid-area: total; - } - #highlights .highlight-item:nth-of-type(3) { - grid-area: wallet; - } - #highlights .highlight-item:last-of-type { - grid-area: contract; - } -} -@media only screen and (min-width: 1920px) { - body { - font-size: 24px; - } - - .margin, -.page { - margin: 0 16vw; - } - - #search_page { - padding: 1.5rem 12vw; - } - - .input { - width: 40% !important; - } -} -@media only screen and (min-width: 2048px) { - body { - font-size: 24px; - } - - .margin, -.page { - margin: 0 26vw; - } - - #search_page { - padding: 1.5rem 24vw; - } - - #first_section { - min-height: auto; - } - - .input { - width: 30% !important; - } -} -@media only screen and (max-width: 320px) { - body { - font-size: 14px; + margin: 0 10vw; } } @media (hover: hover) { button { - -webkit-transition: background-color 0.3s; transition: background-color 0.3s; } button:hover { - background: var(--primary-color); - color: rgba(var(--foreground), 1); + background: var(--accent-color); + color: rgba(var(--foreground-color), 1); } - .hover { cursor: pointer; } - - .tab { - -webkit-transition: opacity 0.3s; - transition: opacity 0.3s; - } - .tab:hover { - opacity: 1; - } } \ No newline at end of file diff --git a/css/main.min.css b/css/main.min.css index 5099f93..6f2e7da 100644 --- a/css/main.min.css +++ b/css/main.min.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css2?family=Barlow:wght@500;600;700&family=Roboto:wght@400;500;700&display=swap";*,::before,::after{padding:0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:"Roboto",sans-serif}body{--primary-color: #1565c0;--text: 17, 17, 17;--text-light: 100, 100, 100;--foreground: 255, 255, 255;--background: #e8e8e8;--dark-shade: #dadada;font-size:16px;color:rgba(var(--text), 1);background:rgba(var(--foreground), 1);background-size:cover}body[data-theme=dark]{--primary-color: #2196f3;--text: 218, 218, 218;--text-light: 170, 170, 170;--foreground: 20, 20, 20;--background: #0a0a0a;--dark-shade: #1a1a1a}input[type=text]::-ms-clear{display:none;width:0;height:0}input[type=text]::-ms-reveal{display:none;width:0;height:0}input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{display:none}input[type=number]{-moz-appearance:textfield}input:invalid{outline:none;-webkit-box-shadow:none;box-shadow:none}::-moz-focus-inner{border:none}button{border:none;border-radius:.2em;text-transform:uppercase;font-weight:500;letter-spacing:.06em;background:none;cursor:pointer;padding:.6rem 1rem;color:var(--primary-color);-ms-flex-item-align:center;align-self:center}h1{font-size:4rem}h2{font-size:2rem;font-weight:500}h3{font-size:1.5rem}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.grid-2{grid-template-columns:auto auto;gap:1em}.hide{opacity:0;pointer-events:none}.hide-completely{display:none !important}.breakable{word-break:break-word;font-weight:500;letter-spacing:.06rem}.other-font{font-family:"Barlow",sans-serif}.uppercase{text-transform:uppercase !important}.capitalise{text-transform:capitalize !important}.toggle{position:relative;cursor:pointer;z-index:1}.toggle input[type=checkbox]{display:none}.toggle .switch{overflow:hidden;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;justify-items:center;padding:.2rem;min-height:1.6rem;max-height:1.6rem;border-radius:.5rem;position:relative}.toggle .circle{border-radius:.5rem;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;fill:rgba(var(--text), 0.8);overflow:visible;stroke-linecap:round;stroke-linejoin:round;height:1.2rem;width:1.2rem}.toggle .circle:first-of-type{margin-bottom:.4rem}.toggle .circle line{stroke:rgba(var(--text), 0.8);stroke-width:6}.toggle input:checked~.switch .circle{-webkit-transform:translateY(-1.7rem);transform:translateY(-1.7rem)}section{position:relative}section .dark-background{display:grid;grid-template-rows:auto 1fr}ul[type=circle]{padding:1.5rem 2.5rem;list-style:circle}ul[type=circle] li{margin-bottom:1rem}ul[type=circle] li:last-of-type{margin-bottom:0}ul{list-style:none}ul .balance{margin-bottom:2rem}ul .balance:last-of-type{margin-bottom:0}.top-bottom-padding{padding:1.5rem 0}.margin,.page{margin:0 1.5rem}.margin-left-auto{margin-left:auto}.card{padding:2rem 1.5rem;border-radius:.5rem;background:rgba(var(--text), 0.06);margin:1.5rem 0}.card h4{margin-bottom:.4rem;font-weight:400;text-transform:capitalize}.card h2{margin-bottom:1.5rem}.transaction-container{display:grid;margin-top:1.5rem;gap:1.5rem;grid-template-columns:repeat(auto-fit, minmax(20rem, 1fr))}.label{text-transform:capitalize;font-size:.8rem;margin-bottom:.3rem;line-height:1.4em;color:rgba(var(--text-light), 1);margin-top:1.5rem;font-weight:400}.label:first-of-type{margin-top:0}.label+h4:not(.address){text-transform:capitalize}.header{justify-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#logo{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;letter-spacing:.1em;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer}#logo h4{font-weight:400}#logo #main_logo{height:1.2rem;width:1.2rem;margin-right:.2rem;fill:rgba(var(--text), 1)}#homepage{padding-top:0}#first_section{display:grid;grid-template-rows:1fr auto;min-height:calc(100vh - 8rem)}header.grid-2{margin-top:2rem}#search_page{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;margin:0;background:rgba(var(--foreground), 1);padding:1.5rem 8vw}#search_page header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-top:2rem}#search_page header .icon{margin:0;cursor:pointer;height:2.2rem;width:2.2rem;padding:.6rem}#search_page h1{font-weight:500;font-size:3rem}#search_page .input{-webkit-animation:fade .4s;animation:fade .4s}#search_page .input input:valid~#suggestions{opacity:1;pointer-events:all;-webkit-transform:none;transform:none}#search_page #suggestions{opacity:0;pointer-events:none;-webkit-transform:translateY(-0.5rem);transform:translateY(-0.5rem);-webkit-transition:opacity .3s,-webkit-transform .3s;transition:opacity .3s,-webkit-transform .3s;transition:transform .3s,opacity .3s;transition:transform .3s,opacity .3s,-webkit-transform .3s;position:absolute;top:100%;width:100%;background:var(--background);border-radius:.5rem;padding:.5rem 0;max-height:30vh;overflow-y:auto;margin-top:.5rem}#search_page #suggestions:empty{padding:0}#search_page .suggestion{padding:.6rem 1.5rem .6rem 3rem;opacity:.8;cursor:pointer}#search_page .suggestion:hover,#search_page .suggestion:focus{opacity:1}#main_search{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#main_search h2{margin-top:2rem;-ms-flex-item-align:start;align-self:flex-start;font-size:4rem;letter-spacing:.1em;font-weight:600}#main_search h4{line-height:1.4em;margin-top:2rem;font-weight:400;color:rgba(var(--text-light), 1)}#main_search label{position:relative}.input{border-radius:.2rem;position:relative;display:grid;grid-template-columns:auto 1fr;z-index:1;width:100%;margin:1.5rem 0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.8rem;gap:1em;background:var(--background)}.input input{border:none;width:100%;background:transparent;outline:none;font-size:1rem;color:rgba(var(--text), 1)}.icon{height:1rem;overflow:visible;width:1rem;fill:none;stroke:rgba(var(--text), 1);stroke-linecap:round;stroke-linejoin:round;stroke-width:6}.copy-row{display:grid;grid-template-columns:1fr auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.5rem}.copy-row .icon{cursor:pointer}#textCopied{padding:1rem;border-radius:2rem;background:rgba(var(--text), 0.2);color:rgba(var(--text), 1);position:fixed;bottom:0;pointer-events:none;margin:2rem 0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);-webkit-transition:.3s opacity ease;transition:.3s opacity ease;z-index:20}@-webkit-keyframes flyInLeft{from{opacity:0;-webkit-transform:translateX(-0.5rem);transform:translateX(-0.5rem)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes flyInLeft{from{opacity:0;-webkit-transform:translateX(-0.5rem);transform:translateX(-0.5rem)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes flyInRight{from{opacity:0;-webkit-transform:translateX(0.5rem);transform:translateX(0.5rem)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes flyInRight{from{opacity:0;-webkit-transform:translateX(0.5rem);transform:translateX(0.5rem)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes flyOutLeft{from{opacity:1;-webkit-transform:none;transform:none}to{opacity:0;-webkit-transform:translateX(-0.5rem);transform:translateX(-0.5rem)}}@keyframes flyOutLeft{from{opacity:1;-webkit-transform:none;transform:none}to{opacity:0;-webkit-transform:translateX(-0.5rem);transform:translateX(-0.5rem)}}@-webkit-keyframes flyOutRight{from{opacity:1;-webkit-transform:none;transform:none}to{opacity:0;-webkit-transform:translateX(0.5rem);transform:translateX(0.5rem)}}@keyframes flyOutRight{from{opacity:1;-webkit-transform:none;transform:none}to{opacity:0;-webkit-transform:translateX(0.5rem);transform:translateX(0.5rem)}}.fly-in-from-left{-webkit-animation:flyInLeft .2s forwards;animation:flyInLeft .2s forwards}.fly-in-from-right{-webkit-animation:flyInRight .2s forwards;animation:flyInRight .2s forwards}.fly-out-to-left{-webkit-animation:flyOutLeft .2s forwards;animation:flyOutLeft .2s forwards}.fly-out-to-right{-webkit-animation:flyOutRight .2s forwards;animation:flyOutRight .2s forwards}#highlights{padding:1.5rem 0;display:grid;grid-template-columns:1fr 1fr;grid-template-areas:"token token" "total wallet" "contract contract";gap:1.5rem}#highlights .highlight-item{opacity:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1.5rem;border-left:.1rem solid rgba(var(--text), 0.2)}#highlights .highlight-item .label{margin-top:auto}#highlights .highlight-item h1{font-size:2rem;letter-spacing:.1rem;font-weight:500;text-transform:uppercase;overflow-wrap:break-word}#highlights .highlight-item:first-of-type{text-transform:uppercase}#highlights .highlight-item:nth-of-type(2){text-transform:capitalize}#highlights .highlight-item:first-of-type{grid-area:token;-webkit-animation:flyInLeft .4s .2s forwards;animation:flyInLeft .4s .2s forwards}#highlights .highlight-item:nth-of-type(2){grid-area:total;-webkit-animation:flyInLeft .4s .4s forwards;animation:flyInLeft .4s .4s forwards}#highlights .highlight-item:nth-of-type(3){grid-area:wallet;-webkit-animation:flyInLeft .4s .6s forwards;animation:flyInLeft .4s .6s forwards}#highlights .highlight-item:last-of-type{grid-area:contract;-webkit-animation:flyInLeft .4s .8s forwards;animation:flyInLeft .4s .8s forwards}#latest_transaction_section,#latest_blocks_section{background:rgba(var(--foreground), 1)}#latest_transaction_section header,#latest_blocks_section header{grid-template-columns:1fr auto;background:inherit;z-index:2}#main_header{height:8rem}#main_header>.flex:first-of-type{margin-top:1.5rem}#page_header{padding:1rem 0;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#page_header h3{font-weight:500;text-transform:capitalize}#page_header .icon{height:1.8rem;width:1.8rem;cursor:pointer}#page_header .icon:first-of-type{margin-right:1rem;padding:.4rem .4rem .4rem 0}#page_header .icon:nth-of-type(2){padding:.4rem 0 .4rem .4rem}#page_header #secondary_search_btn{margin-left:auto}.page{padding:0 0 1rem 0}.page h3.heading{text-transform:capitalize;font-weight:500}.page>h3.heading{margin-top:2rem}p{overflow-wrap:break-word;line-height:1.6em;text-transform:capitalize}.balance-card{display:inline-grid;grid-template-columns:auto auto;grid-template-areas:"labl logo" "balance logo" "address address";background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40' style='fill:none; stroke: %23ffffff08'%3E%3Ccircle cx='3.5' cy='3.5' r='2.12'/%3E%3Ccircle cx='5' cy='10' r='1'/%3E%3Ccircle cx='8.5' cy='4.5' r='1.5'/%3E%3Ccircle cx='6' cy='33' r='2'/%3E%3Ccircle cx='14' cy='29' r='1'/%3E%3Ccircle cx='9.5' cy='22.5' r='1.5'/%3E%3Ccircle cx='29.5' cy='17.5' r='4.5'/%3E%3Ccircle cx='22' cy='8' r='1'/%3E%3Ccircle cx='15.5' cy='12.5' r='2.5'/%3E%3Ccircle cx='27.5' cy='30.5' r='0.5'/%3E%3Ccircle cx='18.5' cy='35.5' r='2.5'/%3E%3Ccircle cx='32' cy='36' r='1'/%3E%3Ccircle cx='35' cy='25' r='1'/%3E%3Ccircle cx='23' cy='21' r='2'/%3E%3Ccircle cx='36.5' cy='1.5' r='0.5'/%3E%3Ccircle cx='30.5' cy='3.5' r='1.5'/%3E%3Ccircle cx='34.5' cy='6.5' r='1.5'/%3E%3C/svg%3E"),linear-gradient(135deg, #4d20a7, #21106e);background-size:cover;color:#fff;border-radius:.5rem;padding:2rem 1.5rem;margin-bottom:1rem}.balance-card .flo-logo{grid-area:logo;fill:#fff;height:1.5rem;width:1.5rem;opacity:.8;justify-self:flex-end}.balance-card h3,.balance-card h4{display:inline-block;width:auto}.balance-card h3{grid-area:balance;font-weight:400;opacity:.8}.balance-card h4{font-weight:400}.balance-card p{font-size:.8rem;grid-area:address;opacity:.8;letter-spacing:.1em;margin-top:3rem}.balance-card .label{grid-area:labl;color:#fff;opacity:.7}.choice,.status{padding:.5rem .8rem;border-radius:2rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:.5rem;text-transform:capitalize}.choice-container{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.choice{border:solid 1px rgba(var(--text), 0.2)}.choice:last-of-type{margin-bottom:0}.status{font-size:.8rem}.status.closed{background:rgba(var(--foreground), 1);border:solid 1px rgba(var(--text), 0.2)}.address,.token,.hash,.contract,.block-height{cursor:pointer;color:var(--primary-color)}.address{text-transform:none !important;word-break:break-all}.tabs{position:sticky;top:0;padding:1rem 0 1rem 0;background:rgba(var(--foreground), 1);z-index:2;display:-webkit-box;display:-ms-flexbox;display:flex;overflow-x:auto}.tabs .tab{cursor:pointer;opacity:.6;margin-right:1.5rem;-webkit-tap-highlight-color:transparent;white-space:nowrap;font-size:1.1rem}.tabs .tab:last-of-type{margin-right:0}.tabs .tab.active{opacity:1}.tabs .line{position:absolute;height:.12rem;background:rgba(var(--text), 1);width:1px;bottom:0;-webkit-transition:width .4s,-webkit-transform .4s;transition:width .4s,-webkit-transform .4s;transition:transform .4s,width .4s;transition:transform .4s,width .4s,-webkit-transform .4s}.contract-choice{display:grid;gap:.5rem 1rem;margin-bottom:2rem}.contract-choice:last-of-type{margin-bottom:0}@-webkit-keyframes fade{from{opacity:0;-webkit-transform:translateY(1rem);transform:translateY(1rem)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fade{from{opacity:0;-webkit-transform:translateY(1rem);transform:translateY(1rem)}to{opacity:1;-webkit-transform:none;transform:none}}.transaction{display:grid;gap:2rem 1rem;padding:2rem;border-radius:.5rem;grid-template-columns:-webkit-min-content 1fr;grid-template-columns:min-content 1fr;grid-template-rows:auto 1fr;background:rgba(var(--text), 0.06);grid-template-areas:". ." "info info"}.transaction .contract-info{grid-area:info;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.transaction h4{font-weight:500}.transaction>.icon:first-of-type{stroke-width:4;justify-self:center;height:3rem;width:3rem;padding:.8rem;border-radius:1rem;background:rgba(var(--foreground), 1)}#loader_page{display:grid;place-content:center;height:100vh;width:100vw;text-align:center;position:fixed;z-index:10;background:rgba(var(--foreground), 1)}#loader_page h4{margin-top:1.5rem;font-weight:500}#loader{justify-self:center;height:2.5rem;width:2.5rem;-webkit-transform-origin:center;transform-origin:center;stroke-dashoffset:200;stroke-dasharray:200;-webkit-animation:load 2s infinite linear;animation:load 2s infinite linear;stroke:var(--primary-color)}@-webkit-keyframes load{50%{stroke-dashoffset:0}100%{stroke-dashoffset:-200;-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load{50%{stroke-dashoffset:0}100%{stroke-dashoffset:-200;-webkit-transform:rotate(360deg);transform:rotate(360deg)}}#all_blocks_page,#top_blocks_container,#token_balance_container{display:grid;gap:1rem;grid-template-columns:repeat(auto-fill, minmax(12rem, 1fr));margin-top:1rem}#all_blocks_page .card,#top_blocks_container .card,#token_balance_container .card{margin:0}#token_balance_container{margin-top:1.5rem}#error_page{padding:1.5rem 0}@media only screen and (min-width: 640px){.margin,.page{margin:0 4vw}.input{width:60% !important}section header h1{font-size:2rem}#main_search h1{font-size:6rem;text-align:center}#highlights{gap:2rem;grid-template-columns:repeat(2, auto);grid-template-areas:"token total" " wallet contract"}#highlights .highlight-item h1{font-size:2.5rem}#highlights .highlight-item:first-of-type{grid-area:token}#highlights .highlight-item:nth-of-type(2){grid-area:total}#highlights .highlight-item:nth-of-type(3){grid-area:wallet}#highlights .highlight-item:last-of-type{grid-area:contract}#page_header{padding:1.5rem 0}#transaction_page{display:grid;gap:0 1.5rem;grid-template-columns:40% 60%;grid-template-areas:"header header" ". ."}#transaction_page .head{grid-area:header}.contract-choice{grid-template-columns:2fr 1fr 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center}}@media only screen and (min-width: 1280px){.margin,.page{margin:0 12vw}.input{width:50% !important}#highlights{grid-template-columns:repeat(4, auto);grid-template-areas:"token total wallet contract"}#highlights .highlight-item:first-of-type{grid-area:token}#highlights .highlight-item:nth-of-type(2){grid-area:total}#highlights .highlight-item:nth-of-type(3){grid-area:wallet}#highlights .highlight-item:last-of-type{grid-area:contract}}@media only screen and (min-width: 1920px){body{font-size:24px}.margin,.page{margin:0 16vw}#search_page{padding:1.5rem 12vw}.input{width:40% !important}}@media only screen and (min-width: 2048px){body{font-size:24px}.margin,.page{margin:0 26vw}#search_page{padding:1.5rem 24vw}#first_section{min-height:auto}.input{width:30% !important}}@media only screen and (max-width: 320px){body{font-size:14px}}@media(hover: hover){button{-webkit-transition:background-color .3s;transition:background-color .3s}button:hover{background:var(--primary-color);color:rgba(var(--foreground), 1)}.hover{cursor:pointer}.tab{-webkit-transition:opacity .3s;transition:opacity .3s}.tab:hover{opacity:1}} \ No newline at end of file +*{padding:0;margin:0;box-sizing:border-box;font-family:"Inter",sans-serif}:root{font-size:clamp(1rem,1.2vmax,1.2rem)}html,body{height:100%}body{--accent-color: #3d5afe;--secondary-color: #ffac2e;--text-color: 34, 34, 34;--foreground-color: 252, 253, 255;--background-color: 241, 243, 248;--danger-color: rgb(255, 75, 75);--green: #1cad59;--yellow: rgb(220, 165, 0);color:rgba(var(--text-color), 1);background-color:rgba(var(--background-color), 1)}body[data-theme=dark]{--accent-color: #92a2ff;--secondary-color: #d60739;--text-color: 200, 200, 200;--foreground-color: 27, 28, 29;--background-color: 21, 22, 22;--danger-color: rgb(255, 106, 106);--green: #00e676;--yellow: rgb(255, 213, 5)}body[data-theme=dark] ::-webkit-calendar-picker-indicator{filter:invert(1)}h1,h2,h3,h4,h5,h6{letter-spacing:-0.01em;font-weight:700}p,strong{line-height:1.7;color:rgba(var(--text-color), 0.9);max-width:70ch}img{-o-object-fit:cover;object-fit:cover}a:where([class]){color:inherit;text-decoration:none}a:where([class]):focus-visible{box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset}a{color:var(--accent-color)}a:-webkit-any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}a:-moz-any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}a:any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}button,.button{-webkit-user-select:none;-moz-user-select:none;user-select:none;position:relative;display:inline-flex;border:none;background-color:rgba(0,0,0,0);overflow:hidden;color:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);align-items:center;font-size:inherit;font-weight:500;white-space:nowrap;padding:.8rem;border-radius:.3rem;justify-content:center;flex-shrink:0}button:focus-visible,.button:focus-visible{outline:var(--accent-color) solid medium}button:not(:disabled),.button:not(:disabled){cursor:pointer}.button{background-color:rgba(var(--text-color), 0.02);border:solid thin rgba(var(--text-color), 0.06)}.button--primary{color:rgba(var(--background-color), 1);background-color:var(--accent-color)}.button--primary .icon{fill:rgba(var(--background-color), 1)}.button--colored{color:var(--accent-color)}.button--colored .icon{fill:var(--accent-color)}.button--danger{background-color:rgba(255,115,115,.062745098);color:var(--danger-color)}.button--danger .icon{fill:var(--danger-color)}.button--small{padding:.4rem .6rem}.button--outlined{border:solid rgba(var(--text-color), 0.3) .1rem;background-color:rgba(var(--foreground-color), 1)}.button--transparent{background-color:rgba(0,0,0,0)}button:disabled{opacity:.4;cursor:not-allowed;filter:saturate(0)}.cta{text-transform:uppercase;font-size:.8rem;font-weight:700;letter-spacing:.05em;padding:.8rem 1rem}.icon{width:1.2rem;height:1.2rem;fill:rgba(var(--text-color), 0.8);flex-shrink:0}.icon-only{padding:.5rem;border-radius:.3rem;aspect-ratio:1/1}a:-webkit-any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}a:-moz-any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}a:any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}details summary{display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer;align-items:center;justify-content:space-between;color:var(--accent-color)}details[open] summary{margin-bottom:1rem}details[open]>summary .down-arrow{transform:rotate(180deg)}sm-input{--border-radius: 0.5rem;--background-color: rgba(var(--foreground-color), 1)}sm-spinner{--size: 1.5rem;--stroke-width: 0.1rem}sm-chips{--gap: 0.3rem}sm-chip{position:relative;font-size:.9rem;--border-radius: 0.5rem;--padding: 0.5rem 0.8rem;--background: rgba(var(--text-color), 0.06);-webkit-user-select:none;-moz-user-select:none;user-select:none;font-weight:500}sm-chip[selected]{--background: var(--accent-color);color:rgba(var(--background-color), 1)}ul{list-style:none}.overflow-ellipsis{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.wrap-around{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.full-bleed{grid-column:1/-1}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.sticky{position:-webkit-sticky;position:sticky}.top-0{top:0}.flex{display:flex}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.grid{display:grid}.flow-column{grid-auto-flow:column}.gap-0-3{gap:.3rem}.gap-0-5{gap:.5rem}.gap-1{gap:1rem}.gap-1-5{gap:1.5rem}.gap-2{gap:2rem}.gap-3{gap:3rem}.text-align-right{text-align:right}.text-align-left{text-align:left}.align-items-start{align-items:flex-start}.align-items-center{align-items:center}.align-content-start{align-content:flex-start}.align-start{align-content:flex-start}.align-center{align-items:center}.align-end{align-items:flex-end}.text-center{text-align:center}.justify-start{justify-items:start}.justify-content-start{justify-content:start}.justify-content-center{justify-content:center}.justify-right{margin-left:auto}.align-self-center{align-self:center}.align-self-end{align-self:end}.justify-self-center{justify-self:center}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.flex-direction-column{flex-direction:column}.space-between{justify-content:space-between}.space-evenly{justify-content:space-evenly}.w-100{width:100%}.h-100{height:100%}.padding-block-1{padding-block:1rem}.margin-right-0-3{margin-right:.3rem}.margin-right-0-5{margin-right:.5rem}.margin-right-1{margin-right:1rem}.margin-left-0-5{margin-left:.5rem}.margin-left-auto{margin-left:auto}.margin-right-auto{margin-right:auto}.margin-top-1{margin-top:1rem}.margin-bottom-0-5{margin-bottom:.5rem}.margin-bottom-1{margin-bottom:1rem}.margin-bottom-2{margin-bottom:2rem}.margin-block-0-5{margin-block:.5rem}.margin-block-1{margin-block:1rem}.margin-block-1-5{margin-block:1.5rem}.margin-inline-1{margin-inline:1rem}.margin-inline-1-5{margin-inline:1.5rem}.hidden{display:none !important}.h1{font-size:2.5rem}.h2{font-size:2rem}.h3{font-size:1.4rem}.h4{font-size:1rem}.h5{font-size:.8rem}.grid-3{grid-template-columns:1fr auto auto}.flow-column{grid-auto-flow:column}.w-100{width:100%}.color-0-8{color:rgba(var(--text-color), 0.8)}.weight-400{font-weight:400}.weight-500{font-weight:500}.ws-pre-line{white-space:pre-line}.card{background-color:rgba(var(--foreground-color), 1);border-radius:.5rem;padding:max(1rem,3vw)}.ripple{height:8rem;width:8rem;position:absolute;border-radius:50%;transform:scale(0);background:radial-gradient(circle, rgba(var(--text-color), 0.3) 0%, rgba(0, 0, 0, 0) 50%);pointer-events:none}.interactive{position:relative;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.observe-empty-state:empty{display:none}.observe-empty-state:not(:empty)~.empty-state{display:none}.multi-state-button{display:grid;text-align:center;align-items:center;justify-items:center}.multi-state-button>*{grid-area:1/1/2/2}.multi-state-button button{z-index:1}#confirmation_popup,#prompt_popup{flex-direction:column}#confirmation_popup h4,#prompt_popup h4{font-size:1.2rem;margin-bottom:1rem}#confirmation_popup .flex,#prompt_popup .flex{margin-top:1rem}.popup__header{position:relative;display:grid;gap:.5rem;width:100%;padding:0 1.5rem;align-items:center}.popup__header>*{grid-row:1}.popup__header h3,.popup__header h4{grid-column:1/-1;justify-self:center;align-self:center}.popup__header__close{grid-column:1;margin-left:-1rem;justify-self:flex-start}section{position:relative}section .dark-background{display:grid;grid-template-rows:auto 1fr}ul[type=circle]{padding:1.5rem 2.5rem;list-style:circle}ul[type=circle] li{margin-bottom:1rem}ul[type=circle] li:last-of-type{margin-bottom:0}ul{list-style:none}.top-bottom-padding{padding:1.5rem 0}.margin,.page{margin:0 1rem}.page{display:flex;flex-direction:column}.card{padding:2rem 1.5rem;border-radius:.5rem;background:rgba(var(--text-color), 0.06);margin:1.5rem 0}.card h4{margin-bottom:.4rem}.card h2{margin-bottom:1.5rem}.transaction-container{display:grid;margin-top:1.5rem;gap:.5rem}.label{text-transform:capitalize;font-size:.8rem;margin-bottom:.3rem;color:rgba(var(--text-color), 0.8);margin-top:1.5rem;font-weight:500}.label:first-of-type{margin-top:0}.label+*{font-weight:700}.header{justify-items:center;flex-direction:column}#homepage{padding-top:0}#first_section{display:grid}header.grid-2{margin-top:2rem}@-webkit-keyframes flyInLeft{from{opacity:0;transform:translateX(-0.5rem)}to{opacity:1;transform:none}}@keyframes flyInLeft{from{opacity:0;transform:translateX(-0.5rem)}to{opacity:1;transform:none}}@-webkit-keyframes flyInRight{from{opacity:0;transform:translateX(0.5rem)}to{opacity:1;transform:none}}@keyframes flyInRight{from{opacity:0;transform:translateX(0.5rem)}to{opacity:1;transform:none}}#highlights{padding:1.5rem 0;display:grid;grid-template-columns:repeat(auto-fit, minmax(16rem, 1fr));gap:1.5rem}#highlights .highlight-item{opacity:0;display:flex;flex-direction:column;padding:1rem 1.5rem;border-left:.1rem solid rgba(var(--text-color), 0.2);--animation-duration: 0.3s}#highlights .highlight-item .label{margin-top:auto}#highlights .highlight-item h1{font-size:2rem;letter-spacing:.1rem;font-weight:500;text-transform:uppercase;overflow-wrap:break-word}#highlights .highlight-item:first-of-type{text-transform:uppercase}#highlights .highlight-item:nth-of-type(2){text-transform:capitalize}#highlights .highlight-item:first-of-type{-webkit-animation:flyInLeft var(--animation-duration) forwards;animation:flyInLeft var(--animation-duration) forwards}#highlights .highlight-item:nth-of-type(2){-webkit-animation:flyInLeft var(--animation-duration) .1s forwards;animation:flyInLeft var(--animation-duration) .1s forwards}#highlights .highlight-item:nth-of-type(3){-webkit-animation:flyInLeft var(--animation-duration) .2s forwards;animation:flyInLeft var(--animation-duration) .2s forwards}#highlights .highlight-item:last-of-type{-webkit-animation:flyInLeft var(--animation-duration) .3s forwards;animation:flyInLeft var(--animation-duration) .3s forwards}#main_header{display:grid;grid-template-columns:1fr 1fr;grid-template-areas:"logo theme" "search search";margin-top:1rem;gap:1rem}#logo{grid-area:logo;color:inherit}theme-toggle{grid-area:theme;justify-self:end;align-self:center}#search_wrapper{grid-area:search;width:min(28rem,100%);position:relative}#main_search_field{width:100%;--min-height: 2.8rem}#suggestions{position:absolute;top:100%;left:0;width:100%;background:rgba(var(--foreground-color), 1);border-radius:.5rem;z-index:1;overflow:hidden;max-height:0;transition:max-height .2s ease-in-out}#suggestions:not(:empty){max-height:20rem;overflow-y:auto}.suggestion{padding:.8rem 1rem;display:flex;align-items:center;cursor:pointer}.suggestion:hover,.suggestion:active,.suggestion:focus{background:rgba(var(--text-color), 0.06);outline:none}.suggestion .address{font-size:.8rem;color:rgba(var(--text-color), 0.6);margin-left:auto}#page_header{padding:1rem 0;align-items:center}#page_header h3{font-weight:500;text-transform:capitalize}.page{padding:0 0 1rem 0}.page h3.heading{text-transform:capitalize;font-weight:500}.page>h3.heading{margin-top:2rem}p{overflow-wrap:break-word;line-height:1.6em;text-transform:capitalize}.balance-card{display:flex;flex-direction:column;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40' style='fill:none; stroke: %23ffffff08'%3E%3Ccircle cx='3.5' cy='3.5' r='2.12'/%3E%3Ccircle cx='5' cy='10' r='1'/%3E%3Ccircle cx='8.5' cy='4.5' r='1.5'/%3E%3Ccircle cx='6' cy='33' r='2'/%3E%3Ccircle cx='14' cy='29' r='1'/%3E%3Ccircle cx='9.5' cy='22.5' r='1.5'/%3E%3Ccircle cx='29.5' cy='17.5' r='4.5'/%3E%3Ccircle cx='22' cy='8' r='1'/%3E%3Ccircle cx='15.5' cy='12.5' r='2.5'/%3E%3Ccircle cx='27.5' cy='30.5' r='0.5'/%3E%3Ccircle cx='18.5' cy='35.5' r='2.5'/%3E%3Ccircle cx='32' cy='36' r='1'/%3E%3Ccircle cx='35' cy='25' r='1'/%3E%3Ccircle cx='23' cy='21' r='2'/%3E%3Ccircle cx='36.5' cy='1.5' r='0.5'/%3E%3Ccircle cx='30.5' cy='3.5' r='1.5'/%3E%3Ccircle cx='34.5' cy='6.5' r='1.5'/%3E%3C/svg%3E"),linear-gradient(135deg, rgb(77, 32, 167), rgb(33, 16, 110));background-size:cover;color:#fff;border-radius:.5rem;padding:2rem 1.5rem;margin-bottom:1rem}.balance-card h2,.balance-card h3,.balance-card h4,.balance-card h5{opacity:.8}.balance-card h3{font-size:1.5rem}.balance-card .label{color:#fff;opacity:.7}.choice,.status{padding:.5rem .8rem;border-radius:2rem;display:inline-flex;align-items:center;margin-bottom:.5rem;text-transform:capitalize}.choice-container{display:flex;flex-wrap:wrap}.choice{border:solid 1px rgba(var(--text-color), 0.2)}.choice:last-of-type{margin-bottom:0}.status{font-size:.8rem}.status.closed{background:rgba(var(--foreground-color), 1);border:solid 1px rgba(var(--text-color), 0.2)}.address,.token,.hash,.contract,.block-height{cursor:pointer;color:var(--accent-color)}.address{text-transform:none !important;word-break:break-all}.contract-choice{display:grid;gap:.5rem 1rem;margin-bottom:2rem}.contract-choice:last-of-type{margin-bottom:0}.transaction{display:grid;gap:1.5rem;padding:max(1rem,2vw);border-radius:.5rem;background-color:rgba(var(--foreground-color), 0.8);content-visibility:auto}.transaction .contract-info{align-items:flex-start;display:grid;gap:1.5rem}.transaction>.icon:first-of-type{fill:none;stroke:rgba(var(--text-color), 0.8);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;overflow:visible;height:2.5rem;width:2.5rem;padding:.7rem;border-radius:1rem;background:rgba(var(--text-color), 0.1)}#loading{position:fixed;display:grid;top:0;left:0;bottom:0;right:0;place-content:center;justify-items:center;background:rgba(var(--foreground-color), 1);z-index:10}#loading h4{margin-top:1.5rem;font-weight:500}#all_blocks_page,#top_blocks_container{display:grid;grid-template-columns:repeat(auto-fit, minmax(20rem, 1fr));gap:1rem;margin-top:1rem}.block-card{grid-template-columns:5rem 1fr auto;gap:1rem;background-color:rgba(var(--foreground-color), 1);padding:1rem;border-radius:.5rem}.block-card time{font-size:.8rem;color:rgba(var(--text-color), 0.8)}#token_balance_container{display:grid;gap:.5rem;margin-top:1.5rem}#token_balance_container .holder-balance{padding:1rem;border-radius:.5rem;background:rgba(var(--foreground-color), 1)}#error_page{padding:1.5rem 0}.view-wrapper{display:grid;align-items:flex-start}.view-wrapper>*{grid-area:1/1}@media only screen and (min-width: 640px){.margin,.page{margin:0 4vw}section header h1{font-size:2rem}#main_header{grid-template-areas:"logo theme"}#search_wrapper{grid-area:1/1/2/-1;margin:0 auto;max-width:calc(100% - 16rem)}#page_header{padding:1.5rem 0}#transaction_page{display:grid;gap:0 1.5rem;grid-template-columns:40% 60%;grid-template-areas:"header header" ". ."}#transaction_page .head{grid-area:header}.transaction{grid-template-columns:auto 1fr}.transaction>.icon:first-of-type{grid-area:1/1/3/2}.contract-choice{grid-template-columns:2fr 1fr 1fr;align-items:center}}@media only screen and (min-width: 1280px){.margin,.page{margin:0 10vw}}@media(hover: hover){button{transition:background-color .3s}button:hover{background:var(--accent-color);color:rgba(var(--foreground-color), 1)}.hover{cursor:pointer}} \ No newline at end of file diff --git a/css/main.scss b/css/main.scss index 894d829..5c69a66 100644 --- a/css/main.scss +++ b/css/main.scss @@ -1,148 +1,580 @@ -@import url("https://fonts.googleapis.com/css2?family=Barlow:wght@500;600;700&family=Roboto:wght@400;500;700&display=swap"); -*, -::before, -::after { +* { padding: 0; margin: 0; box-sizing: border-box; - font-family: "Roboto", sans-serif; + font-family: "Inter", sans-serif; } + +:root { + font-size: clamp(1rem, 1.2vmax, 1.2rem); +} + +html, body { - --primary-color: #1565c0; - --text: 17, 17, 17; - --text-light: 100, 100, 100; - --foreground: 255, 255, 255; - --background: #e8e8e8; - --dark-shade: #dadada; - font-size: 16px; - color: rgba(var(--text), 1); - background: rgba(var(--foreground), 1); - background-size: cover; + height: 100%; } + +body { + --accent-color: #3d5afe; + --secondary-color: #ffac2e; + --text-color: 34, 34, 34; + --foreground-color: 252, 253, 255; + --background-color: 241, 243, 248; + --danger-color: rgb(255, 75, 75); + --green: #1cad59; + --yellow: rgb(220, 165, 0); + color: rgba(var(--text-color), 1); + background-color: rgba(var(--background-color), 1); +} + body[data-theme="dark"] { - --primary-color: #2196f3; - --text: 218, 218, 218; - --text-light: 170, 170, 170; - --foreground: 20, 20, 20; - --background: #0a0a0a; - --dark-shade: #1a1a1a; + --accent-color: #92a2ff; + --secondary-color: #d60739; + --text-color: 200, 200, 200; + --foreground-color: 27, 28, 29; + --background-color: 21, 22, 22; + --danger-color: rgb(255, 106, 106); + --green: #00e676; + --yellow: rgb(255, 213, 5); + ::-webkit-calendar-picker-indicator { + filter: invert(1); + } } -input[type="text"]::-ms-clear { - display: none; - width: 0; - height: 0; +h1, +h2, +h3, +h4, +h5, +h6 { + letter-spacing: -0.01em; + font-weight: 700; + // font-family: "Rubik", sans-serif; } -input[type="text"]::-ms-reveal { - display: none; - width: 0; - height: 0; +p, +strong { + line-height: 1.7; + color: rgba(var(--text-color), 0.9); + max-width: 70ch; } -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-results-button, -input[type="search"]::-webkit-search-results-decoration { - display: none; + +img { + object-fit: cover; } -input[type="number"] { - -moz-appearance: textfield; + +a:where([class]) { + color: inherit; + text-decoration: none; + + &:focus-visible { + box-shadow: 0 0 0 0.1rem rgba(var(--text-color), 1) inset; + } } -input:invalid { - outline: none; - box-shadow: none; +a { + color: var(--accent-color); } -::-moz-focus-inner { + +a:any-link:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; +} + +button, +.button { + user-select: none; + position: relative; + display: inline-flex; border: none; + background-color: transparent; + overflow: hidden; + color: inherit; + -webkit-tap-highlight-color: transparent; + align-items: center; + font-size: inherit; + font-weight: 500; + white-space: nowrap; + padding: 0.8rem; + border-radius: 0.3rem; + justify-content: center; + flex-shrink: 0; + &:focus-visible { + outline: var(--accent-color) solid medium; + } + + &:not(:disabled) { + cursor: pointer; + } } -button { - border: none; - border-radius: 0.2em; + +.button { + background-color: rgba(var(--text-color), 0.02); + border: solid thin rgba(var(--text-color), 0.06); + &--primary { + color: rgba(var(--background-color), 1); + background-color: var(--accent-color); + + .icon { + fill: rgba(var(--background-color), 1); + } + } + &--colored { + color: var(--accent-color); + .icon { + fill: var(--accent-color); + } + } + &--danger { + background-color: #ff737310; + color: var(--danger-color); + .icon { + fill: var(--danger-color); + } + } + + &--small { + padding: 0.4rem 0.6rem; + } + + &--outlined { + border: solid rgba(var(--text-color), 0.3) 0.1rem; + background-color: rgba(var(--foreground-color), 1); + } + &--transparent { + background-color: transparent; + } +} +button:disabled { + opacity: 0.4; + cursor: not-allowed; + filter: saturate(0); +} + +.cta { text-transform: uppercase; - font-weight: 500; - letter-spacing: 0.06em; - background: none; + font-size: 0.8rem; + font-weight: 700; + letter-spacing: 0.05em; + padding: 0.8rem 1rem; +} + +.icon { + width: 1.2rem; + height: 1.2rem; + fill: rgba(var(--text-color), 0.8); + flex-shrink: 0; +} + +.icon-only { + padding: 0.5rem; + border-radius: 0.3rem; + aspect-ratio: 1/1; +} + +a:any-link:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; +} + +details summary { + display: flex; + user-select: none; cursor: pointer; - padding: 0.6rem 1rem; - color: var(--primary-color); - align-self: center; + align-items: center; + justify-content: space-between; + color: var(--accent-color); } -h1 { - font-size: 4rem; + +details[open] { + & summary { + margin-bottom: 1rem; + } + + & > summary .down-arrow { + transform: rotate(180deg); + } } -h2 { - font-size: 2rem; + +sm-input { + --border-radius: 0.5rem; + --background-color: rgba(var(--foreground-color), 1); +} + +sm-spinner { + --size: 1.5rem; + --stroke-width: 0.1rem; +} + +sm-chips { + --gap: 0.3rem; +} + +sm-chip { + position: relative; + font-size: 0.9rem; + --border-radius: 0.5rem; + --padding: 0.5rem 0.8rem; + --background: rgba(var(--text-color), 0.06); + user-select: none; font-weight: 500; + &[selected] { + --background: var(--accent-color); + color: rgba(var(--background-color), 1); + } } -h3 { - font-size: 1.5rem; + +ul { + list-style: none; } + +.overflow-ellipsis { + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.wrap-around { + overflow-wrap: break-word; + word-wrap: break-word; + word-break: break-word; +} + +.full-bleed { + grid-column: 1/-1; +} + +.uppercase { + text-transform: uppercase; +} + +.capitalize { + text-transform: capitalize; +} + +.sticky { + position: sticky; +} + +.top-0 { + top: 0; +} + .flex { display: flex; } + +.flex-wrap { + flex-wrap: wrap; +} + +.flex-1 { + flex: 1; +} +.flex-shrink-0 { + flex-shrink: 0; +} + .grid { display: grid; } -.grid-2 { - grid-template-columns: auto auto; - gap: 1em; + +.flow-column { + grid-auto-flow: column; } -.hide { - opacity: 0; - pointer-events: none; + +.gap-0-3 { + gap: 0.3rem; } -.hide-completely { + +.gap-0-5 { + gap: 0.5rem; +} + +.gap-1 { + gap: 1rem; +} + +.gap-1-5 { + gap: 1.5rem; +} + +.gap-2 { + gap: 2rem; +} + +.gap-3 { + gap: 3rem; +} + +.text-align-right { + text-align: right; +} +.text-align-left { + text-align: left; +} + +.align-items-start { + align-items: flex-start; +} +.align-items-center { + align-items: center; +} +.align-content-start { + align-content: flex-start; +} + +.align-start { + align-content: flex-start; +} + +.align-center { + align-items: center; +} + +.align-end { + align-items: flex-end; +} + +.text-center { + text-align: center; +} + +.justify-start { + justify-items: start; +} +.justify-content-start { + justify-content: start; +} + +.justify-content-center { + justify-content: center; +} + +.justify-right { + margin-left: auto; +} + +.align-self-center { + align-self: center; +} + +.align-self-end { + align-self: end; +} + +.justify-self-center { + justify-self: center; +} + +.justify-self-start { + justify-self: start; +} + +.justify-self-end { + justify-self: end; +} + +.flex-direction-column { + flex-direction: column; +} + +.space-between { + justify-content: space-between; +} +.space-evenly { + justify-content: space-evenly; +} + +.w-100 { + width: 100%; +} + +.h-100 { + height: 100%; +} + +.padding-block-1 { + padding-block: 1rem; +} + +.margin-right-0-3 { + margin-right: 0.3rem; +} +.margin-right-0-5 { + margin-right: 0.5rem; +} +.margin-right-1 { + margin-right: 1rem; +} + +.margin-left-0-5 { + margin-left: 0.5rem; +} + +.margin-left-auto { + margin-left: auto; +} +.margin-right-auto { + margin-right: auto; +} +.margin-top-1 { + margin-top: 1rem; +} +.margin-bottom-0-5 { + margin-bottom: 0.5rem; +} +.margin-bottom-1 { + margin-bottom: 1rem; +} +.margin-bottom-2 { + margin-bottom: 2rem; +} + +.margin-block-0-5 { + margin-block: 0.5rem; +} +.margin-block-1 { + margin-block: 1rem; +} + +.margin-block-1-5 { + margin-block: 1.5rem; +} + +.margin-inline-1 { + margin-inline: 1rem; +} + +.margin-inline-1-5 { + margin-inline: 1.5rem; +} + +.hidden { display: none !important; } -.breakable { - word-break: break-word; + +.h1 { + font-size: 2.5rem; +} + +.h2 { + font-size: 2rem; +} + +.h3 { + font-size: 1.4rem; +} + +.h4 { + font-size: 1rem; +} + +.h5 { + font-size: 0.8rem; +} + +.grid-3 { + grid-template-columns: 1fr auto auto; +} + +.flow-column { + grid-auto-flow: column; +} +.w-100 { + width: 100%; +} + +.color-0-8 { + color: rgba(var(--text-color), 0.8); +} + +.weight-400 { + font-weight: 400; +} + +.weight-500 { font-weight: 500; - letter-spacing: 0.06rem; } -.other-font { - font-family: "Barlow", sans-serif; +.ws-pre-line { + white-space: pre-line; } -.uppercase { - text-transform: uppercase !important; + +.card { + background-color: rgba(var(--foreground-color), 1); + border-radius: 0.5rem; + padding: max(1rem, 3vw); } -.capitalise { - text-transform: capitalize !important; + +.ripple { + height: 8rem; + width: 8rem; + position: absolute; + border-radius: 50%; + transform: scale(0); + background: radial-gradient( + circle, + rgba(var(--text-color), 0.3) 0%, + rgba(0, 0, 0, 0) 50% + ); + pointer-events: none; } -.toggle { +.interactive { position: relative; + overflow: hidden; cursor: pointer; - z-index: 1; - input[type="checkbox"] { - display: none; + -webkit-tap-highlight-color: transparent; +} + +.observe-empty-state:empty { + display: none; +} + +.observe-empty-state:not(:empty) ~ .empty-state { + display: none; +} +.multi-state-button { + display: grid; + text-align: center; + align-items: center; + justify-items: center; + & > * { + grid-area: 1/1/2/2; } - .switch { - overflow: hidden; - display: inline-flex; - flex-direction: column; - justify-items: center; - padding: 0.2rem; - min-height: 1.6rem; - max-height: 1.6rem; - border-radius: 0.5rem; - position: relative; + button { + z-index: 1; } - .circle { - border-radius: 0.5rem; - transition: transform 0.3s; - &:first-of-type { - margin-bottom: 0.4rem; - } - fill: rgba(var(--text), 0.8); - overflow: visible; - stroke-linecap: round; - stroke-linejoin: round; - height: 1.2rem; - width: 1.2rem; - line { - stroke: rgba(var(--text), 0.8); - stroke-width: 6; - } +} + +#confirmation_popup, +#prompt_popup { + flex-direction: column; + h4 { + font-size: 1.2rem; + margin-bottom: 1rem; } - input:checked ~ .switch .circle { - transform: translateY(-1.7rem); + + .flex { + margin-top: 1rem; + } +} + +.popup__header { + position: relative; + display: grid; + gap: 0.5rem; + width: 100%; + padding: 0 1.5rem; + align-items: center; + & > * { + grid-row: 1; + } + h3, + h4 { + grid-column: 1/-1; + justify-self: center; + align-self: center; + } + &__close { + grid-column: 1; + margin-left: -1rem; + justify-self: flex-start; } } section { @@ -165,12 +597,6 @@ ul { } & { list-style: none; - .balance { - margin-bottom: 2rem; - &:last-of-type { - margin-bottom: 0; - } - } } } .top-bottom-padding { @@ -178,20 +604,19 @@ ul { } .margin, .page { - margin: 0 1.5rem; + margin: 0 1rem; } -.margin-left-auto { - margin-left: auto; +.page { + display: flex; + flex-direction: column; } .card { padding: 2rem 1.5rem; border-radius: 0.5rem; - background: rgba(var(--text), 0.06); + background: rgba(var(--text-color), 0.06); margin: 1.5rem 0; h4 { margin-bottom: 0.4rem; - font-weight: 400; - text-transform: capitalize; } h2 { margin-bottom: 1.5rem; @@ -200,191 +625,35 @@ ul { .transaction-container { display: grid; margin-top: 1.5rem; - gap: 1.5rem; - grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + gap: 0.5rem; } .label { text-transform: capitalize; font-size: 0.8rem; margin-bottom: 0.3rem; - line-height: 1.4em; - color: rgba(var(--text-light), 1); + color: rgba(var(--text-color), 0.8); margin-top: 1.5rem; - font-weight: 400; + font-weight: 500; &:first-of-type { margin-top: 0; } - & + h4:not(.address) { - text-transform: capitalize; + & + * { + font-weight: 700; } } .header { justify-items: center; flex-direction: column; } -#logo { - display: inline-flex; - letter-spacing: 0.1em; - align-items: center; - cursor: pointer; - h4 { - font-weight: 400; - } - #main_logo { - height: 1.2rem; - width: 1.2rem; - margin-right: 0.2rem; - fill: rgba(var(--text), 1); - } -} #homepage { padding-top: 0; } #first_section { display: grid; - grid-template-rows: 1fr auto; - min-height: calc(100vh - 8rem); } header.grid-2 { margin-top: 2rem; } -#search_page { - position: fixed; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 20; - margin: 0; - background: rgba(var(--foreground), 1); - padding: 1.5rem 8vw; - header { - align-items: center; - justify-content: space-between; - margin-top: 2rem; - .icon { - margin: 0; - cursor: pointer; - height: 2.2rem; - width: 2.2rem; - padding: 0.6rem; - } - } - h1 { - font-weight: 500; - font-size: 3rem; - } - .input { - animation: fade 0.4s; - input:valid ~ #suggestions { - opacity: 1; - pointer-events: all; - transform: none; - } - } - #suggestions { - opacity: 0; - pointer-events: none; - transform: translateY(-0.5rem); - transition: transform 0.3s, opacity 0.3s; - position: absolute; - top: 100%; - width: 100%; - background: var(--background); - border-radius: 0.5rem; - padding: 0.5rem 0; - max-height: 30vh; - overflow-y: auto; - &:empty { - padding: 0; - } - margin-top: 0.5rem; - } - .suggestion { - padding: 0.6rem 1.5rem 0.6rem 3rem; - opacity: 0.8; - cursor: pointer; - &:hover, - &:focus { - opacity: 1; - } - } -} -#main_search { - position: relative; - display: flex; - flex-direction: column; - h2 { - margin-top: 2rem; - align-self: flex-start; - font-size: 4rem; - letter-spacing: 0.1em; - font-weight: 600; - } - h4 { - line-height: 1.4em; - margin-top: 2rem; - font-weight: 400; - color: rgba(var(--text-light), 1); - } - label { - position: relative; - } -} -.input { - border-radius: 0.2rem; - position: relative; - display: grid; - grid-template-columns: auto 1fr; - z-index: 1; - width: 100%; - margin: 1.5rem 0; - align-items: center; - padding: 0.8rem; - gap: 1em; - background: var(--background); - input { - border: none; - width: 100%; - background: transparent; - outline: none; - font-size: 1rem; - color: rgba(var(--text), 1); - } -} -.icon { - height: 1rem; - overflow: visible; - width: 1rem; - fill: none; - stroke: rgba(var(--text), 1); - stroke-linecap: round; - stroke-linejoin: round; - stroke-width: 6; -} -.copy-row { - display: grid; - grid-template-columns: 1fr auto; - align-items: center; - gap: 0.5rem; - .icon { - cursor: pointer; - } -} -#textCopied { - padding: 1rem; - border-radius: 2rem; - background: rgba(var(--text), 0.2); - color: rgba(var(--text), 1); - position: fixed; - bottom: 0; - pointer-events: none; - margin: 2rem 0; - left: 50%; - transform: translateX(-50%); - transition: 0.3s opacity ease; - z-index: 20; -} @keyframes flyInLeft { from { opacity: 0; @@ -405,53 +674,17 @@ header.grid-2 { transform: none; } } -@keyframes flyOutLeft { - from { - opacity: 1; - transform: none; - } - to { - opacity: 0; - transform: translateX(-0.5rem); - } -} -@keyframes flyOutRight { - from { - opacity: 1; - transform: none; - } - to { - opacity: 0; - transform: translateX(0.5rem); - } -} -.fly-in-from-left { - animation: flyInLeft 0.2s forwards; -} -.fly-in-from-right { - animation: flyInRight 0.2s forwards; -} -.fly-out-to-left { - animation: flyOutLeft 0.2s forwards; -} -.fly-out-to-right { - animation: flyOutRight 0.2s forwards; -} #highlights { padding: 1.5rem 0; display: grid; - grid-template-columns: 1fr 1fr; - grid-template-areas: - "token token" - "total wallet" - "contract contract"; + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); gap: 1.5rem; .highlight-item { opacity: 0; display: flex; flex-direction: column; - padding: 1.5rem; - border-left: 0.1rem solid rgba(var(--text), 0.2); + padding: 1rem 1.5rem; + border-left: 0.1rem solid rgba(var(--text-color), 0.2); .label { margin-top: auto; } @@ -468,38 +701,80 @@ header.grid-2 { &:nth-of-type(2) { text-transform: capitalize; } + --animation-duration: 0.3s; &:first-of-type { - grid-area: token; - animation: flyInLeft 0.4s 0.2s forwards; + animation: flyInLeft var(--animation-duration) forwards; } &:nth-of-type(2) { - grid-area: total; - animation: flyInLeft 0.4s 0.4s forwards; + animation: flyInLeft var(--animation-duration) 0.1s forwards; } &:nth-of-type(3) { - grid-area: wallet; - animation: flyInLeft 0.4s 0.6s forwards; + animation: flyInLeft var(--animation-duration) 0.2s forwards; } &:last-of-type { - grid-area: contract; - animation: flyInLeft 0.4s 0.8s forwards; + animation: flyInLeft var(--animation-duration) 0.3s forwards; } } } -#latest_transaction_section, -#latest_blocks_section { - background: rgba(var(--foreground), 1); - header { - grid-template-columns: 1fr auto; - background: inherit; - z-index: 2; - } -} #main_header { - & > .flex:first-of-type { - margin-top: 1.5rem; + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-areas: + "logo theme" + "search search"; + margin-top: 1rem; + gap: 1rem; +} +#logo { + grid-area: logo; + color: inherit; +} +theme-toggle { + grid-area: theme; + justify-self: end; + align-self: center; +} +#search_wrapper { + grid-area: search; + width: min(28rem, 100%); + position: relative; +} +#main_search_field { + width: 100%; + --min-height: 2.8rem; +} +#suggestions { + position: absolute; + top: 100%; + left: 0; + width: 100%; + background: rgba(var(--foreground-color), 1); + border-radius: 0.5rem; + z-index: 1; + overflow: hidden; + max-height: 0; + transition: max-height 0.2s ease-in-out; + &:not(:empty) { + max-height: 20rem; + overflow-y: auto; + } +} +.suggestion { + padding: 0.8rem 1rem; + display: flex; + align-items: center; + cursor: pointer; + &:hover, + &:active, + &:focus { + background: rgba(var(--text-color), 0.06); + outline: none; + } + .address { + font-size: 0.8rem; + color: rgba(var(--text-color), 0.6); + margin-left: auto; } - height: 8rem; } #page_header { padding: 1rem 0; @@ -508,21 +783,6 @@ header.grid-2 { font-weight: 500; text-transform: capitalize; } - .icon { - height: 1.8rem; - width: 1.8rem; - cursor: pointer; - } - .icon:first-of-type { - margin-right: 1rem; - padding: 0.4rem 0.4rem 0.4rem 0; - } - .icon:nth-of-type(2) { - padding: 0.4rem 0 0.4rem 0.4rem; - } - #secondary_search_btn { - margin-left: auto; - } } .page { padding: 0 0 1rem 0; @@ -540,12 +800,8 @@ p { text-transform: capitalize; } .balance-card { - display: inline-grid; - grid-template-columns: auto auto; - grid-template-areas: - "labl logo" - "balance logo" - "address address"; + display: flex; + flex-direction: column; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40' style='fill:none; stroke: %23ffffff08'%3E%3Ccircle cx='3.5' cy='3.5' r='2.12'/%3E%3Ccircle cx='5' cy='10' r='1'/%3E%3Ccircle cx='8.5' cy='4.5' r='1.5'/%3E%3Ccircle cx='6' cy='33' r='2'/%3E%3Ccircle cx='14' cy='29' r='1'/%3E%3Ccircle cx='9.5' cy='22.5' r='1.5'/%3E%3Ccircle cx='29.5' cy='17.5' r='4.5'/%3E%3Ccircle cx='22' cy='8' r='1'/%3E%3Ccircle cx='15.5' cy='12.5' r='2.5'/%3E%3Ccircle cx='27.5' cy='30.5' r='0.5'/%3E%3Ccircle cx='18.5' cy='35.5' r='2.5'/%3E%3Ccircle cx='32' cy='36' r='1'/%3E%3Ccircle cx='35' cy='25' r='1'/%3E%3Ccircle cx='23' cy='21' r='2'/%3E%3Ccircle cx='36.5' cy='1.5' r='0.5'/%3E%3Ccircle cx='30.5' cy='3.5' r='1.5'/%3E%3Ccircle cx='34.5' cy='6.5' r='1.5'/%3E%3C/svg%3E"), linear-gradient(135deg, rgb(77, 32, 167), rgb(33, 16, 110)); background-size: cover; @@ -553,36 +809,16 @@ p { border-radius: 0.5rem; padding: 2rem 1.5rem; margin-bottom: 1rem; - .flo-logo { - grid-area: logo; - fill: white; - height: 1.5rem; - width: 1.5rem; - opacity: 0.8; - justify-self: flex-end; - } + h2, h3, - h4 { - display: inline-block; - width: auto; + h4, + h5 { + opacity: 0.8; } h3 { - grid-area: balance; - font-weight: 400; - opacity: 0.8; - } - h4 { - font-weight: 400; - } - p { - font-size: 0.8rem; - grid-area: address; - opacity: 0.8; - letter-spacing: 0.1em; - margin-top: 3rem; + font-size: 1.5rem; } .label { - grid-area: labl; color: white; opacity: 0.7; } @@ -601,7 +837,7 @@ p { flex-wrap: wrap; } .choice { - border: solid 1px rgba(var(--text), 0.2); + border: solid 1px rgba(var(--text-color), 0.2); &:last-of-type { margin-bottom: 0; } @@ -609,8 +845,8 @@ p { .status { font-size: 0.8rem; &.closed { - background: rgba(var(--foreground), 1); - border: solid 1px rgba(var(--text), 0.2); + background: rgba(var(--foreground-color), 1); + border: solid 1px rgba(var(--text-color), 0.2); } } .address, @@ -619,43 +855,12 @@ p { .contract, .block-height { cursor: pointer; - color: var(--primary-color); + color: var(--accent-color); } .address { text-transform: none !important; word-break: break-all; } -.tabs { - position: sticky; - top: 0; - padding: 1rem 0 1rem 0; - background: rgba(var(--foreground), 1); - z-index: 2; - display: flex; - overflow-x: auto; - .tab { - cursor: pointer; - opacity: 0.6; - margin-right: 1.5rem; - -webkit-tap-highlight-color: transparent; - white-space: nowrap; - font-size: 1.1rem; - &:last-of-type { - margin-right: 0; - } - &.active { - opacity: 1; - } - } - .line { - position: absolute; - height: 0.12rem; - background: rgba(var(--text), 1); - width: 1px; - bottom: 0; - transition: transform 0.4s, width 0.4s; - } -} .contract-choice { display: grid; gap: 0.5rem 1rem; @@ -664,102 +869,91 @@ p { margin-bottom: 0; } } -@keyframes fade { - from { - opacity: 0; - transform: translateY(1rem); - } - to { - opacity: 1; - transform: none; - } -} .transaction { display: grid; - gap: 2rem 1rem; - padding: 2rem; + gap: 1.5rem; + padding: max(1rem, 2vw); border-radius: 0.5rem; - grid-template-columns: min-content 1fr; - grid-template-rows: auto 1fr; - background: rgba(var(--text), 0.06); - grid-template-areas: - ". ." - "info info"; + background-color: rgba(var(--foreground-color), 0.8); + content-visibility: auto; .contract-info { - grid-area: info; align-items: flex-start; - } - h4 { - font-weight: 500; + display: grid; + gap: 1.5rem; } & > .icon:first-of-type { + fill: none; + stroke: rgba(var(--text-color), 0.8); stroke-width: 4; - justify-self: center; - height: 3rem; - width: 3rem; - padding: 0.8rem; + stroke-linecap: round; + stroke-linejoin: round; + overflow: visible; + height: 2.5rem; + width: 2.5rem; + padding: 0.7rem; border-radius: 1rem; - background: rgba(var(--foreground), 1); + background: rgba(var(--text-color), 0.1); } } -#loader_page { - display: grid; - place-content: center; - height: 100vh; - width: 100vw; - text-align: center; +#loading { position: fixed; + display: grid; + top: 0; + left: 0; + bottom: 0; + right: 0; + place-content: center; + justify-items: center; + background: rgba(var(--foreground-color), 1); z-index: 10; - background: rgba(var(--foreground), 1); h4 { margin-top: 1.5rem; font-weight: 500; } } -#loader { - justify-self: center; - height: 2.5rem; - width: 2.5rem; - transform-origin: center; - stroke-dashoffset: 200; - stroke-dasharray: 200; - animation: load 2s infinite linear; - stroke: var(--primary-color); -} -@keyframes load { - 50% { - stroke-dashoffset: 0; - } - 100% { - stroke-dashoffset: -200; - transform: rotate(360deg); - } -} #all_blocks_page, -#top_blocks_container, +#top_blocks_container { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); + gap: 1rem; + margin-top: 1rem; +} +.block-card { + grid-template-columns: 5rem 1fr auto; + gap: 1rem; + background-color: rgba(var(--foreground-color), 1); + padding: 1rem; + border-radius: 0.5rem; + time { + font-size: 0.8rem; + color: rgba(var(--text-color), 0.8); + } +} #token_balance_container { display: grid; - gap: 1rem; - grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); - margin-top: 1rem; - .card { - margin: 0; - } -} -#token_balance_container { + gap: 0.5rem; margin-top: 1.5rem; + .holder-balance { + padding: 1rem; + border-radius: 0.5rem; + background: rgba(var(--foreground-color), 1); + } } #error_page { padding: 1.5rem 0; } +.view-wrapper { + display: grid; + align-items: flex-start; + & > * { + grid-area: 1/1; + } +} @media only screen and (min-width: 640px) { .margin, .page { margin: 0 4vw; } - .input { - width: 60% !important; - } section { header { h1 { @@ -767,33 +961,13 @@ p { } } } - #main_search { - h1 { - font-size: 6rem; - text-align: center; - } + #main_header { + grid-template-areas: "logo theme"; } - #highlights { - gap: 2rem; - grid-template-columns: repeat(2, auto); - grid-template-areas: "token total" " wallet contract"; - .highlight-item { - h1 { - font-size: 2.5rem; - } - &:first-of-type { - grid-area: token; - } - &:nth-of-type(2) { - grid-area: total; - } - &:nth-of-type(3) { - grid-area: wallet; - } - &:last-of-type { - grid-area: contract; - } - } + #search_wrapper { + grid-area: 1/1/2/-1; + margin: 0 auto; + max-width: calc(100% - 16rem); } #page_header { padding: 1.5rem 0; @@ -809,6 +983,12 @@ p { grid-area: header; } } + .transaction { + grid-template-columns: auto 1fr; + & > .icon:first-of-type { + grid-area: 1/1/3/2; + } + } .contract-choice { grid-template-columns: 2fr 1fr 1fr; align-items: center; @@ -817,83 +997,18 @@ p { @media only screen and (min-width: 1280px) { .margin, .page { - margin: 0 12vw; - } - .input { - width: 50% !important; - } - #highlights { - grid-template-columns: repeat(4, auto); - grid-template-areas: "token total wallet contract"; - .highlight-item { - &:first-of-type { - grid-area: token; - } - &:nth-of-type(2) { - grid-area: total; - } - &:nth-of-type(3) { - grid-area: wallet; - } - &:last-of-type { - grid-area: contract; - } - } - } -} -@media only screen and (min-width: 1920px) { - body { - font-size: 24px; - } - .margin, - .page { - margin: 0 16vw; - } - #search_page { - padding: 1.5rem 12vw; - } - .input { - width: 40% !important; - } -} -@media only screen and (min-width: 2048px) { - body { - font-size: 24px; - } - .margin, - .page { - margin: 0 26vw; - } - #search_page { - padding: 1.5rem 24vw; - } - #first_section { - min-height: auto; - } - .input { - width: 30% !important; - } -} -@media only screen and (max-width: 320px) { - body { - font-size: 14px; + margin: 0 10vw; } } @media (hover: hover) { button { transition: background-color 0.3s; &:hover { - background: var(--primary-color); - color: rgba(var(--foreground), 1); + background: var(--accent-color); + color: rgba(var(--foreground-color), 1); } } .hover { cursor: pointer; } - .tab { - transition: opacity 0.3s; - &:hover { - opacity: 1; - } - } } diff --git a/index.html b/index.html index 33c6e39..3aff1dd 100644 --- a/index.html +++ b/index.html @@ -6,313 +6,702 @@ FLO Scout + + + + + - -
- Copied -
-
- - Loading - - + + +
+

Loading

-
-
-

Search

- - close - - +
+
-
    - -
    -
    -
    - - +
    -
    -
    + +
    + + @@ -1863,1024 +1544,16 @@