:root { /* Color Palette */ --color-forest: #1a472a; /* Hovedfarge - Dyp skogsgrønn */ --color-sea: #0f2b3e; /* Sekundærfarge - Mørk blågrønn/skifer */ --color-moss: #88a090; /* Aksentfarge - Lav/Mose */ --color-light-bg: #f4f7f5; /* Bakgrunn Light Mode - Tåke */ --color-dark-bg: #121212; /* Bakgrunn Dark Mode - Dyp natt */ --color-text-light: #121212; --color-text-dark: #f4f7f5; --color-white: #ffffff; --color-error: #e74c3c; /* Fonts */ --font-main: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; /* Spacing */ --spacing-sm: 8px; --spacing-md: 16px; --spacing-lg: 24px; /* Transitions */ --transition-speed: 0.3s; } /* Reset & Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-main); background-color: var(--color-light-bg); color: var(--color-text-light); transition: background-color var(--transition-speed), color var(--transition-speed); height: 100vh; display: flex; flex-direction: column; overflow: hidden; } /* Dark Mode */ body.dark-mode { background-color: var(--color-dark-bg); color: var(--color-text-dark); } /* Navigation */ .top-nav { background-color: var(--color-forest); color: var(--color-white); padding: var(--spacing-md) var(--spacing-lg); display: flex; justify-content: space-between; align-items: center; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); z-index: 100; } .nav-brand { font-size: 1.5rem; font-weight: bold; letter-spacing: 1px; } .nav-tabs { display: flex; gap: var(--spacing-md); } .nav-btn { background: none; border: none; color: rgba(255, 255, 255, 0.7); font-size: 1rem; cursor: pointer; padding: var(--spacing-sm) var(--spacing-md); border-radius: 4px; transition: all var(--transition-speed); } .nav-btn:hover, .nav-btn.active { color: var(--color-white); background-color: rgba(255, 255, 255, 0.1); } .nav-controls { display: flex; gap: var(--spacing-md); align-items: center; } .icon-btn { background: none; border: none; font-size: 1.2rem; cursor: pointer; color: var(--color-white); } .text-btn { background: none; border: 1px solid rgba(255, 255, 255, 0.5); color: var(--color-white); padding: 4px 12px; border-radius: 4px; cursor: pointer; } .text-btn:hover { background-color: rgba(255, 255, 255, 0.1); } /* Main Content */ #main-content { flex: 1; position: relative; overflow: hidden; } .tab-content { display: none; height: 100%; width: 100%; } .tab-content.active { display: block; } /* Tree View */ #tree-container { width: 100%; height: 100%; position: relative; overflow: auto; /* Allow scrolling if tree is large */ background-image: radial-gradient(circle, #ddd 1px, transparent 1px); /* Grid dots */ background-size: 20px 20px; } body.dark-mode #tree-container { background-image: radial-gradient(circle, #333 1px, transparent 1px); } #relationship-lines { position: absolute; top: 0; left: 0; width: 100%; /* Will need to update dynamically via JS */ height: 100%; pointer-events: none; /* Let clicks pass through to cards */ z-index: 0; } .family-card { position: absolute; background-color: var(--color-white); color: var(--color-text-light); padding: var(--spacing-md); border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); width: 200px; text-align: center; cursor: pointer; z-index: 1; border: 2px solid transparent; transition: transform 0.2s, box-shadow 0.2s; } body.dark-mode .family-card { background-color: var(--color-sea); color: var(--color-white); border: 1px solid var(--color-moss); } .family-card:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2); border-color: var(--color-forest); } .card-name { font-weight: bold; font-size: 1.1rem; margin-bottom: 4px; } .card-dates { font-size: 0.9rem; color: #666; } body.dark-mode .card-dates { color: #aaa; } /* Map View */ #map { width: 100%; height: 100%; } /* History View */ .history-container { max-width: 800px; margin: 0 auto; padding: var(--spacing-lg); overflow-y: auto; height: 100%; } #history-list { list-style: none; border-left: 2px solid var(--color-moss); padding-left: var(--spacing-lg); } .history-item { margin-bottom: var(--spacing-lg); position: relative; } .history-item::before { content: ''; position: absolute; left: calc(-1 * var(--spacing-lg) - 5px); top: 6px; width: 10px; height: 10px; background-color: var(--color-forest); border-radius: 50%; } .history-year { font-weight: bold; color: var(--color-moss); } /* Floating Action Button */ .fab { position: absolute; bottom: 32px; right: 32px; width: 56px; height: 56px; border-radius: 50%; background-color: var(--color-forest); color: var(--color-white); border: none; font-size: 24px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: transform 0.2s; z-index: 10; } .fab:hover { transform: scale(1.1); } /* Modals */ .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); display: flex; justify-content: center; align-items: center; z-index: 1000; backdrop-filter: blur(5px); } .modal-content { background-color: var(--color-white); padding: var(--spacing-lg); border-radius: 8px; width: 90%; max-width: 500px; position: relative; } body.dark-mode .modal-content { background-color: var(--color-sea); color: var(--color-white); border: 1px solid var(--color-moss); } .close-modal { position: absolute; top: var(--spacing-sm); right: var(--spacing-md); font-size: 1.5rem; cursor: pointer; } /* Forms */ .form-group { margin-bottom: var(--spacing-md); } .form-row { display: flex; gap: var(--spacing-md); } .form-row .form-group { flex: 1; } label { display: block; margin-bottom: 4px; font-weight: 500; } input, textarea { width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; font-family: inherit; } body.dark-mode input, body.dark-mode textarea { background-color: rgba(0, 0, 0, 0.2); border-color: var(--color-moss); color: var(--color-white); } .primary-btn { background-color: var(--color-forest); color: var(--color-white); border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; width: 100%; font-size: 1rem; margin-top: var(--spacing-md); } .primary-btn:hover { background-color: #143620; } .error-msg { color: var(--color-error); margin-top: var(--spacing-sm); font-size: 0.9rem; }