Migrate all repos into monorepo context folders
Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)
Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
@@ -0,0 +1,891 @@
|
||||
/* Base tidy styles */
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background-color: #f9f9f9;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #ffffff;
|
||||
padding: 1rem 2rem;
|
||||
border-bottom: 1px solid #eaeaea;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
font-size: 1.5rem;
|
||||
color: #111;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 2rem;
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.top-nav {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.nav-btn {
|
||||
background: none;
|
||||
border: none;
|
||||
border-bottom: 2px solid transparent;
|
||||
padding: 0.5rem 1rem;
|
||||
font-size: 1rem;
|
||||
cursor: pointer;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.nav-btn:hover {
|
||||
color: #111;
|
||||
}
|
||||
|
||||
.nav-btn.active {
|
||||
border-bottom: 2px solid #1a73e8;
|
||||
color: #1a73e8;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
#dashboard {
|
||||
/* Removed default card style from wrapper */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: #ffffff;
|
||||
padding: 1.5rem;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||
border: 1px solid #eaeaea;
|
||||
}
|
||||
|
||||
.card h2 {
|
||||
margin-top: 0;
|
||||
font-size: 1.25rem;
|
||||
color: #222;
|
||||
border-bottom: 2px solid #f0f0f0;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.grid-2 {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.grid-2 {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.tidy-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.tidy-list li {
|
||||
padding: 0.75rem 0;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
}
|
||||
|
||||
.tidy-list li:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.priority-high {
|
||||
color: #d93025;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.suggestion-box {
|
||||
background-color: #e8f0fe;
|
||||
border-left: 4px solid #1a73e8;
|
||||
padding: 0.75rem;
|
||||
margin-top: 1rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
/* Task Item Layout */
|
||||
.task-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 0.5rem;
|
||||
padding: 0.75rem 0;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
transition: background 0.15s;
|
||||
}
|
||||
|
||||
.task-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.drag-handle {
|
||||
cursor: grab;
|
||||
color: #bbb;
|
||||
font-size: 1.1rem;
|
||||
user-select: none;
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
.drag-handle:active {
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
.task-content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.task-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.4rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.btn-edit, .btn-done {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 0.85rem;
|
||||
padding: 2px 6px;
|
||||
line-height: 1;
|
||||
color: #555;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.btn-edit:hover {
|
||||
background: #e8f0fe;
|
||||
border-color: #1a73e8;
|
||||
color: #1a73e8;
|
||||
}
|
||||
|
||||
.btn-done:hover {
|
||||
background: #e6f4ea;
|
||||
border-color: #34a853;
|
||||
color: #34a853;
|
||||
}
|
||||
|
||||
.priority-badge {
|
||||
display: inline-block;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 500;
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
.priority-badge.priority-1 {
|
||||
background: #fce8e6;
|
||||
color: #d93025;
|
||||
}
|
||||
|
||||
.priority-badge.priority-2 {
|
||||
background: #fef7e0;
|
||||
color: #ea8600;
|
||||
}
|
||||
|
||||
.priority-badge.priority-3 {
|
||||
background: #e8f0fe;
|
||||
color: #1a73e8;
|
||||
}
|
||||
|
||||
/* Drag and Drop States */
|
||||
.task-item.dragging {
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.task-item.drag-over {
|
||||
border-top: 2px solid #1a73e8;
|
||||
padding-top: calc(0.75rem - 2px);
|
||||
}
|
||||
|
||||
|
||||
/* Delete button */
|
||||
.btn-delete {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 0.85rem;
|
||||
padding: 2px 6px;
|
||||
line-height: 1;
|
||||
color: #555;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.btn-delete:hover {
|
||||
background: #fce8e6;
|
||||
border-color: #d93025;
|
||||
color: #d93025;
|
||||
}
|
||||
|
||||
/* Agent-ready button */
|
||||
.btn-agent {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 0.85rem;
|
||||
padding: 2px 6px;
|
||||
line-height: 1;
|
||||
color: #aaa;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.btn-agent:hover {
|
||||
background: #e8f0fe;
|
||||
border-color: #1a73e8;
|
||||
}
|
||||
|
||||
.btn-agent.active {
|
||||
background: #e8f0fe;
|
||||
border-color: #1a73e8;
|
||||
color: #1a73e8;
|
||||
}
|
||||
|
||||
/* Agent-ready task highlight */
|
||||
.task-item.agent-ready {
|
||||
border-left: 3px solid #1a73e8;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
|
||||
/* Sort bar */
|
||||
.sort-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin-bottom: 1rem;
|
||||
padding-bottom: 0.75rem;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
}
|
||||
|
||||
.sort-btn {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
padding: 4px 10px;
|
||||
font-size: 0.8rem;
|
||||
cursor: pointer;
|
||||
color: #555;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.sort-btn:hover {
|
||||
border-color: #1a73e8;
|
||||
color: #1a73e8;
|
||||
}
|
||||
|
||||
.sort-btn.active {
|
||||
background: #1a73e8;
|
||||
border-color: #1a73e8;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Due date badge */
|
||||
.due-badge {
|
||||
display: inline-block;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-size: 0.7rem;
|
||||
background: #e8f5e9;
|
||||
color: #2e7d32;
|
||||
}
|
||||
|
||||
.due-badge.overdue {
|
||||
background: #fce8e6;
|
||||
color: #d93025;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Mobile responsiveness */
|
||||
@media (max-width: 600px) {
|
||||
header {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.top-nav {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.sort-bar {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
/* Task item: stack vertically on mobile */
|
||||
.task-item {
|
||||
flex-direction: column;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
/* Task content header: stack title and actions into two rows */
|
||||
.task-content > div:first-child {
|
||||
flex-direction: column !important;
|
||||
align-items: flex-start !important;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
/* Action buttons: full-width row below the title */
|
||||
.task-actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px;
|
||||
width: 100%;
|
||||
padding-top: 0.4rem;
|
||||
border-top: 1px solid #f0f0f0;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.drag-handle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.move-arrows {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#add-task-form {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#add-task-form input,
|
||||
#add-task-form select,
|
||||
#add-task-form button {
|
||||
width: 100% !important;
|
||||
min-width: unset !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Origin badge */
|
||||
.origin-badge {
|
||||
display: inline-block;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-size: 0.7rem;
|
||||
background: #f3e5f5;
|
||||
color: #7b1fa2;
|
||||
}
|
||||
|
||||
/* Move arrows */
|
||||
.move-arrows {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.btn-move-top, .btn-move-bottom {
|
||||
background: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
font-size: 0.75rem;
|
||||
color: #aaa;
|
||||
padding: 0;
|
||||
line-height: 1;
|
||||
transition: color 0.15s;
|
||||
}
|
||||
|
||||
.btn-move-top:hover, .btn-move-bottom:hover {
|
||||
color: #1a73e8;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.move-arrows {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Suggestion severity */
|
||||
.suggestion-high {
|
||||
background-color: #fce8e6;
|
||||
border-left: 4px solid #d93025;
|
||||
}
|
||||
|
||||
.suggestion-medium {
|
||||
background-color: #fef7e0;
|
||||
border-left: 4px solid #ea8600;
|
||||
}
|
||||
|
||||
.suggestion-low {
|
||||
background-color: #e8f5e9;
|
||||
border-left: 4px solid #34a853;
|
||||
}
|
||||
|
||||
/* Retro stats */
|
||||
.retro-stats {
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.retro-stat {
|
||||
text-align: center;
|
||||
flex: 1;
|
||||
min-width: 60px;
|
||||
}
|
||||
|
||||
.retro-num {
|
||||
font-size: 2rem;
|
||||
font-weight: bold;
|
||||
color: #1a73e8;
|
||||
}
|
||||
|
||||
/* Origin link (clickable) */
|
||||
.origin-link {
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.origin-link:hover {
|
||||
background: #e1bee7;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Purge (permanent delete) button */
|
||||
.btn-purge {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 0.75rem;
|
||||
padding: 2px 5px;
|
||||
line-height: 1;
|
||||
color: #555;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.btn-purge:hover {
|
||||
background: #fce8e6;
|
||||
border-color: #d93025;
|
||||
color: #d93025;
|
||||
}
|
||||
|
||||
/* Kanban Board */
|
||||
.kanban-board {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
overflow-x: auto;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.kanban-column {
|
||||
min-width: 200px;
|
||||
flex: 1;
|
||||
background: #f5f5f5;
|
||||
border-radius: 8px;
|
||||
padding: 0.75rem;
|
||||
}
|
||||
|
||||
.kanban-column h3 {
|
||||
margin: 0 0 0.75rem 0;
|
||||
font-size: 0.9rem;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.kanban-cards {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
min-height: 50px;
|
||||
}
|
||||
|
||||
.kanban-card {
|
||||
background: white;
|
||||
border: 1px solid #e0e0e0;
|
||||
border-radius: 6px;
|
||||
padding: 0.6rem;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.kanban-card-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.kanban-repo {
|
||||
display: inline-block;
|
||||
background: #e8f0fe;
|
||||
color: #1a73e8;
|
||||
padding: 1px 6px;
|
||||
border-radius: 3px;
|
||||
font-size: 0.7rem;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.kanban-desc {
|
||||
font-size: 0.75rem;
|
||||
color: #666;
|
||||
margin: 4px 0 0;
|
||||
}
|
||||
|
||||
.kanban-actions {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.kanban-move {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
padding: 2px 8px;
|
||||
font-size: 0.75rem;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.kanban-move:hover {
|
||||
background: #e8f0fe;
|
||||
border-color: #1a73e8;
|
||||
color: #1a73e8;
|
||||
}
|
||||
|
||||
.kanban-empty {
|
||||
color: #999;
|
||||
font-size: 0.8rem;
|
||||
text-align: center;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
.btn-delete-project {
|
||||
background: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
color: #aaa;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.btn-delete-project:hover {
|
||||
color: #d93025;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.kanban-board {
|
||||
flex-direction: column;
|
||||
}
|
||||
.kanban-column {
|
||||
min-width: unset;
|
||||
}
|
||||
}
|
||||
|
||||
/* Email sender subtitle */
|
||||
.task-sender {
|
||||
font-size: 0.8rem;
|
||||
color: #7b1fa2;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
/* --- Calls View --- */
|
||||
.call-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0.75rem 0;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
}
|
||||
|
||||
.call-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.call-item a[href^="tel:"] {
|
||||
color: #1a73e8;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.call-item a[href^="tel:"]:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.btn-call {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 0.85rem;
|
||||
padding: 2px 6px;
|
||||
line-height: 1;
|
||||
color: #555;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.btn-call:hover {
|
||||
background: #e8f0fe;
|
||||
border-color: #1a73e8;
|
||||
color: #1a73e8;
|
||||
}
|
||||
|
||||
.btn-call-done {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 0.85rem;
|
||||
padding: 4px 10px;
|
||||
line-height: 1;
|
||||
color: #555;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.btn-call-done:hover {
|
||||
background: #e6f4ea;
|
||||
border-color: #34a853;
|
||||
color: #34a853;
|
||||
}
|
||||
|
||||
.btn-call-delete {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 0.85rem;
|
||||
padding: 4px 10px;
|
||||
line-height: 1;
|
||||
color: #555;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.btn-call-delete:hover {
|
||||
background: #fce8e6;
|
||||
border-color: #d93025;
|
||||
color: #d93025;
|
||||
}
|
||||
|
||||
/* Priority badge: low (missing variant) */
|
||||
.priority-badge.priority-4 {
|
||||
background: #f5f5f5;
|
||||
color: #757575;
|
||||
}
|
||||
|
||||
/* Inline phone edit in calls view */
|
||||
.call-phone-input {
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
padding: 2px 6px;
|
||||
font-size: 0.85rem;
|
||||
width: 140px;
|
||||
transition: border-color 0.15s;
|
||||
}
|
||||
|
||||
.call-phone-input:focus {
|
||||
outline: none;
|
||||
border-color: #1a73e8;
|
||||
}
|
||||
|
||||
/* Snooze button */
|
||||
.btn-snooze {
|
||||
background: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
font-size: 0.85rem;
|
||||
padding: 2px 6px;
|
||||
line-height: 1;
|
||||
color: #555;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.btn-snooze:hover {
|
||||
background: #fef7e0;
|
||||
border-color: #ea8600;
|
||||
color: #ea8600;
|
||||
}
|
||||
|
||||
/* Label badges */
|
||||
.label-badge {
|
||||
display: inline-block;
|
||||
padding: 1px 6px;
|
||||
border-radius: 10px;
|
||||
font-size: 0.7rem;
|
||||
background: #e0f2f1;
|
||||
color: #00695c;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
/* --- Conflict Resolution --- */
|
||||
|
||||
/* Conflict badge on task items */
|
||||
.conflict-badge {
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
font-size: 0.9rem;
|
||||
margin-left: 6px;
|
||||
animation: conflict-pulse 2s infinite;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.conflict-badge:hover {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
|
||||
@keyframes conflict-pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.5; }
|
||||
}
|
||||
|
||||
/* Task item with conflict highlight */
|
||||
.task-item.has-conflict {
|
||||
border-left: 3px solid #ea8600;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
|
||||
/* Conflict notice on dashboard */
|
||||
.conflict-notice {
|
||||
background: #fef7e0;
|
||||
border: 1px solid #ea8600;
|
||||
border-left: 4px solid #ea8600;
|
||||
border-radius: 6px;
|
||||
padding: 0.75rem 1rem;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 0.9rem;
|
||||
color: #5d4e37;
|
||||
}
|
||||
|
||||
.conflict-notice a {
|
||||
color: #1a73e8;
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Conflict modal overlay */
|
||||
.conflict-modal-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 10000;
|
||||
}
|
||||
|
||||
.conflict-modal {
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
padding: 1.5rem;
|
||||
max-width: 700px;
|
||||
width: 90%;
|
||||
max-height: 80vh;
|
||||
overflow-y: auto;
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.conflict-modal h3 {
|
||||
margin: 0 0 0.5rem 0;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.conflict-comparison {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 1rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.conflict-comparison {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.conflict-version {
|
||||
border: 1px solid #e0e0e0;
|
||||
border-radius: 8px;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.conflict-version h4 {
|
||||
margin: 0 0 0.75rem 0;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.conflict-local {
|
||||
border-color: #1a73e8;
|
||||
background: #f8fbff;
|
||||
}
|
||||
|
||||
.conflict-remote {
|
||||
border-color: #ea8600;
|
||||
background: #fffdf5;
|
||||
}
|
||||
|
||||
.conflict-field {
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 0.5rem;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.conflict-field strong {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.conflict-actions {
|
||||
display: flex;
|
||||
gap: 0.75rem;
|
||||
margin-top: 1rem;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.conflict-btn-local {
|
||||
background: #1a73e8 !important;
|
||||
color: white !important;
|
||||
border: none !important;
|
||||
padding: 8px 16px !important;
|
||||
border-radius: 4px !important;
|
||||
cursor: pointer !important;
|
||||
font-weight: 500 !important;
|
||||
}
|
||||
|
||||
.conflict-btn-local:hover {
|
||||
background: #1557b0 !important;
|
||||
}
|
||||
|
||||
.conflict-btn-remote {
|
||||
background: #ea8600 !important;
|
||||
color: white !important;
|
||||
border: none !important;
|
||||
padding: 8px 16px !important;
|
||||
border-radius: 4px !important;
|
||||
cursor: pointer !important;
|
||||
font-weight: 500 !important;
|
||||
}
|
||||
|
||||
.conflict-btn-remote:hover {
|
||||
background: #c77200 !important;
|
||||
}
|
||||
|
||||
.conflict-btn-cancel {
|
||||
background: #f5f5f5 !important;
|
||||
color: #555 !important;
|
||||
border: 1px solid #ddd !important;
|
||||
padding: 8px 16px !important;
|
||||
border-radius: 4px !important;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
.conflict-btn-cancel:hover {
|
||||
background: #e8e8e8 !important;
|
||||
}
|
||||
@@ -0,0 +1,224 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>OrgMyLife</title>
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=17">
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>OrgMyLife</h1>
|
||||
<p>Your tidy coordination system.</p>
|
||||
<nav class="top-nav" style="margin-top: 15px;">
|
||||
<button id="nav-dashboard" class="nav-btn active">Dashboard</button>
|
||||
<button id="nav-tasks" class="nav-btn">All Tasks</button>
|
||||
<button id="nav-projects" class="nav-btn">Projects</button>
|
||||
<button id="nav-calls" class="nav-btn">📞 Calls</button>
|
||||
<button id="nav-digest" class="nav-btn">Daily Digest</button>
|
||||
<button id="nav-retro" class="nav-btn">Weekly Retro</button>
|
||||
</nav>
|
||||
<div class="actions" style="margin-top: 10px;">
|
||||
<button id="sync-all-btn" class="btn" style="padding: 8px 16px; cursor: pointer; background: #1a73e8; color: white; border: none; border-radius: 4px; font-weight: 500;">⟳ Sync All</button>
|
||||
<button id="sync-backlog-btn" class="btn" style="padding: 8px 16px; cursor: pointer;">Sync Backlog</button>
|
||||
<button id="sync-todo-btn" class="btn" style="padding: 8px 16px; cursor: pointer;">Sync ToDo</button>
|
||||
<button id="sync-email-btn" class="btn" style="padding: 8px 16px; cursor: pointer;">Sync Email</button>
|
||||
<button id="sync-gmail-btn" class="btn" style="padding: 8px 16px; cursor: pointer;">Sync Gmail</button>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
<div id="dashboard">
|
||||
<section id="digest-section" class="card">
|
||||
<h2>Daily Digest</h2>
|
||||
<p id="digest-content">Loading your digest...</p>
|
||||
<div id="suggestions-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="grid-2">
|
||||
<section id="priorities-section" class="card">
|
||||
<h2>Top Priorities</h2>
|
||||
<ul id="priorities-list" class="tidy-list">
|
||||
<li>Loading priorities...</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section id="calendar-section" class="card">
|
||||
<h2>Today's Calendar</h2>
|
||||
<ul id="calendar-list" class="tidy-list">
|
||||
<li>Loading events...</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="all-tasks-view" style="display: none; flex-direction: column; gap: 1.5rem;">
|
||||
<section class="card">
|
||||
<h2 id="form-heading">Add New Task</h2>
|
||||
<form id="add-task-form" style="display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-top: 10px;">
|
||||
<input type="hidden" id="task-edit-id" value="">
|
||||
<input type="text" id="task-title" placeholder="Task Title" required maxlength="200" style="flex: 1; min-width: 200px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<input type="text" id="task-desc" placeholder="Details (optional)" maxlength="5000" style="flex: 2; min-width: 200px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<input type="date" id="task-due" style="padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<select id="task-priority" style="padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<option value="4">Low</option>
|
||||
<option value="3">Medium</option>
|
||||
<option value="2">High</option>
|
||||
<option value="1">Very High</option>
|
||||
</select>
|
||||
<input type="text" id="task-labels" placeholder="Labels (comma-separated)" maxlength="200" style="min-width: 160px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<button type="submit" id="form-submit-btn" class="btn" style="padding: 8px 16px; background: #1a73e8; color: white; border: none; border-radius: 4px; cursor: pointer;">Add</button>
|
||||
<button type="button" id="form-cancel-btn" class="btn" style="padding: 8px 16px; background: #666; color: white; border: none; border-radius: 4px; cursor: pointer; display: none;">Cancel</button>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2>All Open Tasks <small style="font-weight: normal; font-size: 0.75rem; color: #888;">drag to reorder</small></h2>
|
||||
<div class="sort-bar">
|
||||
<span style="font-size: 0.85rem; color: #666;">Sort:</span>
|
||||
<button class="sort-btn active" data-sort="">Manual</button>
|
||||
<button class="sort-btn" data-sort="priority">Priority</button>
|
||||
<button class="sort-btn" data-sort="due_date">Due Date</button>
|
||||
<button class="sort-btn" data-sort="created">Created</button>
|
||||
<span style="font-size: 0.85rem; color: #666; margin-left: 1rem;">Filter:</span>
|
||||
<select id="filter-origin" style="padding: 3px 8px; font-size: 0.8rem; border: 1px solid #ddd; border-radius: 4px;">
|
||||
<option value="">All sources</option>
|
||||
<option value="manual">Manual</option>
|
||||
<option value="nextcloud_todo">Nextcloud</option>
|
||||
<option value="dhive_email">Email</option>
|
||||
</select>
|
||||
<select id="filter-agent" style="padding: 3px 8px; font-size: 0.8rem; border: 1px solid #ddd; border-radius: 4px;">
|
||||
<option value="">All</option>
|
||||
<option value="true">🤖 Agent</option>
|
||||
<option value="false">Manual only</option>
|
||||
</select>
|
||||
<select id="filter-label" style="padding: 3px 8px; font-size: 0.8rem; border: 1px solid #ddd; border-radius: 4px;">
|
||||
<option value="">All labels</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul id="all-tasks-list" class="tidy-list">
|
||||
<li>Loading tasks...</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div id="digest-view" style="display: none; flex-direction: column; gap: 1.5rem;">
|
||||
<section class="card">
|
||||
<h2 id="digest-greeting">Loading...</h2>
|
||||
<p id="digest-date" style="color: #666;"></p>
|
||||
</section>
|
||||
<div class="grid-2">
|
||||
<section class="card">
|
||||
<h2>⚠️ Overdue</h2>
|
||||
<ul id="digest-overdue" class="tidy-list"><li>Loading...</li></ul>
|
||||
</section>
|
||||
<section class="card">
|
||||
<h2>📅 Due Today</h2>
|
||||
<ul id="digest-due-today" class="tidy-list"><li>Loading...</li></ul>
|
||||
</section>
|
||||
</div>
|
||||
<div class="grid-2">
|
||||
<section class="card">
|
||||
<h2>🎯 Top Priorities</h2>
|
||||
<ul id="digest-top-tasks" class="tidy-list"><li>Loading...</li></ul>
|
||||
</section>
|
||||
<section class="card">
|
||||
<h2>📆 Today's Schedule</h2>
|
||||
<ul id="digest-events" class="tidy-list"><li>Loading...</li></ul>
|
||||
</section>
|
||||
</div>
|
||||
<section id="digest-calls-section" class="card" style="display: none;">
|
||||
<h2>📞 Calls to make</h2>
|
||||
<ul id="digest-calls" class="tidy-list"></ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div id="retro-view" style="display: none; flex-direction: column; gap: 1.5rem;">
|
||||
<section class="card">
|
||||
<h2>📊 Weekly Retrospective</h2>
|
||||
<p id="retro-period" style="color: #666;"></p>
|
||||
</section>
|
||||
<div class="grid-2">
|
||||
<section class="card">
|
||||
<h2>Summary</h2>
|
||||
<div id="retro-summary"></div>
|
||||
</section>
|
||||
<section class="card">
|
||||
<h2>Backlog Health</h2>
|
||||
<div id="retro-health"></div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="grid-2">
|
||||
<section class="card">
|
||||
<h2>Priority Breakdown</h2>
|
||||
<div id="retro-priorities"></div>
|
||||
</section>
|
||||
<section class="card">
|
||||
<h2>⚠️ Still Overdue</h2>
|
||||
<ul id="retro-overdue" class="tidy-list"><li>Loading...</li></ul>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="projects-view" style="display: none; flex-direction: column; gap: 1.5rem;">
|
||||
<section class="card">
|
||||
<h2>AI Projects Board</h2>
|
||||
<p style="color: #666; margin-top: 0;">Manage your AI agent tasks across repos</p>
|
||||
<form id="add-project-task-form" style="display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px;">
|
||||
<input type="text" id="pt-title" placeholder="Task title" required maxlength="200" style="flex: 2; min-width: 180px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<input type="text" id="pt-repo" placeholder="Repo (e.g. OrgMyLife)" maxlength="100" style="flex: 1; min-width: 120px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<button type="submit" class="btn" style="padding: 8px 16px; background: #1a73e8; color: white; border: none; border-radius: 4px; cursor: pointer;">Add</button>
|
||||
</form>
|
||||
</section>
|
||||
<div class="kanban-board">
|
||||
<div class="kanban-column" data-status="backlog">
|
||||
<h3>📋 Backlog</h3>
|
||||
<div class="kanban-cards" id="kanban-backlog"></div>
|
||||
</div>
|
||||
<div class="kanban-column" data-status="ready">
|
||||
<h3>🟢 Ready</h3>
|
||||
<div class="kanban-cards" id="kanban-ready"></div>
|
||||
</div>
|
||||
<div class="kanban-column" data-status="in_progress">
|
||||
<h3>⚙️ In Progress</h3>
|
||||
<div class="kanban-cards" id="kanban-in_progress"></div>
|
||||
</div>
|
||||
<div class="kanban-column" data-status="blocked">
|
||||
<h3>🚫 Blocked</h3>
|
||||
<div class="kanban-cards" id="kanban-blocked"></div>
|
||||
</div>
|
||||
<div class="kanban-column" data-status="review">
|
||||
<h3>👁 Review</h3>
|
||||
<div class="kanban-cards" id="kanban-review"></div>
|
||||
</div>
|
||||
<div class="kanban-column" data-status="done">
|
||||
<h3>✅ Done</h3>
|
||||
<div class="kanban-cards" id="kanban-done"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="calls-view" style="display: none; flex-direction: column; gap: 1.5rem;">
|
||||
<section class="card">
|
||||
<h2>📞 Call List</h2>
|
||||
<p style="color: #666; margin-top: 0;">Pending phone calls to make</p>
|
||||
<form id="add-call-form" style="display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; align-items: center;">
|
||||
<input type="text" id="call-person" placeholder="Person" required maxlength="200" style="flex: 1; min-width: 140px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<input type="text" id="call-reason" placeholder="Reason" required maxlength="500" style="flex: 2; min-width: 160px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<input type="text" id="call-phone" placeholder="Phone (optional)" maxlength="30" style="width: 140px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<select id="call-priority" style="padding: 8px; border: 1px solid #ccc; border-radius: 4px;">
|
||||
<option value="4">Low</option>
|
||||
<option value="3" selected>Medium</option>
|
||||
<option value="2">High</option>
|
||||
<option value="1">Very High</option>
|
||||
</select>
|
||||
<button type="submit" class="btn" style="padding: 8px 16px; background: #1a73e8; color: white; border: none; border-radius: 4px; cursor: pointer;">Add Call</button>
|
||||
</form>
|
||||
</section>
|
||||
<section class="card">
|
||||
<div id="calls-list"></div>
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
<script src="/static/js/app.js?v=20"></script>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user