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 @@
-