add task planner & alert improvments
All checks were successful
Deploy Sokko G / deploy (push) Successful in 7s

This commit is contained in:
Shinuwa 2026-07-27 22:44:08 +02:00
parent 2e6d8a2c0c
commit e306bfc5d6
15 changed files with 1547 additions and 4 deletions

View file

@ -686,6 +686,11 @@
-webkit-mask-image: url("/static/icons/checklist.svg");
}
.module-icon-tasklist {
mask-image: url("/static/icons/tasklist.svg");
-webkit-mask-image: url("/static/icons/tasklist.svg");
}
.module-icon-picture {
mask-image: url("/static/icons/picture.svg");
-webkit-mask-image: url("/static/icons/picture.svg");
@ -1164,10 +1169,455 @@ textarea:focus {
.module-add-panel + .links-list,
.module-add-panel + .checklist,
.module-add-panel + .task-planner-list,
.module-add-panel + .counters-grid {
margin-top: 0;
}
.task-planner-module {
display: grid;
gap: var(--space-4);
padding: var(--space-4);
}
.task-planner-topbar {
display: grid;
gap: 10px;
align-items: stretch;
}
.task-planner-topbar .inline-form {
padding: 0;
}
.task-planner-global-controls {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 10px;
}
.task-planner-settings-toggle,
.task-planner-dropdown-button,
.task-planner-settings-button {
display: inline-grid;
width: 34px;
min-width: 34px;
min-height: 34px;
place-items: center;
padding: 0;
border: 1px solid rgba(165, 180, 252, 0.1);
border-radius: var(--radius-md);
background: rgba(21, 26, 48, 0.76);
color: var(--color-text-secondary);
}
.task-planner-settings-toggle {
grid-template-columns: 16px minmax(0, auto);
width: auto;
max-width: 100%;
padding: 0 12px;
gap: 8px;
}
.task-planner-settings-toggle span {
overflow: hidden;
font-size: var(--font-size-xs);
font-weight: 900;
text-overflow: ellipsis;
white-space: nowrap;
}
.task-planner-settings-toggle .ui-icon,
.task-planner-dropdown-button .ui-icon,
.task-planner-settings-button .ui-icon {
width: 16px;
height: 16px;
}
.task-planner-settings {
display: grid;
grid-template-columns: minmax(130px, 1fr) minmax(110px, 0.72fr);
gap: 10px;
padding: 12px;
border: 1px solid rgba(165, 180, 252, 0.12);
border-radius: var(--radius-md);
background:
linear-gradient(135deg, rgba(139, 92, 246, 0.06), transparent 58%),
rgba(7, 10, 24, 0.34);
}
.task-planner-settings label,
.task-planner-weekly-override {
display: grid;
gap: 6px;
min-width: 0;
}
.task-planner-settings span,
.task-planner-weekly-override span,
.task-planner-relations > span {
color: var(--color-text-secondary);
font-size: var(--font-size-xs);
font-weight: 900;
text-transform: uppercase;
}
.task-planner-settings select,
.task-planner-settings input,
.task-planner-add-form select,
.task-planner-type-select,
.task-planner-weekly-override select,
.task-planner-relations select {
width: 100%;
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
background-color: rgba(15, 23, 42, 0.64);
color: var(--color-text-primary);
}
.task-planner-settings select option,
.task-planner-add-form select option,
.task-planner-type-select option,
.task-planner-weekly-override select option,
.task-planner-relations select option {
background: #11182f;
color: var(--color-text-primary);
}
.task-planner-add-form {
grid-template-columns: minmax(0, 1fr) minmax(120px, 0.36fr) auto;
}
.task-planner-list {
display: grid;
gap: 10px;
margin: 0;
padding: 0;
list-style: none;
}
.task-planner-child-list {
position: relative;
gap: 8px;
margin-top: 8px;
padding-left: 22px;
}
.task-planner-child-list::before {
content: "";
position: absolute;
top: -4px;
bottom: 15px;
left: 7px;
width: 1px;
background: linear-gradient(180deg, rgba(246, 196, 83, 0.46), rgba(139, 92, 246, 0.18));
}
.task-planner-child-list > .task-planner-item {
position: relative;
}
.task-planner-child-list > .task-planner-item::before {
content: "";
position: absolute;
top: 25px;
left: -15px;
width: 11px;
height: 1px;
background: rgba(246, 196, 83, 0.46);
}
.task-planner-empty {
padding: var(--space-4);
border: 1px dashed rgba(165, 180, 252, 0.18);
border-radius: var(--radius-md);
color: var(--color-text-muted);
text-align: center;
}
.task-planner-item {
position: relative;
display: grid;
gap: 10px;
padding: 10px;
border: 1px solid rgba(165, 180, 252, 0.12);
border-radius: var(--radius-md);
background: rgba(5, 7, 17, 0.36);
}
.task-planner-item.is-complete > .task-planner-line {
opacity: 0.78;
}
.task-planner-item.has-missing-dependency {
border-color: rgba(246, 196, 83, 0.34);
background:
linear-gradient(135deg, rgba(246, 196, 83, 0.06), transparent 44%),
rgba(5, 7, 17, 0.36);
}
.task-planner-item.is-dragging {
cursor: grabbing;
opacity: 0.58;
transform: scale(0.99);
}
.task-planner-item.is-drop-target {
border-color: rgba(246, 196, 83, 0.72);
box-shadow: inset 0 3px 0 rgba(246, 196, 83, 0.8);
}
.task-planner-item.is-drop-target.drop-after {
box-shadow: inset 0 -3px 0 rgba(246, 196, 83, 0.8);
}
.task-planner-line {
display: grid;
grid-template-columns: 30px 24px minmax(0, 1fr) 134px auto auto;
gap: 8px;
align-items: center;
}
.task-planner-line > input[type="checkbox"] {
justify-self: center;
}
.task-planner-drag-handle,
.task-planner-delete-button {
display: inline-grid;
width: 30px;
min-width: 30px;
min-height: 30px;
place-items: center;
padding: 0;
border: 1px solid rgba(165, 180, 252, 0.1);
border-radius: var(--radius-md);
background: rgba(21, 26, 48, 0.76);
color: var(--color-text-secondary);
}
.task-planner-drag-handle:disabled {
cursor: not-allowed;
opacity: 0.3;
}
.task-planner-drag-handle .ui-icon,
.task-planner-delete-button .ui-icon {
width: 15px;
height: 15px;
}
.task-planner-actions {
display: inline-flex;
justify-content: flex-end;
gap: 6px;
}
.task-planner-title-input {
font-weight: 800;
}
.task-planner-item.is-complete > .task-planner-line .task-planner-title-input {
color: var(--color-text-muted);
text-decoration: line-through;
}
.task-planner-type-select {
appearance: none;
-webkit-appearance: none;
width: 100%;
min-height: 36px;
overflow: hidden;
padding: 0 30px 0 10px;
border-color: rgba(165, 180, 252, 0.09);
text-overflow: ellipsis;
background-image:
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23c4b5fd' viewBox='-6.5 0 32 32'%3E%3Cpath d='M18.813 11.406l-7.906 9.906c-.75.906-1.906.906-2.625 0L.376 11.406c-.75-.938-.375-1.656.781-1.656h16.875c1.188 0 1.531.719.781 1.656z'/%3E%3C/svg%3E"),
linear-gradient(135deg, rgba(139, 92, 246, 0.04), rgba(31, 41, 78, 0.08)),
linear-gradient(rgba(21, 26, 48, 0.38), rgba(21, 26, 48, 0.38));
background-position:
calc(100% - 10px) 50%,
0 0,
0 0;
background-size:
11px 11px,
auto,
auto;
background-repeat: no-repeat;
color: var(--color-text-secondary);
font-size: var(--font-size-xs);
font-weight: 900;
}
.task-planner-type-select:hover,
.task-planner-type-select:focus {
border-color: rgba(196, 181, 253, 0.22);
background-image:
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f6c453' viewBox='-6.5 0 32 32'%3E%3Cpath d='M18.813 11.406l-7.906 9.906c-.75.906-1.906.906-2.625 0L.376 11.406c-.75-.938-.375-1.656.781-1.656h16.875c1.188 0 1.531.719.781 1.656z'/%3E%3C/svg%3E"),
linear-gradient(135deg, rgba(246, 196, 83, 0.06), rgba(139, 92, 246, 0.08)),
linear-gradient(rgba(21, 26, 48, 0.58), rgba(21, 26, 48, 0.58));
color: var(--color-text-primary);
}
.task-planner-warning {
padding: 4px 8px;
border: 1px solid rgba(246, 196, 83, 0.28);
border-radius: var(--radius-pill);
background: rgba(246, 196, 83, 0.08);
color: var(--color-accent-gold);
font-size: var(--font-size-xs);
font-weight: 900;
white-space: nowrap;
}
.inline-notice {
display: inline-flex;
width: fit-content;
max-width: 100%;
align-items: center;
gap: 7px;
padding: 5px 9px;
border: 1px solid rgba(246, 196, 83, 0.28);
border-radius: var(--radius-md);
background:
linear-gradient(135deg, rgba(246, 196, 83, 0.1), rgba(139, 92, 246, 0.08)),
rgba(9, 12, 28, 0.9);
box-shadow: 0 10px 24px rgba(2, 6, 23, 0.22);
color: var(--color-accent-gold);
font-size: var(--font-size-xs);
font-weight: 900;
line-height: 1.2;
animation: inline-notice-in 160ms ease;
}
.inline-notice .ui-icon {
width: 14px;
height: 14px;
flex: 0 0 auto;
}
.task-planner-notice {
position: absolute;
top: 48px;
left: 72px;
z-index: 2;
pointer-events: none;
}
@keyframes inline-notice-in {
from {
opacity: 0;
transform: translateY(-2px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.task-planner-description,
.task-planner-task-settings {
margin-left: 62px;
}
.task-planner-description {
min-height: 72px;
resize: vertical;
}
.task-planner-task-settings {
display: grid;
grid-template-columns: minmax(130px, 0.32fr) minmax(0, 1fr);
gap: 10px;
align-items: start;
padding: 10px;
border: 1px solid rgba(165, 180, 252, 0.1);
border-radius: var(--radius-md);
background: rgba(7, 10, 24, 0.24);
}
.task-planner-relations {
display: grid;
grid-column: span 1;
gap: 6px;
min-width: 0;
}
.task-planner-relations > div {
display: grid;
gap: 5px;
min-height: 28px;
}
.task-planner-relations em {
color: var(--color-text-muted);
font-size: var(--font-size-xs);
font-style: normal;
}
.task-planner-relation-chip {
display: grid;
grid-template-columns: minmax(0, 1fr) auto 28px;
gap: 8px;
align-items: center;
padding: 4px 5px 4px 9px;
border: 1px solid rgba(165, 180, 252, 0.12);
border-radius: var(--radius-md);
background: rgba(21, 26, 48, 0.46);
}
.task-planner-relation-chip > span {
min-width: 0;
overflow: hidden;
color: var(--color-text-secondary);
font-size: var(--font-size-xs);
font-weight: 800;
text-overflow: ellipsis;
white-space: nowrap;
}
.task-planner-relation-chip label {
display: inline-flex;
align-items: center;
gap: 5px;
color: var(--color-text-muted);
font-size: var(--font-size-xs);
font-weight: 800;
}
.task-planner-relation-chip label input {
min-height: 0;
}
.task-planner-relation-chip button {
display: inline-flex;
width: 26px;
min-width: 26px;
min-height: 26px;
align-items: center;
justify-content: center;
gap: 5px;
padding: 0;
border: 1px solid rgba(165, 180, 252, 0.12);
border-radius: var(--radius-md);
background: rgba(21, 26, 48, 0.58);
color: var(--color-text-secondary);
font-size: var(--font-size-xs);
font-weight: 800;
}
.task-planner-relation-chip button .ui-icon {
width: 12px;
height: 12px;
}
.task-planner-relations select {
min-height: 34px;
padding-inline: 10px;
}
.counters-add-form {
grid-template-columns: minmax(0, 1fr) auto;
}
@ -1336,6 +1786,52 @@ textarea:focus {
color: var(--color-text-primary);
}
.timer-countdown-form select,
.task-planner-settings select,
.task-planner-add-form select,
.task-planner-type-select,
.task-planner-weekly-override select,
.task-planner-relations select {
appearance: none;
-webkit-appearance: none;
overflow: hidden;
padding-right: 34px;
text-overflow: ellipsis;
background-image:
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23c4b5fd' viewBox='-6.5 0 32 32'%3E%3Cpath d='M18.813 11.406l-7.906 9.906c-.75.906-1.906.906-2.625 0L.376 11.406c-.75-.938-.375-1.656.781-1.656h16.875c1.188 0 1.531.719.781 1.656z'/%3E%3C/svg%3E"),
linear-gradient(135deg, rgba(139, 92, 246, 0.04), rgba(31, 41, 78, 0.08)),
linear-gradient(rgba(21, 26, 48, 0.38), rgba(21, 26, 48, 0.38));
background-position:
calc(100% - 10px) 50%,
0 0,
0 0;
background-size:
11px 11px,
auto,
auto;
background-repeat: no-repeat;
}
.timer-countdown-form select:hover,
.timer-countdown-form select:focus,
.task-planner-settings select:hover,
.task-planner-settings select:focus,
.task-planner-add-form select:hover,
.task-planner-add-form select:focus,
.task-planner-type-select:hover,
.task-planner-type-select:focus,
.task-planner-weekly-override select:hover,
.task-planner-weekly-override select:focus,
.task-planner-relations select:hover,
.task-planner-relations select:focus {
border-color: rgba(196, 181, 253, 0.22);
background-image:
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f6c453' viewBox='-6.5 0 32 32'%3E%3Cpath d='M18.813 11.406l-7.906 9.906c-.75.906-1.906.906-2.625 0L.376 11.406c-.75-.938-.375-1.656.781-1.656h16.875c1.188 0 1.531.719.781 1.656z'/%3E%3C/svg%3E"),
linear-gradient(135deg, rgba(246, 196, 83, 0.06), rgba(139, 92, 246, 0.08)),
linear-gradient(rgba(21, 26, 48, 0.58), rgba(21, 26, 48, 0.58));
color: var(--color-text-primary);
}
.time-parts-input {
display: grid;
grid-template-columns: minmax(34px, 1fr) 4px minmax(34px, 1fr) 4px minmax(34px, 1fr);
@ -1735,6 +2231,14 @@ textarea:focus {
.tool-split-entry > button:not(.tool-split-entry-summary, .tool-split-entry-value, .danger):hover,
.counter-actions button:not(.danger):hover,
.link-item button:not(.danger):hover,
.task-planner-drag-handle:hover:not(:disabled),
.task-planner-settings-toggle:hover,
.task-planner-settings-toggle.active,
.task-planner-dropdown-button:hover,
.task-planner-dropdown-button.active,
.task-planner-settings-button:hover,
.task-planner-settings-button.active,
.task-planner-relation-chip button:hover,
.module-scroll-button:hover,
.module-scroll-button.active,
.tool-split-scroll-toggle:hover,
@ -1820,7 +2324,8 @@ textarea:focus {
.tool-split-action-button.danger,
.tool-split-entry > button.danger,
.counter-actions button.danger,
.link-item button.danger {
.link-item button.danger,
.task-planner-delete-button.danger {
border-color: rgba(251, 113, 133, 0.2);
background: rgba(21, 26, 48, 0.88);
color: var(--color-danger);
@ -1829,7 +2334,8 @@ textarea:focus {
.tool-split-action-button.danger:hover:not(:disabled),
.tool-split-entry > button.danger:hover,
.counter-actions button.danger:hover,
.link-item button.danger:hover {
.link-item button.danger:hover,
.task-planner-delete-button.danger:hover {
border-color: rgba(251, 113, 133, 0.56);
background:
linear-gradient(135deg, rgba(80, 25, 42, 0.72), rgba(48, 18, 34, 0.82)) padding-box,
@ -1843,7 +2349,8 @@ textarea:focus {
.tool-split-action-button.danger:hover .ui-icon,
.tool-split-entry > button.danger:hover .ui-icon,
.counter-actions button.danger:hover .ui-icon,
.link-item button.danger:hover .ui-icon {
.link-item button.danger:hover .ui-icon,
.task-planner-delete-button.danger:hover .ui-icon {
background-color: #fff;
filter: drop-shadow(0 0 6px rgba(251, 113, 133, 0.26));
}