diff --git a/public/components.js b/public/components.js index 03baa75..c749aae 100644 --- a/public/components.js +++ b/public/components.js @@ -2247,8 +2247,9 @@ smSelect.innerHTML = ` -webkit-tap-highlight-color: transparent; } .icon { - height: 1.5rem; - width: 1.5rem; + height: 1.2rem; + width: 1.2rem; + margin-left: 0.5rem; fill: rgba(var(--text-color), 0.7); } .selected-option-text{ @@ -2265,7 +2266,7 @@ smSelect.innerHTML = ` -ms-grid-columns: 1fr auto; grid-template-columns: 1fr auto; grid-template-areas: 'heading heading' '. .'; - padding: 0.4rem 1rem; + padding: 0.4rem 0.8rem; background: rgba(var(--text-color), 0.06); border: solid 1px rgba(var(--text-color), 0.2); -webkit-box-align: center; @@ -2277,9 +2278,6 @@ smSelect.innerHTML = ` -webkit-box-shadow: 0 0 0 0.1rem var(--accent-color); box-shadow: 0 0 0 0.1rem var(--accent-color) } -.icon{ - margin-left: 1rem; -} :host([align-select="left"]) .options{ left: 0; } @@ -2558,12 +2556,13 @@ smOption.innerHTML = ` -webkit-box-align: center; -ms-flex-align: center; align-items: center; - min-width: 100%; + min-width: max-content; + width: 100%; gap: 0.5rem; grid-template-columns: max-content minmax(0, 1fr); padding: 0.8rem 1.2rem; cursor: pointer; - overflow-wrap: break-word; + white-space: nowrap; outline: none; user-select: none; } @@ -2609,3 +2608,584 @@ customElements.define('sm-option', class extends HTMLElement { this.setAttribute('tabindex', '0') } }) + +const smCheckbox = document.createElement('template') +smCheckbox.innerHTML = ` + +` +customElements.define('sm-checkbox', class extends HTMLElement { + constructor() { + super() + this.attachShadow({ + mode: 'open' + }).append(smCheckbox.content.cloneNode(true)) + + this.checkbox = this.shadowRoot.querySelector('.checkbox'); + + this.reset = this.reset.bind(this) + this.dispatch = this.dispatch.bind(this) + this.handleKeyDown = this.handleKeyDown.bind(this) + this.handleClick = this.handleClick.bind(this) + } + + static get observedAttributes() { + return ['value', 'disabled', 'checked'] + } + + get disabled() { + return this.hasAttribute('disabled') + } + + set disabled(val) { + if (val) { + this.setAttribute('disabled', '') + } else { + this.removeAttribute('disabled') + } + } + + get checked() { + return this.hasAttribute('checked') + } + + set checked(value) { + if (value) { + this.setAttribute('checked', '') + } + else { + this.removeAttribute('checked') + } + } + + set value(val) { + this.setAttribute('value', val) + } + + get value() { + return this.getAttribute('value') + } + + reset() { + this.removeAttribute('checked') + } + + dispatch() { + this.dispatchEvent(new CustomEvent('change', { + bubbles: true, + composed: true + })) + } + handleKeyDown(e) { + if (e.code === "Space") { + e.preventDefault() + this.click() + } + } + handleClick(e) { + this.toggleAttribute('checked') + } + + connectedCallback() { + if (!this.hasAttribute('disabled')) { + this.setAttribute('tabindex', '0') + } + this.setAttribute('role', 'checkbox') + if (!this.hasAttribute('checked')) { + this.setAttribute('aria-checked', 'false') + } + this.addEventListener('keydown', this.handleKeyDown) + this.addEventListener('click', this.handleClick) + } + attributeChangedCallback(name, oldValue, newValue) { + if (oldValue !== newValue) { + if (name === 'checked') { + this.setAttribute('aria-checked', this.hasAttribute('checked')) + this.dispatch() + } + else if (name === 'disabled') { + if (this.hasAttribute('disabled')) { + this.removeAttribute('tabindex') + } + else { + this.setAttribute('tabindex', '0') + } + } + } + } + disconnectedCallback() { + this.removeEventListener('keydown', this.handleKeyDown) + this.removeEventListener('change', this.handleClick) + } +}) +const smTabHeader = document.createElement('template') +smTabHeader.innerHTML = ` + +
+
+ +
+
+
+`; + +customElements.define('sm-tab-header', class extends HTMLElement { + constructor() { + super() + this.attachShadow({ + mode: 'open' + }).append(smTabHeader.content.cloneNode(true)) + + this.prevTab + this.allTabs + this.activeTab + + this.indicator = this.shadowRoot.querySelector('.indicator'); + this.tabSlot = this.shadowRoot.querySelector('slot'); + this.tabHeader = this.shadowRoot.querySelector('.tab-header'); + + this.changeTab = this.changeTab.bind(this) + this.handleClick = this.handleClick.bind(this) + this.handlePanelChange = this.handlePanelChange.bind(this) + this.moveIndiactor = this.moveIndiactor.bind(this) + } + + fireEvent(index) { + this.dispatchEvent( + new CustomEvent(`switchedtab${this.target}`, { + bubbles: true, + detail: { + index: parseInt(index) + } + }) + ) + } + + moveIndiactor(tabDimensions) { + this.indicator.setAttribute('style', `width: ${tabDimensions.width}px; transform: translateX(${tabDimensions.left - this.tabHeader.getBoundingClientRect().left + this.tabHeader.scrollLeft}px)`) + } + + + changeTab(target) { + if (target === this.prevTab || !target.closest('sm-tab')) + return + if (this.prevTab) + this.prevTab.classList.remove('active') + target.classList.add('active') + + this.tabHeader.scrollTo({ + behavior: 'smooth', + left: target.getBoundingClientRect().left - this.tabHeader.getBoundingClientRect().left + this.tabHeader.scrollLeft + }) + this.moveIndiactor(target.getBoundingClientRect()) + this.prevTab = target; + this.activeTab = target; + } + handleClick(e) { + if (e.target.closest('sm-tab')) { + this.changeTab(e.target) + this.fireEvent(e.target.dataset.index) + } + } + + handlePanelChange(e) { + this.changeTab(this.allTabs[e.detail.index]) + } + + connectedCallback() { + if (!this.hasAttribute('target') || this.getAttribute('target').value === '') return; + this.target = this.getAttribute('target') + + this.tabSlot.addEventListener('slotchange', () => { + this.allTabs = this.tabSlot.assignedElements(); + this.allTabs.forEach((tab, index) => { + tab.dataset.index = index + }) + }) + + this.addEventListener('click', this.handleClick) + document.addEventListener(`switchedpanel${this.target}`, this.handlePanelChange) + + let resizeObserver = new ResizeObserver(entries => { + entries.forEach((entry) => { + if (this.prevTab) { + let tabDimensions = this.activeTab.getBoundingClientRect(); + this.moveIndiactor(tabDimensions) + } + }) + }) + resizeObserver.observe(this) + let observer = new IntersectionObserver((entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + this.indicator.style.transition = 'none' + if (this.activeTab) { + let tabDimensions = this.activeTab.getBoundingClientRect(); + this.moveIndiactor(tabDimensions) + } else { + this.allTabs[0].classList.add('active') + let tabDimensions = this.allTabs[0].getBoundingClientRect(); + this.moveIndiactor(tabDimensions) + this.fireEvent(0) + this.prevTab = this.tabSlot.assignedElements()[0]; + this.activeTab = this.prevTab; + } + } + }) + }, { + threshold: 1.0 + }) + observer.observe(this) + } + disconnectedCallback() { + this.removeEventListener('click', this.handleClick) + document.removeEventListener(`switchedpanel${this.target}`, this.handlePanelChange) + } +}) + +// tab +const smTab = document.createElement('template') +smTab.innerHTML = ` + +
+ +
+`; + +customElements.define('sm-tab', class extends HTMLElement { + constructor() { + super() + this.shadow = this.attachShadow({ + mode: 'open' + }).append(smTab.content.cloneNode(true)) + } +}) + +// tab-panels + +const smTabPanels = document.createElement('template') +smTabPanels.innerHTML = ` + +
+ Nothing to see here. +
+`; + +customElements.define('sm-tab-panels', class extends HTMLElement { + constructor() { + super() + this.attachShadow({ + mode: 'open' + }).append(smTabPanels.content.cloneNode(true)) + + this.isTransitioning = false + + this.panelContainer = this.shadowRoot.querySelector('.panel-container'); + this.handleTabChange = this.handleTabChange.bind(this) + } + handleTabChange(e) { + this.isTransitioning = true + this.panelContainer.scrollTo({ + left: this.allPanels[e.detail.index].getBoundingClientRect().left - this.panelContainer.getBoundingClientRect().left + this.panelContainer.scrollLeft, + behavior: 'smooth' + }) + setTimeout(() => { + this.isTransitioning = false + }, 300); + } + fireEvent(index) { + this.dispatchEvent( + new CustomEvent(`switchedpanel${this.id}`, { + bubbles: true, + detail: { + index: parseInt(index) + } + }) + ) + } + connectedCallback() { + const slot = this.shadowRoot.querySelector('slot'); + slot.addEventListener('slotchange', (e) => { + this.allPanels = e.target.assignedElements() + this.allPanels.forEach((panel, index) => { + panel.dataset.index = index + intersectionObserver.observe(panel) + }) + }) + document.addEventListener(`switchedtab${this.id}`, this.handleTabChange) + + const intersectionObserver = new IntersectionObserver(entries => { + + entries.forEach(entry => { + if (!this.isTransitioning && entry.isIntersecting) { + this.fireEvent(entry.target.dataset.index) + } + }) + }, { + threshold: 0.6 + }) + } + disconnectedCallback() { + intersectionObserver.disconnect() + document.removeEventListener(`switchedtab${this.id}`, this.handleTabChange) + } +}) \ No newline at end of file diff --git a/public/css/main.css b/public/css/main.css index ae87c2c..11cd811 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -23,7 +23,7 @@ body { body, body * { --accent-color: #504dff; - --accent-color--light: #f4f4ff; + --accent-color--light: #eeeeff; --text-color: 36, 36, 36; --background-color: 255, 255, 255; --foreground-color: rgb(250, 252, 255); @@ -93,16 +93,19 @@ button, transition: transform 0.3s; transition: transform 0.3s, -webkit-transform 0.3s; -webkit-tap-highlight-color: transparent; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: 0.9rem; + font-weight: 500; } .button { white-space: nowrap; padding: 0.6rem 1rem; border-radius: 0.3rem; - font-weight: 500; - font-size: 0.8rem; - background-color: var(--accent-color--light); - color: var(--accent-color); + background-color: rgba(var(--text-color), 0.06); + color: rgba(var(--text-color), 0.8); -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; @@ -319,13 +322,7 @@ ul { justify-content: space-between; } -.stretch { - -webkit-box-pack: stretch; - -ms-flex-pack: stretch; - justify-content: stretch; - justify-items: stretch; -} -.stretch > * { +.w-100 { width: 100%; } @@ -484,9 +481,7 @@ strip-select { } strip-option { - text-transform: uppercase; font-weight: 500; - letter-spacing: 0.05em; font-size: 0.8rem; --border-radius: 0; --active-option-color: rgba(var(--background-color), 1); @@ -499,6 +494,11 @@ strip-option:last-of-type { --border-radius: 0 0.3rem 0.3rem 0; } +sm-select, +sm-option { + font-size: 0.9rem; +} + .warning { background-color: khaki; color: rgba(0, 0, 0, 0.7); @@ -519,15 +519,6 @@ strip-option:last-of-type { height: 100%; } -.table__row { - display: grid; - grid-template-columns: repeat(var(--table-columns), auto); -} -.table__header { - color: rgba(var(--text-color), 0.8); - font-size: 0.8rem; -} - #landing { grid-template-rows: auto 1fr; } @@ -632,7 +623,100 @@ strip-option:last-of-type { } #orders_section { - padding: 1.5rem; + padding: 1.5rem 0; +} +#orders_section .icon { + height: 1.2rem; + width: 1.2rem; +} + +#orders_section__header { + min-height: 2.8rem; + padding: 0 1.5rem; +} + +#orders_section__header--primary { + -ms-flex-wrap: wrap; + flex-wrap: wrap; + z-index: 1; +} +#orders_section__header--primary sm-tab-header { + --gap: 1.5rem; +} +#orders_section__header--primary sm-tab { + font-size: 0.9rem; + --padding: 0.8rem 0; +} + +.table { + display: grid; +} +.table__header { + color: rgba(var(--text-color), 0.8); + font-size: 0.8rem; +} +.table__row { + padding: 0.5rem 1.5rem; + display: grid; + grid-template-columns: -webkit-min-content repeat(3, 1fr) -webkit-min-content; + grid-template-columns: min-content repeat(3, 1fr) min-content; +} + +.order-card { + position: relative; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1.5rem 0.5rem 0.5rem; +} +.order-card[data-type=buy] .order-card__type, .order-card[data-type=sell] .order-card__type { + font-size: 0.9rem; + font-weight: 500; + margin-bottom: 0.3rem; +} +.order-card[data-type=buy] .order-card__type { + color: var(--green); +} +.order-card[data-type=sell] .order-card__type { + color: var(--danger-color); +} +.order-card--selected { + background-color: rgba(var(--text-color), 0.08); +} +.order-card--selected .cancel-order { + visibility: hidden; + pointer-events: none; +} +.order-card sm-checkbox { + --height: 1rem; + --width: 1rem; + padding: 1rem; + cursor: pointer; + -webkit-tap-highlight-color: transparent; +} +.order-card__quantity, .order-card__price { + font-size: 0.9rem; + color: rgba(var(--text-color), 0.9); +} +.order-card__time { + font-size: 0.8rem; + color: rgba(var(--text-color), 0.8); +} + +.cancel-order { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0.4rem 0.6rem; +} +.cancel-order span { + margin-left: 0.3rem; } #user_section { @@ -653,6 +737,12 @@ strip-option:last-of-type { flex: 1; } +.label { + font-size: 0.8rem; + color: rgba(var(--text-color), 0.8); + margin-bottom: 0.2rem; +} + .balance-card { display: grid; -webkit-box-align: center; @@ -666,10 +756,6 @@ strip-option:last-of-type { grid-template-columns: auto 1fr; gap: 1rem; } -.balance-card.is-locked .label { - font-size: 0.8rem; - color: rgba(var(--text-color), 0.8); -} .balance-card:not(.is-locked) { grid-template-columns: auto 1fr auto; } @@ -774,18 +860,12 @@ strip-option:last-of-type { .page-layout { grid-template-columns: 1fr 90vw 1fr; } -} -@media screen and (min-width: 64rem) { - .page-layout { - grid-template-columns: 1fr 80vw 1fr; - } #home { -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; - padding: 1.5vmax 3vmax; - grid-template-columns: 24rem minmax(0, 1fr) 20rem; + padding: 1.5vmax; gap: 1rem; } #home > * { @@ -798,6 +878,26 @@ strip-option:last-of-type { display: none; } } +@media screen and (min-width: 48rem) { + #home { + grid-template-rows: -webkit-min-content 1fr; + grid-template-rows: min-content 1fr; + grid-template-columns: 24rem minmax(0, 1fr); + } + + #orders_section { + grid-row: span 2; + } +} +@media screen and (min-width: 72rem) { + .page-layout { + grid-template-columns: 1fr 80vw 1fr; + } + + #home { + grid-template-columns: 24rem minmax(0, 1fr) 20rem; + } +} @media screen and (min-width: 120rem) { .page-layout { grid-template-columns: 1fr 70vw 1fr; @@ -817,15 +917,44 @@ strip-option:last-of-type { background: rgba(var(--text-color), 0.5); } - .nav-item, -.interact { + .interact { -webkit-transition: background-color 0.3s, -webkit-transform 0.3s; transition: background-color 0.3s, -webkit-transform 0.3s; transition: background-color 0.3s, transform 0.3s; transition: background-color 0.3s, transform 0.3s, -webkit-transform 0.3s; } - .nav-item:hover, -.interact:hover { + .interact:hover { background-color: var(--accent-color--light); } + + .order-card .cancel-order { + justify-self: flex-end; + overflow: hidden; + } + .order-card .cancel-order .icon, +.order-card .cancel-order span { + -webkit-transition: opacity 0.3s, -webkit-transform 0.3s; + transition: opacity 0.3s, -webkit-transform 0.3s; + transition: opacity 0.3s, transform 0.3s; + transition: opacity 0.3s, transform 0.3s, -webkit-transform 0.3s; + } + .order-card .cancel-order .icon { + opacity: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + .order-card .cancel-order span { + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; + } + .order-card:hover .cancel-order .icon, .order-card:focus-within .cancel-order .icon { + opacity: 1; + } + .order-card .cancel-order:hover .icon, +.order-card .cancel-order:hover span { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } } \ No newline at end of file diff --git a/public/css/main.min.css b/public/css/main.min.css index c14dcc3..376bef6 100644 --- a/public/css/main.min.css +++ b/public/css/main.min.css @@ -1 +1 @@ -*{padding:0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:"Roboto",sans-serif}:root{font-size:clamp(1rem, 1.2vmax, 1.2rem)}html,body{height:100%;scroll-behavior:smooth}body{color:rgba(var(--text-color), 1);background:rgba(var(--background-color), 1)}body,body *{--accent-color: #504dff;--accent-color--light: #f4f4ff;--text-color: 36, 36, 36;--background-color: 255, 255, 255;--foreground-color: rgb(250, 252, 255);--danger-color: rgb(255, 75, 75);--green: #1cad59;--yellow: #f3a600;--loan-color: rgb(255, 171, 93);scrollbar-width:thin}body[data-theme=dark],body[data-theme=dark] *{--accent-color: #a3a1ff;--accent-color--light: rgba(142, 140, 255, 0.06);--text-color: 230, 230, 230;--text-color-light: 170, 170, 170;--background-color: 10, 10, 10;--foreground-color: rgb(20, 20, 20);--danger-color: rgb(255, 106, 106);--green: #00e676;--yellow: #ffd13a;--loan-color: rgb(255, 232, 170)}p,strong{font-size:.9rem;max-width:70ch;line-height:1.7;color:rgba(var(--text-color), 0.8)}p:not(:last-of-type),strong:not(:last-of-type){margin-bottom:1.5rem}a:where([class]){color:inherit;text-decoration:none}a:where([class]):focus-visible{-webkit-box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset;box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset}a{color:var(--accent-color)}button,.button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;border:none;background-color:transparent;overflow:hidden;color:inherit;cursor:pointer;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;-webkit-tap-highlight-color:transparent}.button{white-space:nowrap;padding:.6rem 1rem;border-radius:.3rem;font-weight:500;font-size:.8rem;background-color:var(--accent-color--light);color:var(--accent-color);-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.button--primary{background-color:var(--accent-color);color:rgba(var(--background-color), 1)}button:disabled{opacity:.5}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}sm-input{--border-radius: 0.5rem;--background: var(--accent-color--light)}sm-button{--padding: 0.7rem 1rem}sm-button[variant=primary] .icon{fill:rgba(var(--background-color), 1)}sm-button[disabled] .icon{fill:rgba(var(--text-color), 0.6)}ul{list-style:none}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.hide{opacity:0;pointer-events:none}.hide-completely{display:none !important}.overflow-ellipsis{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.breakable{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.full-bleed{grid-column:1/4}.h1{font-size:1.5rem}.h2{font-size:1.2rem}.h3{font-size:1rem}.h4{font-size:.9rem}.h5{font-size:.8rem}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.grid-3{grid-template-columns:1fr auto auto}.flow-column{grid-auto-flow:column}.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}.align-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.align-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.text-center{text-align:center}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-right{margin-left:auto}.align-self-center{-ms-flex-item-align:center;align-self:center}.justify-self-center{justify-self:center}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.direction-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.stretch{-webkit-box-pack:stretch;-ms-flex-pack:stretch;justify-content:stretch;justify-items:stretch}.stretch>*{width:100%}.interact{position:relative;cursor:pointer;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;-webkit-tap-highlight-color:transparent}.observe-empty-state:empty{display:none}.observe-empty-state:not(:empty)~.empty-state{display:none}.icon{width:1.5rem;height:1.5rem;fill:rgba(var(--text-color), 0.8)}.button__icon{height:1.2rem;width:1.2rem}.button__icon--left{margin-right:.5rem}.button__icon--right{margin-left:.5rem}.icon-button{padding:.6rem;border-radius:.8rem;background-color:var(--accent-color--light);height:-webkit-max-content;height:-moz-max-content;height:max-content}.icon-button .icon{fill:var(--accent-color)}#confirmation_popup,#prompt_popup{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#confirmation_popup h4,#prompt_popup h4{font-weight:500;margin-bottom:.5rem}#confirmation_popup sm-button,#prompt_popup sm-button{margin:0}#confirmation_popup .flex,#prompt_popup .flex{padding:0;margin-top:1rem}#confirmation_popup .flex sm-button:first-of-type,#prompt_popup .flex sm-button:first-of-type{margin-right:.6rem;margin-left:auto}button:active,.button:active,.interact:active{-webkit-transform:scale(0.96);transform:scale(0.96)}.popup__header{display:grid;gap:.5rem;width:100%;padding:0 1.5rem 0 .5rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-template-columns:auto 1fr auto}.popup__header__close{padding:.5rem;cursor:pointer}#main_page{padding:1.5rem}#main_page>section:nth-of-type(1){-ms-flex-line-pack:start;align-content:flex-start}.logo{display:grid;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;grid-template-columns:auto 1fr;gap:0 .3rem;margin-right:1rem}.logo h4{text-transform:capitalize;font-size:.9rem;font-weight:600}.logo .main-logo{height:1.4rem;width:1.4rem;fill:rgba(var(--text-color), 1);stroke:none}details summary{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}details[open]>summary{margin-bottom:1rem}details[open]>summary .icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}strip-select{--gap: 0;background-color:var(--accent-color--light);border-radius:.3rem}strip-option{text-transform:uppercase;font-weight:500;letter-spacing:.05em;font-size:.8rem;--border-radius: 0;--active-option-color: rgba(var(--background-color), 1);--active-option-background-color: var(--accent-color)}strip-option:first-of-type{--border-radius: 0.3rem 0 0 0.3rem}strip-option:last-of-type{--border-radius: 0 0.3rem 0.3rem 0}.warning{background-color:khaki;color:rgba(0,0,0,.7);padding:1rem;border-radius:.5rem;line-height:1.5}.page-layout{display:grid;grid-template-columns:1.5rem minmax(0, 1fr) 1.5rem}.page-layout>*{grid-column:2/3}.page{height:100%}.table__row{display:grid;grid-template-columns:repeat(var(--table-columns), auto)}.table__header{color:rgba(var(--text-color), 0.8);font-size:.8rem}#landing{grid-template-rows:auto 1fr}#landing header{padding:1.5rem 0}#landing>.grid{-ms-flex-line-pack:start;align-content:flex-start;text-align:center;gap:1rem}#sign_in,#sign_up{grid-template-rows:auto 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#sign_in section,#sign_up section{margin-top:-6rem;justify-self:center;width:min(24rem, 100%)}#sign_in sm-form,#sign_up sm-form{margin:2rem 0}#sign_in header,#sign_up header{padding:1.5rem 0}#sign_up sm-copy{font-size:.9rem;--button-border-radius: 0.5rem}#sign_up .h2{margin-bottom:.5rem}#sign_up .card{margin:1.5rem 0}#sign_up h5{font-weight:500;color:rgba(var(--text-color), 0.8)}#sign_up .warning{margin-top:2rem}#loading{place-content:center;text-align:center}#loading sm-spinner{margin-bottom:1.5rem}#home{height:100%;display:grid;grid-template-columns:minmax(0, 1fr)}#main_header{padding:1.8rem 1.5rem;display:grid;gap:1rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-template-columns:1fr auto}#trade_form{--width: min(24rem, 100%);-ms-flex-item-align:start;align-self:flex-start;padding:1rem 1.5rem}#quantity_selector .button{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:.5rem .6rem;margin-left:.5rem}#quantity_type{font-size:.8rem;padding-right:.5rem;border-right:thin solid rgba(var(--text-color), 0.3);margin-right:auto;color:rgba(var(--text-color), 0.8);line-height:1.5;font-weight:500;min-width:8ch}#orders_section{padding:1.5rem}#user_section{gap:1.5rem;padding:1.5rem;-ms-flex-line-pack:start;align-content:flex-start}.wallet_actions__wrapper{grid-column:span 3;gap:.5rem;margin-top:.5rem}.wallet_actions__wrapper .button{-webkit-box-flex:1;-ms-flex:1;flex:1}.balance-card{display:grid;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.3rem 1rem;padding:.5rem 0;border-radius:.5rem}.balance-card.is-locked{grid-template-columns:auto 1fr;gap:1rem}.balance-card.is-locked .label{font-size:.8rem;color:rgba(var(--text-color), 0.8)}.balance-card:not(.is-locked){grid-template-columns:auto 1fr auto}.balance-card__icon{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-line-pack:center;align-content:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:.6rem;border-radius:.8rem;background-color:var(--accent-color--light)}.balance-card__icon .icon{height:1.3rem;width:1.3rem;fill:var(--accent-color)}.balance-card__token{font-size:.9rem;font-weight:500}.balance-card__amount-wrapper{grid-column:span 2;gap:.3rem 1rem;grid-template-columns:1fr 1fr}.balance-card__amount-wrapper>:nth-child(even){text-align:right}.loader-button-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.loader-button-wrapper sm-button,.loader-button-wrapper slide-button{width:100%;z-index:1;-webkit-transition:-webkit-clip-path .3s;transition:-webkit-clip-path .3s;transition:clip-path .3s;transition:clip-path .3s, -webkit-clip-path .3s;-webkit-clip-path:circle(100%);clip-path:circle(100%)}.loader-button-wrapper sm-button.clip,.loader-button-wrapper slide-button.clip{pointer-events:none;-webkit-clip-path:circle(0);clip-path:circle(0)}.loader-button-wrapper sm-spinner{position:absolute}@media screen and (max-width: 40rem){sm-button{--padding: 0.9rem 1.6rem}}@media screen and (min-width: 40rem){sm-popup{--width: 24rem}.h1{font-size:2rem}.h2{font-size:1.8rem}.h3{font-size:1.3rem}.h4{font-size:1rem}.popup__header{padding:1rem 1.5rem 0 .5rem}#confirmation_popup{--width: 24rem}.page-layout{grid-template-columns:1fr 90vw 1fr}}@media screen and (min-width: 64rem){.page-layout{grid-template-columns:1fr 80vw 1fr}#home{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.5vmax 3vmax;grid-template-columns:24rem minmax(0, 1fr) 20rem;gap:1rem}#home>*{border-radius:.5rem;background-color:var(--foreground-color);border:solid thin rgba(var(--text-color), 0.1)}.hide-on-desktop{display:none}}@media screen and (min-width: 120rem){.page-layout{grid-template-columns:1fr 70vw 1fr}}@media(any-hover: hover){::-webkit-scrollbar{width:.5rem;height:.5rem}::-webkit-scrollbar-thumb{background:rgba(var(--text-color), 0.3);border-radius:1rem}::-webkit-scrollbar-thumb:hover{background:rgba(var(--text-color), 0.5)}.nav-item,.interact{-webkit-transition:background-color .3s,-webkit-transform .3s;transition:background-color .3s,-webkit-transform .3s;transition:background-color .3s,transform .3s;transition:background-color .3s,transform .3s,-webkit-transform .3s}.nav-item:hover,.interact:hover{background-color:var(--accent-color--light)}} \ No newline at end of file +*{padding:0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:"Roboto",sans-serif}:root{font-size:clamp(1rem, 1.2vmax, 1.2rem)}html,body{height:100%;scroll-behavior:smooth}body{color:rgba(var(--text-color), 1);background:rgba(var(--background-color), 1)}body,body *{--accent-color: #504dff;--accent-color--light: #eeeeff;--text-color: 36, 36, 36;--background-color: 255, 255, 255;--foreground-color: rgb(250, 252, 255);--danger-color: rgb(255, 75, 75);--green: #1cad59;--yellow: #f3a600;--loan-color: rgb(255, 171, 93);scrollbar-width:thin}body[data-theme=dark],body[data-theme=dark] *{--accent-color: #a3a1ff;--accent-color--light: rgba(142, 140, 255, 0.06);--text-color: 230, 230, 230;--text-color-light: 170, 170, 170;--background-color: 10, 10, 10;--foreground-color: rgb(20, 20, 20);--danger-color: rgb(255, 106, 106);--green: #00e676;--yellow: #ffd13a;--loan-color: rgb(255, 232, 170)}p,strong{font-size:.9rem;max-width:70ch;line-height:1.7;color:rgba(var(--text-color), 0.8)}p:not(:last-of-type),strong:not(:last-of-type){margin-bottom:1.5rem}a:where([class]){color:inherit;text-decoration:none}a:where([class]):focus-visible{-webkit-box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset;box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset}a{color:var(--accent-color)}button,.button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;border:none;background-color:transparent;overflow:hidden;color:inherit;cursor:pointer;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;-webkit-tap-highlight-color:transparent;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:.9rem;font-weight:500}.button{white-space:nowrap;padding:.6rem 1rem;border-radius:.3rem;background-color:rgba(var(--text-color), 0.06);color:rgba(var(--text-color), 0.8);-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.button--primary{background-color:var(--accent-color);color:rgba(var(--background-color), 1)}button:disabled{opacity:.5}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}sm-input{--border-radius: 0.5rem;--background: var(--accent-color--light)}sm-button{--padding: 0.7rem 1rem}sm-button[variant=primary] .icon{fill:rgba(var(--background-color), 1)}sm-button[disabled] .icon{fill:rgba(var(--text-color), 0.6)}ul{list-style:none}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.hide{opacity:0;pointer-events:none}.hide-completely{display:none !important}.overflow-ellipsis{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.breakable{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.full-bleed{grid-column:1/4}.h1{font-size:1.5rem}.h2{font-size:1.2rem}.h3{font-size:1rem}.h4{font-size:.9rem}.h5{font-size:.8rem}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.grid-3{grid-template-columns:1fr auto auto}.flow-column{grid-auto-flow:column}.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}.align-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.align-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.text-center{text-align:center}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-right{margin-left:auto}.align-self-center{-ms-flex-item-align:center;align-self:center}.justify-self-center{justify-self:center}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.direction-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.w-100{width:100%}.interact{position:relative;cursor:pointer;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;-webkit-tap-highlight-color:transparent}.observe-empty-state:empty{display:none}.observe-empty-state:not(:empty)~.empty-state{display:none}.icon{width:1.5rem;height:1.5rem;fill:rgba(var(--text-color), 0.8)}.button__icon{height:1.2rem;width:1.2rem}.button__icon--left{margin-right:.5rem}.button__icon--right{margin-left:.5rem}.icon-button{padding:.6rem;border-radius:.8rem;background-color:var(--accent-color--light);height:-webkit-max-content;height:-moz-max-content;height:max-content}.icon-button .icon{fill:var(--accent-color)}#confirmation_popup,#prompt_popup{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#confirmation_popup h4,#prompt_popup h4{font-weight:500;margin-bottom:.5rem}#confirmation_popup sm-button,#prompt_popup sm-button{margin:0}#confirmation_popup .flex,#prompt_popup .flex{padding:0;margin-top:1rem}#confirmation_popup .flex sm-button:first-of-type,#prompt_popup .flex sm-button:first-of-type{margin-right:.6rem;margin-left:auto}button:active,.button:active,.interact:active{-webkit-transform:scale(0.96);transform:scale(0.96)}.popup__header{display:grid;gap:.5rem;width:100%;padding:0 1.5rem 0 .5rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-template-columns:auto 1fr auto}.popup__header__close{padding:.5rem;cursor:pointer}#main_page{padding:1.5rem}#main_page>section:nth-of-type(1){-ms-flex-line-pack:start;align-content:flex-start}.logo{display:grid;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;grid-template-columns:auto 1fr;gap:0 .3rem;margin-right:1rem}.logo h4{text-transform:capitalize;font-size:.9rem;font-weight:600}.logo .main-logo{height:1.4rem;width:1.4rem;fill:rgba(var(--text-color), 1);stroke:none}details summary{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}details[open]>summary{margin-bottom:1rem}details[open]>summary .icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}strip-select{--gap: 0;background-color:var(--accent-color--light);border-radius:.3rem}strip-option{font-weight:500;font-size:.8rem;--border-radius: 0;--active-option-color: rgba(var(--background-color), 1);--active-option-background-color: var(--accent-color)}strip-option:first-of-type{--border-radius: 0.3rem 0 0 0.3rem}strip-option:last-of-type{--border-radius: 0 0.3rem 0.3rem 0}sm-select,sm-option{font-size:.9rem}.warning{background-color:khaki;color:rgba(0,0,0,.7);padding:1rem;border-radius:.5rem;line-height:1.5}.page-layout{display:grid;grid-template-columns:1.5rem minmax(0, 1fr) 1.5rem}.page-layout>*{grid-column:2/3}.page{height:100%}#landing{grid-template-rows:auto 1fr}#landing header{padding:1.5rem 0}#landing>.grid{-ms-flex-line-pack:start;align-content:flex-start;text-align:center;gap:1rem}#sign_in,#sign_up{grid-template-rows:auto 1fr;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#sign_in section,#sign_up section{margin-top:-6rem;justify-self:center;width:min(24rem, 100%)}#sign_in sm-form,#sign_up sm-form{margin:2rem 0}#sign_in header,#sign_up header{padding:1.5rem 0}#sign_up sm-copy{font-size:.9rem;--button-border-radius: 0.5rem}#sign_up .h2{margin-bottom:.5rem}#sign_up .card{margin:1.5rem 0}#sign_up h5{font-weight:500;color:rgba(var(--text-color), 0.8)}#sign_up .warning{margin-top:2rem}#loading{place-content:center;text-align:center}#loading sm-spinner{margin-bottom:1.5rem}#home{height:100%;display:grid;grid-template-columns:minmax(0, 1fr)}#main_header{padding:1.8rem 1.5rem;display:grid;gap:1rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-template-columns:1fr auto}#trade_form{--width: min(24rem, 100%);-ms-flex-item-align:start;align-self:flex-start;padding:1rem 1.5rem}#quantity_selector .button{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:.5rem .6rem;margin-left:.5rem}#quantity_type{font-size:.8rem;padding-right:.5rem;border-right:thin solid rgba(var(--text-color), 0.3);margin-right:auto;color:rgba(var(--text-color), 0.8);line-height:1.5;font-weight:500;min-width:8ch}#orders_section{padding:1.5rem 0}#orders_section .icon{height:1.2rem;width:1.2rem}#orders_section__header{min-height:2.8rem;padding:0 1.5rem}#orders_section__header--primary{-ms-flex-wrap:wrap;flex-wrap:wrap;z-index:1}#orders_section__header--primary sm-tab-header{--gap: 1.5rem}#orders_section__header--primary sm-tab{font-size:.9rem;--padding: 0.8rem 0}.table{display:grid}.table__header{color:rgba(var(--text-color), 0.8);font-size:.8rem}.table__row{padding:.5rem 1.5rem;display:grid;grid-template-columns:-webkit-min-content repeat(3, 1fr) -webkit-min-content;grid-template-columns:min-content repeat(3, 1fr) min-content}.order-card{position:relative;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.5rem;padding:.5rem 1.5rem .5rem .5rem}.order-card[data-type=buy] .order-card__type,.order-card[data-type=sell] .order-card__type{font-size:.9rem;font-weight:500;margin-bottom:.3rem}.order-card[data-type=buy] .order-card__type{color:var(--green)}.order-card[data-type=sell] .order-card__type{color:var(--danger-color)}.order-card--selected{background-color:rgba(var(--text-color), 0.08)}.order-card--selected .cancel-order{visibility:hidden;pointer-events:none}.order-card sm-checkbox{--height: 1rem;--width: 1rem;padding:1rem;cursor:pointer;-webkit-tap-highlight-color:transparent}.order-card__quantity,.order-card__price{font-size:.9rem;color:rgba(var(--text-color), 0.9)}.order-card__time{font-size:.8rem;color:rgba(var(--text-color), 0.8)}.cancel-order{-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.4rem .6rem}.cancel-order span{margin-left:.3rem}#user_section{gap:1.5rem;padding:1.5rem;-ms-flex-line-pack:start;align-content:flex-start}.wallet_actions__wrapper{grid-column:span 3;gap:.5rem;margin-top:.5rem}.wallet_actions__wrapper .button{-webkit-box-flex:1;-ms-flex:1;flex:1}.label{font-size:.8rem;color:rgba(var(--text-color), 0.8);margin-bottom:.2rem}.balance-card{display:grid;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.3rem 1rem;padding:.5rem 0;border-radius:.5rem}.balance-card.is-locked{grid-template-columns:auto 1fr;gap:1rem}.balance-card:not(.is-locked){grid-template-columns:auto 1fr auto}.balance-card__icon{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-line-pack:center;align-content:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:.6rem;border-radius:.8rem;background-color:var(--accent-color--light)}.balance-card__icon .icon{height:1.3rem;width:1.3rem;fill:var(--accent-color)}.balance-card__token{font-size:.9rem;font-weight:500}.balance-card__amount-wrapper{grid-column:span 2;gap:.3rem 1rem;grid-template-columns:1fr 1fr}.balance-card__amount-wrapper>:nth-child(even){text-align:right}.loader-button-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.loader-button-wrapper sm-button,.loader-button-wrapper slide-button{width:100%;z-index:1;-webkit-transition:-webkit-clip-path .3s;transition:-webkit-clip-path .3s;transition:clip-path .3s;transition:clip-path .3s, -webkit-clip-path .3s;-webkit-clip-path:circle(100%);clip-path:circle(100%)}.loader-button-wrapper sm-button.clip,.loader-button-wrapper slide-button.clip{pointer-events:none;-webkit-clip-path:circle(0);clip-path:circle(0)}.loader-button-wrapper sm-spinner{position:absolute}@media screen and (max-width: 40rem){sm-button{--padding: 0.9rem 1.6rem}}@media screen and (min-width: 40rem){sm-popup{--width: 24rem}.h1{font-size:2rem}.h2{font-size:1.8rem}.h3{font-size:1.3rem}.h4{font-size:1rem}.popup__header{padding:1rem 1.5rem 0 .5rem}#confirmation_popup{--width: 24rem}.page-layout{grid-template-columns:1fr 90vw 1fr}#home{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:1.5vmax;gap:1rem}#home>*{border-radius:.5rem;background-color:var(--foreground-color);border:solid thin rgba(var(--text-color), 0.1)}.hide-on-desktop{display:none}}@media screen and (min-width: 48rem){#home{grid-template-rows:-webkit-min-content 1fr;grid-template-rows:min-content 1fr;grid-template-columns:24rem minmax(0, 1fr)}#orders_section{grid-row:span 2}}@media screen and (min-width: 72rem){.page-layout{grid-template-columns:1fr 80vw 1fr}#home{grid-template-columns:24rem minmax(0, 1fr) 20rem}}@media screen and (min-width: 120rem){.page-layout{grid-template-columns:1fr 70vw 1fr}}@media(any-hover: hover){::-webkit-scrollbar{width:.5rem;height:.5rem}::-webkit-scrollbar-thumb{background:rgba(var(--text-color), 0.3);border-radius:1rem}::-webkit-scrollbar-thumb:hover{background:rgba(var(--text-color), 0.5)}.interact{-webkit-transition:background-color .3s,-webkit-transform .3s;transition:background-color .3s,-webkit-transform .3s;transition:background-color .3s,transform .3s;transition:background-color .3s,transform .3s,-webkit-transform .3s}.interact:hover{background-color:var(--accent-color--light)}.order-card .cancel-order{justify-self:flex-end;overflow:hidden}.order-card .cancel-order .icon,.order-card .cancel-order span{-webkit-transition:opacity .3s,-webkit-transform .3s;transition:opacity .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s;transition:opacity .3s,transform .3s,-webkit-transform .3s}.order-card .cancel-order .icon{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.order-card .cancel-order span{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.order-card:hover .cancel-order .icon,.order-card:focus-within .cancel-order .icon{opacity:1}.order-card .cancel-order:hover .icon,.order-card .cancel-order:hover span{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}} \ No newline at end of file diff --git a/public/css/main.scss b/public/css/main.scss index e1bcd63..422f81f 100644 --- a/public/css/main.scss +++ b/public/css/main.scss @@ -19,7 +19,7 @@ body { &, * { --accent-color: #504dff; - --accent-color--light: #f4f4ff; + --accent-color--light: #eeeeff; --text-color: 36, 36, 36; --background-color: 255, 255, 255; --foreground-color: rgb(250, 252, 255); @@ -87,15 +87,16 @@ button, cursor: pointer; transition: transform 0.3s; -webkit-tap-highlight-color: transparent; + align-items: center; + font-size: 0.9rem; + font-weight: 500; } .button { white-space: nowrap; padding: 0.6rem 1rem; border-radius: 0.3rem; - font-weight: 500; - font-size: 0.8rem; - background-color: var(--accent-color--light); - color: var(--accent-color); + background-color: rgba(var(--text-color), 0.06); + color: rgba(var(--text-color), 0.8); justify-content: center; &--primary { background-color: var(--accent-color); @@ -129,7 +130,6 @@ sm-button { } } } - ul { list-style: none; } @@ -289,13 +289,8 @@ ul { justify-content: space-between; } -.stretch { - justify-content: stretch; - justify-items: stretch; - - & > * { - width: 100%; - } +.w-100 { + width: 100%; } .interact { @@ -430,9 +425,7 @@ strip-select { border-radius: 0.3rem; } strip-option { - text-transform: uppercase; font-weight: 500; - letter-spacing: 0.05em; font-size: 0.8rem; --border-radius: 0; --active-option-color: rgba(var(--background-color), 1); @@ -444,6 +437,10 @@ strip-option { --border-radius: 0 0.3rem 0.3rem 0; } } +sm-select, +sm-option { + font-size: 0.9rem; +} .warning { background-color: khaki; color: rgba(0, 0, 0, 0.7); @@ -461,16 +458,6 @@ strip-option { .page { height: 100%; } -.table { - &__row { - display: grid; - grid-template-columns: repeat(var(--table-columns), auto); - } - &__header { - color: rgba(var(--text-color), 0.8); - font-size: 0.8rem; - } -} #landing { grid-template-rows: auto 1fr; header { @@ -562,8 +549,94 @@ strip-option { min-width: 8ch; } #orders_section { - padding: 1.5rem; + padding: 1.5rem 0; + .icon { + height: 1.2rem; + width: 1.2rem; + } } +#orders_section__header { + min-height: 2.8rem; + padding: 0 1.5rem; +} +#orders_section__header--primary { + flex-wrap: wrap; + z-index: 1; + sm-tab-header { + --gap: 1.5rem; + } + sm-tab { + font-size: 0.9rem; + --padding: 0.8rem 0; + } +} + +.table { + display: grid; + &__header { + color: rgba(var(--text-color), 0.8); + font-size: 0.8rem; + } + &__row { + padding: 0.5rem 1.5rem; + display: grid; + grid-template-columns: min-content repeat(3, 1fr) min-content; + } +} +.order-card { + position: relative; + outline: none; + user-select: none; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1.5rem 0.5rem 0.5rem; + &[data-type="buy"] &__type, + &[data-type="sell"] &__type { + font-size: 0.9rem; + font-weight: 500; + margin-bottom: 0.3rem; + } + + &[data-type="buy"] &__type { + color: var(--green); + } + + &[data-type="sell"] &__type { + color: var(--danger-color); + } + &--selected { + background-color: rgba(var(--text-color), 0.08); + .cancel-order { + visibility: hidden; + pointer-events: none; + } + } + sm-checkbox { + --height: 1rem; + --width: 1rem; + padding: 1rem; + cursor: pointer; + -webkit-tap-highlight-color: transparent; + } + &__quantity, + &__price { + font-size: 0.9rem; + color: rgba(var(--text-color), 0.9); + } + + &__time { + font-size: 0.8rem; + color: rgba(var(--text-color), 0.8); + } +} +.cancel-order { + align-items: center; + padding: 0.4rem 0.6rem; + span { + margin-left: 0.3rem; + } +} + #user_section { gap: 1.5rem; padding: 1.5rem; @@ -579,6 +652,11 @@ strip-option { flex: 1; } } +.label { + font-size: 0.8rem; + color: rgba(var(--text-color), 0.8); + margin-bottom: 0.2rem; +} .balance-card { display: grid; align-items: center; @@ -588,10 +666,6 @@ strip-option { &.is-locked { grid-template-columns: auto 1fr; gap: 1rem; - .label { - font-size: 0.8rem; - color: rgba(var(--text-color), 0.8); - } } &:not(.is-locked) { grid-template-columns: auto 1fr auto; @@ -675,17 +749,9 @@ strip-option { .page-layout { grid-template-columns: 1fr 90vw 1fr; } -} -@media screen and (max-width: 64rem) { -} -@media screen and (min-width: 64rem) { - .page-layout { - grid-template-columns: 1fr 80vw 1fr; - } #home { align-items: flex-start; - padding: 1.5vmax 3vmax; - grid-template-columns: 24rem minmax(0, 1fr) 20rem; + padding: 1.5vmax; gap: 1rem; & > * { border-radius: 0.5rem; @@ -697,6 +763,25 @@ strip-option { display: none; } } +@media screen and (min-width: 48rem) { + #home { + grid-template-rows: min-content 1fr; + grid-template-columns: 24rem minmax(0, 1fr); + } + #orders_section { + grid-row: span 2; + } +} +@media screen and (max-width: 64rem) { +} +@media screen and (min-width: 72rem) { + .page-layout { + grid-template-columns: 1fr 80vw 1fr; + } + #home { + grid-template-columns: 24rem minmax(0, 1fr) 20rem; + } +} @media screen and (min-width: 120rem) { .page-layout { grid-template-columns: 1fr 70vw 1fr; @@ -716,11 +801,43 @@ strip-option { background: rgba(var(--text-color), 0.5); } } - .nav-item, .interact { transition: background-color 0.3s, transform 0.3s; &:hover { background-color: var(--accent-color--light); } } + .order-card { + .cancel-order { + justify-self: flex-end; + overflow: hidden; + .icon, + span { + transition: opacity 0.3s, transform 0.3s; + } + .icon { + opacity: 0; + transform: translateX(100%); + } + span { + transform: translateX(100%); + opacity: 0; + } + } + &:hover, + &:focus-within { + .cancel-order { + .icon { + opacity: 1; + } + } + } + .cancel-order:hover { + .icon, + span { + opacity: 1; + transform: translateX(0); + } + } + } } diff --git a/public/index.html b/public/index.html index aaba03f..f0eab01 100644 --- a/public/index.html +++ b/public/index.html @@ -165,7 +165,7 @@

Trade FLO

- + Buy Sell @@ -187,21 +187,56 @@
-
-

My orders

- - Open - Completed - -
-
-
-
-
Quantity
-
At price
-
Order placed
+
+
+ + My orders + Market orders + + + Open + Completed + +
+
+ +
+ +
+ +
+
    +
    +
    +
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      + sdgkmsdg
      +
    +
    +

    @@ -215,7 +250,7 @@ My wallet

    -

    Select asset

    +

    Select asset

    FLO Rupee @@ -415,6 +450,28 @@
    +