|
@@ -0,0 +1,450 @@
|
|
|
|
|
+// ProjectDetailModal Styles
|
|
|
|
|
+.overlay {
|
|
|
|
|
+ position: fixed;
|
|
|
|
|
+ top: 0;
|
|
|
|
|
+ left: 0;
|
|
|
|
|
+ right: 0;
|
|
|
|
|
+ bottom: 0;
|
|
|
|
|
+ background: rgba(0, 0, 0, 0.5);
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ z-index: 1000;
|
|
|
|
|
+ padding: var(--spacing-base);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.modal {
|
|
|
|
|
+ background: var(--theme-background);
|
|
|
|
|
+ border-radius: var(--corner-radius-medium);
|
|
|
|
|
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
|
|
|
+ max-width: 900px;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ max-height: 90vh;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.header {
|
|
|
|
|
+ padding: var(--spacing-base);
|
|
|
|
|
+ border-bottom: 1px solid var(--theme-border);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.headerContent {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.title {
|
|
|
|
|
+ font-size: var(--font-size-headline-small);
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.closeButton {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ width: 32px;
|
|
|
|
|
+ height: 32px;
|
|
|
|
|
+ border-radius: var(--corner-radius-small);
|
|
|
|
|
+ border: none;
|
|
|
|
|
+ background: transparent;
|
|
|
|
|
+ color: var(--theme-paragraph-subtle);
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ transition: all 0.2s;
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: var(--theme-background-secondary);
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.content {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ overflow-y: auto;
|
|
|
|
|
+ padding: var(--spacing-base);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.loadingState,
|
|
|
|
|
+.errorState {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ padding: var(--spacing-widest);
|
|
|
|
|
+ gap: var(--spacing-base);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.spinner {
|
|
|
|
|
+ width: 40px;
|
|
|
|
|
+ height: 40px;
|
|
|
|
|
+ border: 3px solid var(--theme-background-secondary);
|
|
|
|
|
+ border-top-color: var(--theme-button);
|
|
|
|
|
+ border-radius: 50%;
|
|
|
|
|
+ animation: spin 0.8s linear infinite;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@keyframes spin {
|
|
|
|
|
+ to {
|
|
|
|
|
+ transform: rotate(360deg);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.errorState {
|
|
|
|
|
+ color: var(--theme-error);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section {
|
|
|
|
|
+ margin-bottom: var(--spacing-widest);
|
|
|
|
|
+
|
|
|
|
|
+ &:last-child {
|
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.sectionHeader {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ margin-bottom: var(--spacing-base);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.sectionTitle {
|
|
|
|
|
+ font-size: var(--font-size-title-large);
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.description {
|
|
|
|
|
+ font-size: var(--font-size-body-medium);
|
|
|
|
|
+ color: var(--theme-paragraph);
|
|
|
|
|
+ margin-bottom: var(--spacing-base);
|
|
|
|
|
+ line-height: 1.6;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.editButton,
|
|
|
|
|
+.createButton {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: var(--spacing-tighter);
|
|
|
|
|
+ padding: var(--spacing-tight) var(--spacing-base);
|
|
|
|
|
+ border-radius: var(--corner-radius-small);
|
|
|
|
|
+ border: 1px solid var(--theme-border);
|
|
|
|
|
+ background: var(--theme-background);
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+ font-size: var(--font-size-body-small);
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ transition: all 0.2s;
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: var(--theme-background-secondary);
|
|
|
|
|
+ border-color: var(--theme-button);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.createButton {
|
|
|
|
|
+ background: var(--theme-button);
|
|
|
|
|
+ color: var(--theme-button-text);
|
|
|
|
|
+ border-color: var(--theme-button);
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: var(--theme-button-hover);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.infoGrid {
|
|
|
|
|
+ display: grid;
|
|
|
|
|
+ grid-template-columns: repeat(2, 1fr);
|
|
|
|
|
+ gap: var(--spacing-base);
|
|
|
|
|
+ margin-bottom: var(--spacing-base);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.infoItem {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ gap: var(--spacing-tighter);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.infoLabel {
|
|
|
|
|
+ font-size: var(--font-size-body-small);
|
|
|
|
|
+ color: var(--theme-paragraph-subtle);
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.infoValue {
|
|
|
|
|
+ font-size: var(--font-size-body-medium);
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.configSection {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ gap: var(--spacing-tighter);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.configCode {
|
|
|
|
|
+ font-family: var(--font-family-monospace);
|
|
|
|
|
+ font-size: var(--font-size-body-small);
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+ background: var(--theme-background-secondary);
|
|
|
|
|
+ padding: var(--spacing-base);
|
|
|
|
|
+ border-radius: var(--corner-radius-small);
|
|
|
|
|
+ border: 1px solid var(--theme-border);
|
|
|
|
|
+ overflow-x: auto;
|
|
|
|
|
+ white-space: pre-wrap;
|
|
|
|
|
+ word-break: break-all;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.taskList {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ gap: var(--spacing-tight);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.taskItem {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ padding: var(--spacing-base);
|
|
|
|
|
+ border-radius: var(--corner-radius-small);
|
|
|
|
|
+ border: 1px solid var(--theme-border);
|
|
|
|
|
+ background: var(--theme-background);
|
|
|
|
|
+ transition: all 0.2s;
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: var(--theme-background-secondary);
|
|
|
|
|
+ border-color: var(--theme-button);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.taskInfo {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ gap: var(--spacing-tighter);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.taskName {
|
|
|
|
|
+ font-size: var(--font-size-body-medium);
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.taskMeta {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: var(--spacing-base);
|
|
|
|
|
+ flex-wrap: wrap;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.badge {
|
|
|
|
|
+ display: inline-flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ padding: 2px var(--spacing-tight);
|
|
|
|
|
+ border-radius: var(--corner-radius-smallest);
|
|
|
|
|
+ font-size: var(--font-size-body-small);
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.badgePending {
|
|
|
|
|
+ background: rgba(156, 163, 175, 0.1);
|
|
|
|
|
+ color: rgb(75, 85, 99);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.badgeInProgress {
|
|
|
|
|
+ background: rgba(59, 130, 246, 0.1);
|
|
|
|
|
+ color: rgb(37, 99, 235);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.badgeCompleted {
|
|
|
|
|
+ background: rgba(34, 197, 94, 0.1);
|
|
|
|
|
+ color: rgb(22, 163, 74);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.taskProgress {
|
|
|
|
|
+ font-size: var(--font-size-body-small);
|
|
|
|
|
+ color: var(--theme-paragraph-subtle);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.taskAssignee {
|
|
|
|
|
+ font-size: var(--font-size-body-small);
|
|
|
|
|
+ color: var(--theme-paragraph-subtle);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.taskActions {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: var(--spacing-tight);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.actionButton {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ width: 32px;
|
|
|
|
|
+ height: 32px;
|
|
|
|
|
+ border-radius: var(--corner-radius-small);
|
|
|
|
|
+ border: 1px solid var(--theme-border);
|
|
|
|
|
+ background: var(--theme-background);
|
|
|
|
|
+ color: var(--theme-paragraph-subtle);
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ transition: all 0.2s;
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: var(--theme-background-secondary);
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+ border-color: var(--theme-button);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.actionButtonPrimary {
|
|
|
|
|
+ background: var(--theme-button);
|
|
|
|
|
+ color: var(--theme-button-text);
|
|
|
|
|
+ border-color: var(--theme-button);
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: var(--theme-button-hover);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.actionButtonDanger {
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: var(--theme-error);
|
|
|
|
|
+ color: white;
|
|
|
|
|
+ border-color: var(--theme-error);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.emptyState {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ padding: var(--spacing-widest);
|
|
|
|
|
+ gap: var(--spacing-base);
|
|
|
|
|
+ color: var(--theme-paragraph-subtle);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.emptyButton {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: var(--spacing-tighter);
|
|
|
|
|
+ padding: var(--spacing-tight) var(--spacing-base);
|
|
|
|
|
+ border-radius: var(--corner-radius-small);
|
|
|
|
|
+ border: 1px solid var(--theme-border);
|
|
|
|
|
+ background: var(--theme-button);
|
|
|
|
|
+ color: var(--theme-button-text);
|
|
|
|
|
+ font-size: var(--font-size-body-small);
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ transition: all 0.2s;
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: var(--theme-button-hover);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Dialog styles for nested dialogs
|
|
|
|
|
+.dialogOverlay {
|
|
|
|
|
+ position: fixed;
|
|
|
|
|
+ top: 0;
|
|
|
|
|
+ left: 0;
|
|
|
|
|
+ right: 0;
|
|
|
|
|
+ bottom: 0;
|
|
|
|
|
+ background: rgba(0, 0, 0, 0.5);
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ z-index: 1100;
|
|
|
|
|
+ padding: var(--spacing-base);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.dialog {
|
|
|
|
|
+ background: var(--theme-background);
|
|
|
|
|
+ border-radius: var(--corner-radius-medium);
|
|
|
|
|
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
|
|
|
+ max-width: 600px;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ max-height: 90vh;
|
|
|
|
|
+ overflow-y: auto;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.dialogSmall {
|
|
|
|
|
+ background: var(--theme-background);
|
|
|
|
|
+ border-radius: var(--corner-radius-medium);
|
|
|
|
|
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
|
|
|
+ max-width: 450px;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.dialogHeader {
|
|
|
|
|
+ padding: var(--spacing-base);
|
|
|
|
|
+ border-bottom: 1px solid var(--theme-border);
|
|
|
|
|
+
|
|
|
|
|
+ h2 {
|
|
|
|
|
+ font-size: var(--font-size-title-large);
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+ margin: 0 0 var(--spacing-tight) 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ p {
|
|
|
|
|
+ font-size: var(--font-size-body-medium);
|
|
|
|
|
+ color: var(--theme-paragraph);
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+ line-height: 1.6;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.dialogTitleDanger {
|
|
|
|
|
+ color: var(--theme-error) !important;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.dialogFooter {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
|
+ gap: var(--spacing-base);
|
|
|
|
|
+ padding: var(--spacing-base);
|
|
|
|
|
+ border-top: 1px solid var(--theme-border);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.cancelButton,
|
|
|
|
|
+.deleteButton {
|
|
|
|
|
+ padding: var(--spacing-tight) var(--spacing-base);
|
|
|
|
|
+ border-radius: var(--corner-radius-small);
|
|
|
|
|
+ font-size: var(--font-size-body-medium);
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ transition: all 0.2s;
|
|
|
|
|
+ border: 1px solid var(--theme-border);
|
|
|
|
|
+
|
|
|
|
|
+ &:disabled {
|
|
|
|
|
+ opacity: 0.5;
|
|
|
|
|
+ cursor: not-allowed;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.cancelButton {
|
|
|
|
|
+ background: var(--theme-background);
|
|
|
|
|
+ color: var(--theme-headline);
|
|
|
|
|
+
|
|
|
|
|
+ &:hover:not(:disabled) {
|
|
|
|
|
+ background: var(--theme-background-secondary);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.deleteButton {
|
|
|
|
|
+ background: var(--theme-error);
|
|
|
|
|
+ color: white;
|
|
|
|
|
+ border-color: var(--theme-error);
|
|
|
|
|
+
|
|
|
|
|
+ &:hover:not(:disabled) {
|
|
|
|
|
+ opacity: 0.9;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|