diff --git a/gulpfile.js b/gulpfile.js index 4f7b4dcc..b8483b9d 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -61,6 +61,7 @@ const cssFiles = [ path.src + '/css/transitional.css', path.src + '/css/search.css', path.src + '/css/background.css', + path.src + '/css/group.css', path.src + '/css/link.css', path.src + '/css/auto-suggest.css', path.src + '/css/fontawesome.css' diff --git a/package.json b/package.json index be019240..518128db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nighttab", - "version": "3.83.0", + "version": "4.0.0", "description": "A neutral new tab page accented with a chosen colour. Customise the layout, style, background and bookmarks in nightTab.", "main": "index.js", "scripts": { diff --git a/src/css/form.css b/src/css/form.css index 6df4e430..f7503348 100755 --- a/src/css/form.css +++ b/src/css/form.css @@ -1,3 +1,71 @@ +/* select */ +select { + background-color: rgb(var(--theme-gray-02)); + background-image: + linear-gradient(45deg, transparent 50%, rgb(var(--form-input-text)) 50%), + linear-gradient(135deg, rgb(var(--form-input-text)) 50%, transparent 50%); + background-position: + calc(100% - calc(var(--form-arrow-size) * 5)) 50%, + calc(100% - calc(var(--form-arrow-size) * 4)) 50%; + background-size: + var(--form-arrow-size) var(--form-arrow-size), + var(--form-arrow-size) var(--form-arrow-size); + background-repeat: no-repeat; + padding: 0 calc(var(--form-arrow-size) * 10) 0 1em; + margin: 0 0 1em 0; + color: rgb(var(--form-input-text)); + font-size: 1em; + font-family: var(--font-regular); + min-height: 2.5em; + min-width: 0; + width: 100%; + border-width: var(--form-input-border); + border-style: solid; + border-color: transparent; + border-radius: var(--theme-radius); + cursor: pointer; + transition: background-color var(--layout-timing-extra-fast), color var(--layout-timing-extra-fast), border-color var(--layout-timing-extra-fast), box-shadow var(--layout-timing-extra-fast); + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; +} + +select:hover { + background-image: + linear-gradient(45deg, transparent 50%, rgb(var(--form-input-text-hover)) 50%), + linear-gradient(135deg, rgb(var(--form-input-text-hover)) 50%, transparent 50%); + background-color: rgb(var(--theme-gray-03)); + color: rgb(var(--form-input-text-hover)); + outline: none; + box-shadow: 0 0 0 var(--layout-line-width) rgb(var(--theme-gray-06)); +} + +select:focus, +select:active { + background-image: + linear-gradient(45deg, transparent 50%, rgb(var(--form-input-text-focus)) 50%), + linear-gradient(135deg, rgb(var(--form-input-text-focus)) 50%, transparent 50%); + background-color: rgb(var(--theme-gray-01)); + color: rgb(var(--form-input-text-focus)); + outline: none; + z-index: 2; + box-shadow: 0 0 0 var(--layout-line-width) rgb(var(--theme-accent)), 0 0 0 calc(var(--layout-line-width) * 2) rgba(var(--theme-accent), 0.25); +} + +select:disabled, +select:disabled:hover, +select:disabled:focus, +select:disabled:active { + background-color: transparent; + background-image: + linear-gradient(45deg, transparent 50%, rgb(var(--form-input-text-disabled)) 50%), + linear-gradient(135deg, rgb(var(--form-input-text-disabled)) 50%, transparent 50%); + color: rgb(var(--form-input-text-disabled)); + border-color: rgb(var(--form-input-text-disabled)); + cursor: default; + box-shadow: none; +} + /* textarea */ textarea { background-color: rgb(var(--theme-gray-02)); @@ -420,6 +488,7 @@ input[type="range"] { color: rgb(var(--theme-style-text)); font-size: 1em; font-family: var(--font-regular); + display: block; height: 2em; width: 100%; border: 0; @@ -846,7 +915,7 @@ input[type="range"]:disabled::-moz-range-progress { .form-grid:focus, .form-grid:focus-within { - outline: 0; + outline: none; border-color: rgb(var(--theme-style-text)); } @@ -1085,20 +1154,20 @@ input[type="range"]:disabled::-moz-range-progress { .form-group-text:hover, .form-group-text:focus { - background-color: rgb(var(--theme-gray-03)); - border-bottom-color: rgb(var(--theme-gray-08)); + /* background-color: rgb(var(--theme-gray-03)); */ + /* border-bottom-color: rgb(var(--theme-gray-08)); */ outline: none; } -.form-group-text:disabled { +.form-group-text.disabled { background-color: rgb(var(--theme-gray-02)); color: rgb(var(--form-input-placeholder-disabled)); box-shadow: none; cursor: default; } -.form-group-text:disabled:hover, -.form-group-text:disabled:focus { +.form-group-text.disabled:hover, +.form-group-text.disabled:focus { background-color: rgb(var(--theme-gray-02)); border-color: transparent; } @@ -1138,7 +1207,7 @@ input[type="range"]:disabled::-moz-range-progress { .form-group .form-group-text { margin-bottom: 0; - margin-left: calc(-1px * var(--form-input-border)); + /* margin-left: calc(-1px * var(--form-input-border)); */ border-radius: 0; z-index: 1; position: relative; diff --git a/src/css/group.css b/src/css/group.css new file mode 100644 index 00000000..5f5c3f7a --- /dev/null +++ b/src/css/group.css @@ -0,0 +1,89 @@ +.group { + padding-top: calc(calc(var(--layout-space) / 2) * var(--layout-padding)); + padding-bottom: calc(calc(var(--layout-space) / 2) * var(--layout-padding)); + padding-left: calc(var(--layout-space) * var(--layout-padding)); + padding-right: calc(var(--layout-space) * var(--layout-padding)); + width: var(--link-area-width); +} + +.group:first-child { + padding-top: calc(var(--layout-space) * var(--layout-padding)); +} + +.group:last-child { + padding-bottom: calc(var(--layout-space) * var(--layout-padding)); +} + +.group-header { + position: relative; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + flex-wrap: wrap; + transition: padding var(--layout-timing-extra-fast) var(--layout-duration-04); +} + +.is-group-name-show .group-header, +.is-link-edit .group-header { + padding-bottom: calc(var(--layout-space) * var(--layout-gutter)); + transition: padding var(--layout-timing-extra-fast); +} + +.group-name { + margin-right: 0; + display: none; + align-items: center; + min-height: 2.5em; + font-size: var(--group-name-size); +} + +.is-group-name-show .group-name { + display: flex; +} + +.group-name-text { + font-family: var(--font-fjalla); + margin-bottom: 0; +} + +.group-control { + margin-right: 0; + margin-bottom: 0; + overflow: hidden; + height: 0; + width: 0; + transition: + width var(--layout-timing-extra-fast), + height var(--layout-timing-extra-fast) var(--layout-duration-04), + margin var(--layout-timing-extra-fast); +} + +.is-link-edit .group-control { + height: 2.5em; + width: 16em; + transition: + width var(--layout-timing-extra-fast) var(--layout-duration-04), + height var(--layout-timing-extra-fast), + margin var(--layout-timing-extra-fast) var(--layout-duration-04); +} + +.is-link-edit.is-group-name-show .group-control { + margin-right: 1em; +} + +.group-control-item { + width: 4em; + flex-shrink: 0; +} + +.group-body { + font-size: calc(var(--link-item-size) * 1); + background-color: transparent; + position: relative; + min-height: var(--link-item-height); + display: grid; + grid-auto-rows: 1fr; + grid-gap: calc(var(--layout-space) * var(--layout-gutter)); + grid-template-columns: repeat(auto-fill, minmax(var(--link-item-width), 1fr)); +} diff --git a/src/css/link.css b/src/css/link.css index df4b34b0..9ea3d4fa 100755 --- a/src/css/link.css +++ b/src/css/link.css @@ -1,7 +1,7 @@ .link { display: none; position: relative; - flex-direction: row; + flex-direction: column; z-index: var(--z-index-link); } @@ -10,45 +10,33 @@ } .is-link-area-alignment-left .link { - justify-content: flex-start; + align-items: flex-start; } .is-link-area-alignment-center .link { - justify-content: center; + align-items: center; } .is-link-area-alignment-right .link { - justify-content: flex-end; + align-items: flex-end; } -.link-area { - padding-left: calc(var(--layout-space) * var(--layout-padding)); - padding-right: calc(var(--layout-space) * var(--layout-padding)); - font-size: calc(var(--link-item-size) * 1); - position: relative; - width: var(--link-area-width); - display: grid; - grid-auto-rows: 1fr; - grid-gap: calc(var(--layout-space) * var(--layout-gutter)); - grid-template-columns: repeat(auto-fill, minmax(var(--link-item-width), 1fr)); +.is-layout-order-headerlink .link { + margin-top: calc(-1 * calc(var(--layout-space) * var(--layout-padding))); } -.is-layout-order-headerlink .link-area { - padding-bottom: calc(var(--layout-space) * var(--layout-padding)); +.is-layout-order-linkheader .link { + margin-bottom: calc(-1 * calc(var(--layout-space) * var(--layout-padding))); } -.is-layout-order-headerlink.is-header-border-bottom .link-area, -.is-layout-order-headerlink.is-header-shade-style-always .link-area { - padding-top: calc(var(--layout-space) * var(--layout-padding)); +.is-layout-order-headerlink.is-header-border-bottom .link, +.is-layout-order-headerlink.is-header-shade-style-always .link { + margin-top: 0; } -.is-layout-order-linkheader .link-area { - padding-top: calc(var(--layout-space) * var(--layout-padding)); -} - -.is-layout-order-linkheader.is-header-border-top .link-area, -.is-layout-order-linkheader.is-header-shade-style-always .link-area { - padding-bottom: calc(var(--layout-space) * var(--layout-padding)); +.is-layout-order-linkheader.is-header-border-top .link, +.is-layout-order-linkheader.is-header-shade-style-always .link { + margin-bottom: 0; } .link-item { @@ -79,15 +67,12 @@ transition: none; } -.link-item-placeholder { +.link-placeholder { background-color: rgba(var(--theme-accent), 0.2); border-radius: var(--theme-radius); width: 100%; height: 100%; position: relative; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); box-shadow: inset 0 0 0 var(--layout-line-width) rgb(var(--theme-accent)), inset 0 0 0 calc(var(--layout-line-width) * 4) rgba(var(--theme-accent), 0.1), inset 0 0 0 calc(var(--layout-line-width) * 8) rgba(var(--theme-accent), 0.1); pointer-events: none; } @@ -321,6 +306,14 @@ transition: all var(--layout-timing-extra-fast); } +.is-link-style-list .link-control { + flex-wrap: nowrap; +} + +.is-link-style-block .link-control { + flex-wrap: wrap; +} + .link-control-item { background-color: transparent; border-radius: 0; @@ -329,7 +322,14 @@ padding: 0; color: rgb(var(--theme-gray-02)); flex-grow: 1; - flex-basis: 50%; +} + +.is-link-style-list .link-control-item { + flex-basis: inherit; +} + +.is-link-style-block .link-control-item { + flex-basis: 30%; } .link-url-text-dark .link-control-item { @@ -436,6 +436,15 @@ .link-display { font-size: 1em; display: none; + transition: font-size var(--layout-timing-extra-fast), margin var(--layout-timing-extra-fast); +} + +.is-link-edit.is-link-style-list .link-display { + font-size: 0.5em; +} + +.is-link-edit.is-link-style-block .link-display { + font-size: 0.6em; } .is-link-display-item-show .link-display { @@ -497,7 +506,11 @@ font-family: var(--font-regular); color: rgb(var(--theme-gray-12)); display: none; - transition: color var(--layout-timing-extra-fast); + transition: color var(--layout-timing-extra-fast), font-size var(--layout-timing-extra-fast); +} + +.is-link-edit .link-name { + font-size: 0.6em; } .link-name, @@ -537,13 +550,27 @@ } .link-empty { + background-color: rgba(var(--theme-gray-04), 0.2); + padding: 1em 0; + border-radius: var(--theme-radius); grid-column-start: 1; grid-column-end: -1; text-align: center; + display: flex; + flex-direction: column; + justify-content: center; +} + +.is-sorting .link-empty { + display: none; } .link-empty-heading { - color: rgb(var(--theme-gray-16)); + color: rgb(var(--theme-style-text)); + margin-bottom: 0; +} + +.link-empty-heading:not(:only-child) { margin-bottom: 0.5em; } @@ -604,12 +631,12 @@ transition: transform var(--layout-timing-extra-fast); } -.link-form-text-icon:not(:disabled):hover .link-form-icon { +.link-form-text-icon:not(.disabled):hover .link-form-icon { transform: scale(2) rotate(360deg); z-index: 1; } -.link-form-text-icon:not(:disabled):active .link-form-icon { +.link-form-text-icon:not(.disabled):active .link-form-icon { transform: scale(4) rotate(360deg); } diff --git a/src/css/typography.css b/src/css/typography.css index 5755ab2a..248b6898 100755 --- a/src/css/typography.css +++ b/src/css/typography.css @@ -56,7 +56,7 @@ p:not(:last-child) { hr { border: 0; - border-top: 1px solid rgb(var(--theme-gray-02)); + border-top: 2px solid rgb(var(--theme-gray-02)); border-radius: var(--theme-radius); margin: 1em 0; clear: both; diff --git a/src/css/variables.css b/src/css/variables.css index 7c57830d..31916038 100644 --- a/src/css/variables.css +++ b/src/css/variables.css @@ -38,6 +38,8 @@ --header-button-size: 1em; --header-greeting-size: 1em; --header-transitional-size: 1em; + /* group */ + --group-name-size: 1em; /* link */ --link-area-width: 100%; --link-item-size: 1em; @@ -51,11 +53,16 @@ --layout-space: 0.5rem; --layout-padding: 4; --layout-gutter: 4; - --layout-timing-extra-fast: 0.2s ease-in-out; - --layout-timing-fast: 0.4s ease-in-out; - --layout-timing-medium: 0.6s ease-in-out; - --layout-timing-slow: 0.8s ease-in-out; - --layout-timing-extra-slow: 1s ease-in-out; + --layout-duration-02: 0.2s; + --layout-duration-04: 0.4s; + --layout-duration-06: 0.6s; + --layout-duration-08: 0.8s; + --layout-duration-10: 1s; + --layout-timing-extra-fast: var(--layout-duration-02) ease-in-out; + --layout-timing-fast: var(--layout-duration-04) ease-in-out; + --layout-timing-medium: var(--layout-duration-06) ease-in-out; + --layout-timing-slow: var(--layout-duration-08) ease-in-out; + --layout-timing-extra-slow: var(--layout-duration-10) ease-in-out; --layout-shadow-small: 0 0 4px rgba(0, 0, 0, 0.2), 0 0 8px rgba(0, 0, 0, 0.1); --layout-shadow-medium: 0 0 8px rgba(0, 0, 0, 0.2), 0 0 16px rgba(0, 0, 0, 0.1); --layout-shadow-large: 0 0 16px rgba(0, 0, 0, 0.2), 0 0 32px rgba(0, 0, 0, 0.1); @@ -87,6 +94,7 @@ --form-feedback-text-disabled: var(--theme-gray-04); --form-helper: var(--theme-gray-12); --form-helper-disabled: var(--theme-gray-06); + --form-arrow-size: 5px; /* button */ --button-text: var(--theme-gray-12); --button-text-hover-focus: var(--theme-style-text); @@ -175,7 +183,7 @@ --link-item-width: 11em; --link-item-height: 10em; --link-item-url-height: 20%; - --link-item-edit-height: 30%; + --link-item-edit-height: 50%; } .is-link-style-list { diff --git a/src/index.html b/src/index.html index 72ea7f61..16e34e0c 100644 --- a/src/index.html +++ b/src/index.html @@ -32,6 +32,7 @@ + @@ -99,9 +100,7 @@ - + @@ -112,6 +111,7 @@ + +