diff --git a/css/style.css b/css/style.css
index 993a1d6..7e07b2f 100644
--- a/css/style.css
+++ b/css/style.css
@@ -1,1196 +1,1047 @@
/* =========================================
GOOGLE FONT
========================================= */
-@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');
-
+@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap");
/* =========================================
RESET
========================================= */
* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+/* =========================================
+ VARIABLES
+========================================= */
+
+:root {
+ --primary: #2f6b4f;
+ --primary-dark: #24553e;
+ --primary-light: #e8f3ed;
+ --footer: #17251e;
+
+ --heading: #17251e;
+ --text: #66736c;
+ --white: #ffffff;
+
+ --border: #dfe6e1;
+ --background: #f7f9f7;
+ --surface: #ffffff;
+ --surface-secondary: #eef3ef;
+
+ --input-background: #ffffff;
+ --button-secondary: #edf1ee;
+
+ --tree-line: #b8c9bf;
+ --tree-card: #fbfcfb;
+ --tree-title: #edf5f0;
+
+ --danger: #d9534f;
+
+ --overlay: rgba(10, 20, 15, 0.6);
+
+ --radius: 14px;
+ --shadow: 0 8px 30px rgba(24, 50, 37, 0.08);
+}
+
+[data-theme="dark"] {
+ --primary: #6fa889;
+ --primary-dark: #5b8f72;
+ --primary-light: #1e3027;
+ --footer: #51876c;
+
+ --heading: #e8f0eb;
+ --text: #aebbb3;
+
+ /* Main page background */
+ --background: #0d0f0e;
+
+ /* Main surfaces */
+ --surface: #151817;
+ --surface-secondary: #1b1e1c;
+
+ /* Inputs */
+ --input-background: #171a19;
+
+ /* Secondary buttons */
+ --button-secondary: #242825;
+
+ /* Tree */
+ --tree-line: #3b4540;
+ --tree-card: #181b1a;
+ --tree-title: #1c2821;
+
+ --border: #2c312e;
+
+ --overlay: rgba(0, 0, 0, 0.7);
+
+ --shadow: 0 8px 30px rgba(0, 0, 0, 0.35);
+}
+
+/* =========================================
+ RESET
+ ========================================= */
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
}
html {
- scroll-behavior: smooth;
+ scroll-behavior: smooth;
}
body {
- font-family: "Inter", sans-serif;
- background: #f7f9f7;
- color: #1d2b24;
- line-height: 1.6;
+ font-family: "Inter", sans-serif;
+ background: var(--background);
+ color: var(--text);
+ line-height: 1.6;
}
button,
input,
select,
textarea {
- font: inherit;
+ font: inherit;
}
button {
- cursor: pointer;
+ cursor: pointer;
}
a {
- text-decoration: none;
- color: inherit;
+ text-decoration: none;
+ color: inherit;
}
img {
- max-width: 100%;
- display: block;
+ max-width: 100%;
+ display: block;
}
-
/* =========================================
- VARIABLES
-========================================= */
-:root {
- --primary: #2f6b4f;
- --primary-dark: #24553e;
- --primary-light: #e8f3ed;
-
- --heading: #17251e;
- --text: #66736c;
- --white: #ffffff;
-
- --border: #dfe6e1;
- --background: #f7f9f7;
+ GLOBAL
+ ========================================= */
- --danger: #d9534f;
-
- --radius: 14px;
- --shadow: 0 8px 30px rgba(24, 50, 37, 0.08);
-}
-
-
-/* =========================================
- GLOBAL
-========================================= */
.container {
- width: min(1180px, calc(100% - 40px));
- margin: 0 auto;
+ width: min(1180px, calc(100% - 40px));
+ margin: 0 auto;
}
section {
- padding: 90px 0;
+ padding: 90px 0;
}
h1,
h2,
h3 {
- color: var(--heading);
- line-height: 1.2;
+ color: var(--heading);
+ line-height: 1.2;
}
.section-label {
- display: inline-block;
- color: var(--primary);
- font-size: 14px;
- font-weight: 700;
- text-transform: uppercase;
- letter-spacing: 1px;
- margin-bottom: 8px;
+ display: inline-block;
+ color: var(--primary);
+ font-size: 14px;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ margin-bottom: 8px;
}
.section-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 30px;
- margin-bottom: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 30px;
+ margin-bottom: 40px;
}
.section-header h2 {
- font-size: 36px;
+ font-size: 36px;
}
-
/* =========================================
- BUTTONS
-========================================= */
+ BUTTONS
+ ========================================= */
+
.btn {
- border: 0;
- padding: 13px 22px;
- border-radius: 10px;
- font-weight: 600;
- transition: 0.25s ease;
+ border: 0;
+ padding: 13px 22px;
+ border-radius: 10px;
+ font-weight: 600;
+ transition: 0.25s ease;
}
.btn-primary {
- background: var(--primary);
- color: var(--white);
+ background: var(--primary);
+ color: var(--white);
}
.btn-primary:hover {
- background: var(--primary-dark);
- transform: translateY(-2px);
+ background: var(--primary-dark);
+ transform: translateY(-2px);
}
.btn-secondary {
- background: #edf1ee;
- color: var(--heading);
+ background: var(--button-secondary);
+ color: var(--heading);
}
.btn-secondary:hover {
- background: #dfe6e1;
+ background: var(--border);
}
+.toggle-theme-btn {
+ padding: 2px 4px;
+}
/* =========================================
- HEADER
-========================================= */
+ HEADER
+ ========================================= */
+
.site-header {
- position: sticky;
- top: 0;
- z-index: 100;
- background: rgba(255, 255, 255, 0.95);
- border-bottom: 1px solid var(--border);
- backdrop-filter: blur(12px);
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background: var(--surface);
+ border-bottom: 1px solid var(--border);
+ backdrop-filter: blur(12px);
}
.navbar {
- min-height: 74px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 30px;
+ min-height: 74px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 30px;
}
.logo {
- color: var(--primary);
- font-size: 24px;
- font-weight: 800;
+ color: var(--primary);
+ font-size: 24px;
+ font-weight: 800;
}
.nav-links {
- display: flex;
- list-style: none;
- gap: 35px;
+ display: flex;
+ list-style: none;
+ gap: 35px;
}
.nav-links a {
- color: var(--text);
- font-size: 15px;
- font-weight: 500;
- transition: 0.2s;
+ color: var(--text);
+ font-size: 15px;
+ font-weight: 500;
+ transition: 0.2s;
}
.nav-links a:hover {
- color: var(--primary);
+ color: var(--primary);
}
-
/* =========================================
- HERO
-========================================= */
+ HERO
+ ========================================= */
+
.hero {
- min-height: 650px;
- display: flex;
- align-items: center;
- background:
- radial-gradient(circle at 80% 30%, #dceee3 0%, transparent 30%),
- linear-gradient(135deg, #f7faf8, #edf5f0);
+ min-height: 650px;
+ display: flex;
+ align-items: center;
+
+ background:
+ radial-gradient(
+ circle at 80% 30%,
+ var(--primary-light) 0%,
+ transparent 30%
+ ),
+ linear-gradient(135deg, var(--background), var(--surface-secondary));
}
.hero-container {
- display: grid;
- grid-template-columns: 1fr 1fr;
- align-items: center;
- gap: 70px;
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ align-items: center;
+ gap: 70px;
}
.hero-badge {
- display: inline-block;
- padding: 8px 14px;
- border-radius: 30px;
- background: var(--primary-light);
- color: var(--primary);
- font-size: 13px;
- font-weight: 700;
- margin-bottom: 20px;
+ display: inline-block;
+ padding: 8px 14px;
+ border-radius: 30px;
+ background: var(--primary-light);
+ color: var(--primary);
+ font-size: 13px;
+ font-weight: 700;
+ margin-bottom: 20px;
}
.hero-content h1 {
- max-width: 650px;
- font-size: clamp(42px, 5vw, 68px);
- margin-bottom: 22px;
+ max-width: 650px;
+ font-size: clamp(42px, 5vw, 68px);
+ margin-bottom: 22px;
}
.hero-content p {
- max-width: 560px;
- color: var(--text);
- font-size: 18px;
- margin-bottom: 30px;
+ max-width: 560px;
+ color: var(--text);
+ font-size: 18px;
+ margin-bottom: 30px;
}
.hero-image {
- display: flex;
- justify-content: center;
+ display: flex;
+ justify-content: center;
}
.hero-placeholder {
- width: 100%;
- max-width: 500px;
- min-height: 400px;
- border-radius: 30px;
- background: var(--white);
- border: 1px solid var(--border);
- box-shadow: var(--shadow);
+ width: 100%;
+ max-width: 500px;
+ min-height: 400px;
+ border-radius: 30px;
+ background: var(--surface);
+ border: 1px solid var(--border);
+ box-shadow: var(--shadow);
- display: flex;
- align-items: center;
- justify-content: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
- color: var(--primary);
- font-size: 22px;
- font-weight: 700;
+ color: var(--primary);
+ font-size: 22px;
+ font-weight: 700;
}
-
/* =========================================
- FAMILY STATS
-========================================= */
+ FAMILY STATS
+ ========================================= */
+
.family-stats {
- padding: 0;
- position: relative;
- margin-top: -45px;
- z-index: 5;
+ padding: 0;
+ position: relative;
+ margin-top: -45px;
+ z-index: 5;
}
.stats-container {
- display: grid;
- grid-template-columns: repeat(4, 1fr);
- background: var(--white);
- border: 1px solid var(--border);
- border-radius: 20px;
- box-shadow: var(--shadow);
- overflow: hidden;
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ background: var(--surface);
+ border: 1px solid var(--border);
+ border-radius: 20px;
+ box-shadow: var(--shadow);
+ overflow: hidden;
}
.stat-card {
- text-align: center;
- padding: 30px 20px;
- border-right: 1px solid var(--border);
+ text-align: center;
+ padding: 30px 20px;
+ border-right: 1px solid var(--border);
}
.stat-card:last-child {
- border-right: none;
+ border-right: none;
}
.stat-card h3 {
- color: var(--primary);
- font-size: 32px;
- margin-bottom: 5px;
+ color: var(--primary);
+ font-size: 32px;
+ margin-bottom: 5px;
}
.stat-card p {
- color: var(--text);
- font-size: 14px;
+ color: var(--text);
+ font-size: 14px;
}
-
/* =========================================
- FAMILY TREE
-========================================= */
+ FAMILY TREE
+ ========================================= */
+
.family-tree-section {
- padding-top: 130px;
+ padding-top: 130px;
}
.tree-actions {
- display: flex;
- gap: 12px;
+ display: flex;
+ gap: 12px;
}
.tree-actions input,
.member-filters input,
.member-filters select {
- height: 46px;
- border: 1px solid var(--border);
- background: var(--white);
- border-radius: 10px;
- padding: 0 15px;
- outline: none;
- color: var(--heading);
+ height: 46px;
+ border: 1px solid var(--border);
+ background: var(--input-background);
+ border-radius: 10px;
+ padding: 0 15px;
+ outline: none;
+ color: var(--heading);
}
.tree-actions input {
- width: 260px;
+ width: 260px;
}
.tree-actions input:focus,
.member-filters input:focus,
.member-filters select:focus {
- border-color: var(--primary);
+ border-color: var(--primary);
}
.tree-wrapper {
- background: var(--white);
- border: 1px solid var(--border);
- border-radius: 20px;
- padding: 45px;
- box-shadow: var(--shadow);
- overflow-x: auto;
+ background: var(--surface);
+ border: 1px solid var(--border);
+ border-radius: 20px;
+ padding: 45px;
+ box-shadow: var(--shadow);
+ overflow-x: auto;
}
.tree-generation {
- position: relative;
- margin-bottom: 65px;
+ position: relative;
+ margin-bottom: 65px;
}
.tree-generation:last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
.generation-title {
- color: var(--text);
- font-size: 13px;
- text-transform: uppercase;
- letter-spacing: 1px;
- text-align: center;
- margin-bottom: 25px;
+ color: var(--text);
+ font-size: 13px;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ text-align: center;
+ margin-bottom: 25px;
}
.generation-members {
- display: flex;
- align-items: center;
- justify-content: center;
- flex-wrap: wrap;
- gap: 25px;
- min-height: 80px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-wrap: wrap;
+ gap: 25px;
+ min-height: 80px;
}
-
/* =========================================
- DYNAMIC TREE MEMBER CARD
-========================================= */
+ TREE MEMBER
+ ========================================= */
+
.tree-member {
- width: 180px;
- padding: 20px;
- text-align: center;
- background: #fbfcfb;
- border: 1px solid var(--border);
- border-radius: 15px;
- transition: 0.25s;
- position: relative;
+ width: 180px;
+ padding: 20px;
+ text-align: center;
+ background: var(--tree-card);
+ border: 1px solid var(--border);
+ border-radius: 15px;
+ transition: 0.25s;
+ position: relative;
}
.tree-member:hover {
- border-color: var(--primary);
- transform: translateY(-4px);
- box-shadow: var(--shadow);
+ border-color: var(--primary);
+ transform: translateY(-4px);
+ box-shadow: var(--shadow);
}
.tree-member img {
- width: 65px;
- height: 65px;
- margin: 0 auto 12px;
- border-radius: 50%;
- object-fit: cover;
+ width: 65px;
+ height: 65px;
+ margin: 0 auto 12px;
+ border-radius: 50%;
+ object-fit: cover;
}
.tree-member h4 {
- font-size: 15px;
- color: var(--heading);
- margin-bottom: 4px;
+ font-size: 15px;
+ color: var(--heading);
+ margin-bottom: 4px;
}
.tree-member span {
- color: var(--primary);
- font-size: 12px;
- font-weight: 600;
+ color: var(--primary);
+ font-size: 12px;
+ font-weight: 600;
}
-
/* =========================================
- FAMILY MEMBERS
-========================================= */
+ FAMILY MEMBERS
+ ========================================= */
+
.family-members-section {
- background: #eef3ef;
+ background: var(--surface-secondary);
}
.member-filters {
- display: flex;
- gap: 15px;
- margin-bottom: 30px;
+ display: flex;
+ gap: 15px;
+ margin-bottom: 30px;
}
.member-filters input {
- flex: 1;
+ flex: 1;
}
.member-filters select {
- width: 220px;
+ width: 220px;
}
.members-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 25px;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 25px;
}
-
/* =========================================
- DYNAMIC MEMBER CARD
-========================================= */
+ MEMBER CARD
+ ========================================= */
+
.member-card {
- background: var(--white);
- border: 1px solid var(--border);
- border-radius: var(--radius);
- padding: 25px;
- box-shadow: 0 4px 18px rgba(20, 45, 30, 0.04);
- transition: 0.25s;
+ background: var(--surface);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 25px;
+
+ box-shadow: 0 4px 18px rgba(20, 45, 30, 0.04);
+
+ transition: 0.25s;
}
.member-card:hover {
- transform: translateY(-5px);
- box-shadow: var(--shadow);
+ transform: translateY(-5px);
+ box-shadow: var(--shadow);
}
.member-card-header {
- display: flex;
- align-items: center;
- gap: 15px;
- margin-bottom: 20px;
+ display: flex;
+ align-items: center;
+ gap: 15px;
+ margin-bottom: 20px;
}
.member-card img {
- width: 65px;
- height: 65px;
- border-radius: 50%;
- object-fit: cover;
- background: var(--primary-light);
+ width: 65px;
+ height: 65px;
+ border-radius: 50%;
+ object-fit: cover;
+ background: var(--primary-light);
}
.member-card h3 {
- font-size: 18px;
- margin-bottom: 4px;
+ font-size: 18px;
+ margin-bottom: 4px;
}
.relationship {
- color: var(--primary);
- font-size: 13px;
- font-weight: 600;
+ color: var(--primary);
+ font-size: 13px;
+ font-weight: 600;
}
.member-meta {
- color: var(--text);
- font-size: 14px;
- margin-bottom: 20px;
+ color: var(--text);
+ font-size: 14px;
+ margin-bottom: 20px;
}
.member-card-actions {
- display: flex;
- gap: 8px;
+ display: flex;
+ gap: 8px;
}
.member-card-actions button {
- flex: 1;
- padding: 9px;
- border-radius: 8px;
- border: 1px solid var(--border);
- background: var(--white);
- font-size: 13px;
+ flex: 1;
+ padding: 9px;
+ border-radius: 8px;
+ border: 1px solid var(--border);
+ background: var(--surface);
+ color: var(--heading);
+ font-size: 13px;
}
.member-card-actions button:hover {
- border-color: var(--primary);
- color: var(--primary);
+ border-color: var(--primary);
+ color: var(--primary);
}
.member-card-actions .delete-btn:hover {
- border-color: var(--danger);
- color: var(--danger);
+ border-color: var(--danger);
+ color: var(--danger);
}
-
/* =========================================
- EMPTY MEMBERS
-========================================= */
+ EMPTY MEMBERS
+ ========================================= */
+
.empty-members-message {
- grid-column: 1 / -1;
- padding: 70px 20px;
- text-align: center;
- background: var(--white);
- border: 1px dashed #bdc9c1;
- border-radius: 16px;
+ grid-column: 1 / -1;
+ padding: 70px 20px;
+ text-align: center;
+ background: var(--surface);
+ border: 1px dashed var(--border);
+ border-radius: 16px;
}
.empty-members-message h3 {
- font-size: 22px;
- margin-bottom: 8px;
+ font-size: 22px;
+ margin-bottom: 8px;
}
.empty-members-message p {
- color: var(--text);
- margin-bottom: 20px;
+ color: var(--text);
+ margin-bottom: 20px;
}
-
/* =========================================
- MODAL
-========================================= */
-.modal {
- position: fixed;
- inset: 0;
- z-index: 500;
-
- display: none;
- align-items: center;
- justify-content: center;
+ MODAL
+ ========================================= */
- padding: 20px;
+.modal {
+ position: fixed;
+ inset: 0;
+ z-index: 500;
+ display: none;
+ align-items: center;
+ justify-content: center;
+ padding: 20px;
}
.modal.active {
- display: flex;
+ display: flex;
}
.modal-overlay {
- position: absolute;
- inset: 0;
- background: rgba(10, 20, 15, 0.6);
- backdrop-filter: blur(3px);
+ position: absolute;
+ inset: 0;
+ background: var(--overlay);
+ backdrop-filter: blur(3px);
}
.modal-content {
- width: min(580px, 100%);
- max-height: 90vh;
- overflow-y: auto;
+ width: min(580px, 100%);
+ max-height: 90vh;
+ overflow-y: auto;
+ position: relative;
+ z-index: 2;
- position: relative;
- z-index: 2;
-
- background: var(--white);
- border-radius: 20px;
- padding: 35px;
- box-shadow: 0 30px 80px rgba(0, 0, 0, 0.2);
+ background: var(--surface);
+ border-radius: 20px;
+ padding: 35px;
+ box-shadow: var(--shadow);
}
.modal-close {
- position: absolute;
- top: 18px;
- right: 20px;
+ position: absolute;
+ top: 18px;
+ right: 20px;
- width: 36px;
- height: 36px;
+ width: 36px;
+ height: 36px;
- border: 0;
- border-radius: 50%;
+ border: 0;
+ border-radius: 50%;
- background: #eef2ef;
- color: var(--heading);
+ background: var(--button-secondary);
+ color: var(--heading);
- font-size: 24px;
- line-height: 1;
+ font-size: 24px;
+ line-height: 1;
}
.modal-header {
- margin-bottom: 28px;
+ margin-bottom: 28px;
}
.modal-header h2 {
- font-size: 28px;
- margin-bottom: 6px;
+ font-size: 28px;
+ margin-bottom: 6px;
}
.modal-header p {
- color: var(--text);
+ color: var(--text);
}
-
/* =========================================
- FORM
-========================================= */
+ FORM
+ ========================================= */
+
.form-group {
- margin-bottom: 18px;
+ margin-bottom: 18px;
}
.form-group label {
- display: block;
- color: var(--heading);
- font-size: 14px;
- font-weight: 600;
- margin-bottom: 7px;
+ display: block;
+ color: var(--heading);
+ font-size: 14px;
+ font-weight: 600;
+ margin-bottom: 7px;
}
.form-group input,
.form-group select,
.form-group textarea {
- width: 100%;
- border: 1px solid var(--border);
- border-radius: 9px;
- padding: 12px 14px;
- background: var(--white);
- color: var(--heading);
- outline: none;
+ width: 100%;
+ border: 1px solid var(--border);
+ border-radius: 9px;
+ padding: 12px 14px;
+
+ background: var(--input-background);
+ color: var(--heading);
+
+ outline: none;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
- border-color: var(--primary);
+ border-color: var(--primary);
}
.form-group textarea {
- resize: vertical;
+ resize: vertical;
}
.form-actions {
- display: flex;
- justify-content: flex-end;
- gap: 10px;
- margin-top: 28px;
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ margin-top: 28px;
}
-
/* =========================================
- MEMBER DETAILS MODAL
-========================================= */
+ MEMBER DETAILS MODAL
+ ========================================= */
+
.details-profile {
- text-align: center;
- padding: 15px 0 30px;
- border-bottom: 1px solid var(--border);
+ text-align: center;
+ padding: 15px 0 30px;
+ border-bottom: 1px solid var(--border);
}
.details-image img {
- width: 110px;
- height: 110px;
- object-fit: cover;
- border-radius: 50%;
- margin: 0 auto 15px;
- background: var(--primary-light);
+ width: 110px;
+ height: 110px;
+ object-fit: cover;
+ border-radius: 50%;
+ margin: 0 auto 15px;
+ background: var(--primary-light);
}
.details-profile h2 {
- font-size: 25px;
- margin-bottom: 5px;
+ font-size: 25px;
+ margin-bottom: 5px;
}
.details-profile span {
- display: inline-block;
- background: var(--primary-light);
- color: var(--primary);
- padding: 5px 12px;
- border-radius: 30px;
- font-size: 12px;
- font-weight: 600;
+ display: inline-block;
+ background: var(--primary-light);
+ color: var(--primary);
+
+ padding: 5px 12px;
+ border-radius: 30px;
+
+ font-size: 12px;
+ font-weight: 600;
}
.details-information {
- padding-top: 25px;
+ padding-top: 25px;
}
.detail-item {
- margin-bottom: 18px;
+ margin-bottom: 18px;
}
.detail-item strong {
- display: block;
- font-size: 13px;
- color: var(--text);
- margin-bottom: 4px;
+ display: block;
+ font-size: 13px;
+ color: var(--text);
+ margin-bottom: 4px;
}
.detail-item span,
.detail-item p {
- color: var(--heading);
+ color: var(--heading);
}
-
/* =========================================
- FOOTER
-========================================= */
+ FOOTER
+ ========================================= */
+
.site-footer {
- background: #17251e;
- color: #c6d0ca;
+ background: var(--footer);
+ color: var(--text);
}
.footer-container {
- padding: 60px 0;
- display: flex;
- justify-content: space-between;
- gap: 50px;
+ padding: 60px 0;
+ display: flex;
+ justify-content: space-between;
+ gap: 50px;
}
.footer-brand {
- max-width: 430px;
+ max-width: 430px;
}
.footer-brand .logo {
- display: inline-block;
- color: var(--white);
- margin-bottom: 12px;
+ display: inline-block;
+ color: var(--white);
+ margin-bottom: 12px;
}
.footer-brand p {
- font-size: 14px;
+ font-size: 14px;
}
.footer-links {
- display: flex;
- align-items: flex-start;
- gap: 30px;
+ display: flex;
+ align-items: flex-start;
+ gap: 30px;
}
.footer-links a {
- transition: 0.2s;
+ transition: 0.2s;
}
.footer-links a:hover {
- color: var(--white);
+ color: var(--white);
}
.footer-bottom {
- border-top: 1px solid rgba(255, 255, 255, 0.1);
- padding: 20px 0;
- text-align: center;
- font-size: 13px;
-}
-
-
-/* =========================================
- RESPONSIVE - TABLET
-========================================= */
-@media (max-width: 900px) {
-
- .hero-container {
- grid-template-columns: 1fr;
- text-align: center;
- }
-
- .hero-content p {
- margin-left: auto;
- margin-right: auto;
- }
-
- .stats-container {
- grid-template-columns: repeat(2, 1fr);
- }
-
- .stat-card:nth-child(2) {
- border-right: none;
- }
-
- .stat-card:nth-child(-n+2) {
- border-bottom: 1px solid var(--border);
- }
-
- .members-grid {
- grid-template-columns: repeat(2, 1fr);
- }
-
- .section-header {
- align-items: flex-start;
- flex-direction: column;
- }
-
- .tree-actions {
- width: 100%;
- }
-
- .tree-actions input {
- flex: 1;
- width: auto;
- }
+ border-top: 1px solid var(--border);
+ padding: 20px 0;
+ text-align: center;
+ font-size: 13px;
}
-
/* =========================================
- RESPONSIVE - MOBILE
-========================================= */
-@media (max-width: 650px) {
-
- .container {
- width: min(100% - 28px, 1180px);
- }
-
- section {
- padding: 65px 0;
- }
-
- .navbar {
- min-height: 65px;
- }
-
- .nav-links {
- display: none;
- }
-
- .navbar .btn {
- padding: 10px 13px;
- font-size: 12px;
- }
-
- .hero {
- min-height: auto;
- padding: 80px 0 110px;
- }
-
- .hero-container {
- gap: 45px;
- }
-
- .hero-content h1 {
- font-size: 40px;
- }
-
- .hero-content p {
- font-size: 16px;
- }
-
- .hero-placeholder {
- min-height: 280px;
- }
-
- .family-stats {
- margin-top: -50px;
- }
-
- .stats-container {
- grid-template-columns: 1fr 1fr;
- }
-
- .stat-card {
- padding: 22px 10px;
- }
-
- .stat-card h3 {
- font-size: 25px;
- }
-
- .family-tree-section {
- padding-top: 100px;
- }
-
- .section-header h2 {
- font-size: 30px;
- }
-
- .tree-actions {
- flex-direction: column;
- }
-
- .tree-actions input {
- width: 100%;
- }
-
- .tree-wrapper {
- padding: 25px 15px;
- }
-
- .member-filters {
- flex-direction: column;
- }
-
- .member-filters select {
- width: 100%;
- }
-
- .members-grid {
- grid-template-columns: 1fr;
- }
-
- .modal-content {
- padding: 30px 20px;
- }
-
- .form-actions {
- flex-direction: column-reverse;
- }
-
- .form-actions .btn {
- width: 100%;
- }
-
- .footer-container {
- flex-direction: column;
- padding: 45px 0;
- }
-
- .footer-links {
- flex-wrap: wrap;
- }
-}
-
-
-
-
-
-
-
-
-/* =========================================
- CONNECTED FAMILY TREE
-========================================= */
+ CONNECTED FAMILY TREE
+ ========================================= */
.tree-wrapper {
- position: relative;
- padding: 55px 35px;
+ position: relative;
+ padding: 55px 35px;
}
-/* Each generation */
-
.tree-generation {
- position: relative;
- margin-bottom: 90px;
+ position: relative;
+ margin-bottom: 90px;
}
.tree-generation:last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
-
-/* Generation members */
-
.generation-members {
- position: relative;
- display: flex;
- justify-content: center;
- align-items: flex-start;
- gap: 35px;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: flex-start;
+ gap: 35px;
}
-
/* =========================================
- VERTICAL GENERATION CONNECTION
-========================================= */
+ VERTICAL GENERATION CONNECTION
+ ========================================= */
.tree-generation:not(:last-child)::after {
- content: "";
- position: absolute;
+ content: "";
- width: 2px;
- height: 55px;
+ position: absolute;
+ width: 2px;
+ height: 55px;
- background: #b8c9bf;
+ background: var(--tree-line);
- left: 50%;
- bottom: -72px;
+ left: 50%;
+ bottom: -72px;
- transform: translateX(-50%);
+ transform: translateX(-50%);
}
-
/* =========================================
- HORIZONTAL CONNECTION LINE
-========================================= */
+ HORIZONTAL CONNECTION LINE
+ ========================================= */
.generation-members::before {
- content: "";
- position: absolute;
+ content: "";
- height: 2px;
+ position: absolute;
+ height: 2px;
- background: #b8c9bf;
+ background: var(--tree-line);
- top: -16px;
-
- left: 15%;
- right: 15%;
+ top: -16px;
+ left: 15%;
+ right: 15%;
}
-
-/* Don't show horizontal line
- when generation is empty */
-
.generation-members:has(p)::before {
- display: none;
+ display: none;
}
-
/* =========================================
- TREE MEMBER
-========================================= */
+ TREE MEMBER
+ ========================================= */
.tree-member {
- position: relative;
-
- width: 190px;
+ position: relative;
- padding: 22px 15px;
+ width: 190px;
+ padding: 22px 15px;
- background: #ffffff;
+ background: var(--tree-card);
+ border: 1px solid var(--border);
- border: 1px solid #dfe6e1;
+ border-radius: 16px;
+ text-align: center;
- border-radius: 16px;
+ cursor: pointer;
- text-align: center;
+ transition:
+ transform 0.25s ease,
+ box-shadow 0.25s ease,
+ border-color 0.25s ease;
- cursor: pointer;
-
- transition:
- transform 0.25s ease,
- box-shadow 0.25s ease,
- border-color 0.25s ease;
-
- z-index: 2;
+ z-index: 2;
}
-
-/* Line from horizontal connector
- to member */
+/* Line from horizontal connector to member */
.tree-member::before {
- content: "";
+ content: "";
- position: absolute;
+ position: absolute;
+ width: 2px;
+ height: 17px;
- width: 2px;
- height: 17px;
+ background: var(--tree-line);
- background: #b8c9bf;
+ top: -17px;
+ left: 50%;
- top: -17px;
-
- left: 50%;
-
- transform: translateX(-50%);
+ transform: translateX(-50%);
}
-
.tree-member:hover {
- transform: translateY(-6px);
-
- border-color: var(--primary);
-
- box-shadow:
- 0 12px 35px
- rgba(35, 80, 55, 0.12);
+ transform: translateY(-6px);
+ border-color: var(--primary);
+ box-shadow: var(--shadow);
}
-
/* =========================================
- PROFILE IMAGE
-========================================= */
+ PROFILE IMAGE
+ ========================================= */
.tree-member img {
- width: 72px;
- height: 72px;
-
- border-radius: 50%;
+ width: 72px;
+ height: 72px;
- object-fit: cover;
+ border-radius: 50%;
+ object-fit: cover;
- margin: 0 auto 13px;
+ margin: 0 auto 13px;
- border: 4px solid #e8f3ed;
+ border: 4px solid var(--primary-light);
}
-
/* =========================================
- NAME
-========================================= */
+ NAME
+ ========================================= */
.tree-member h4 {
- font-size: 15px;
-
- color: var(--heading);
-
- margin-bottom: 5px;
+ font-size: 15px;
+ color: var(--heading);
- white-space: nowrap;
+ margin-bottom: 5px;
- overflow: hidden;
-
- text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
-
/* =========================================
- RELATIONSHIP BADGE
-========================================= */
+ RELATIONSHIP BADGE
+ ========================================= */
.tree-member span {
- display: inline-block;
+ display: inline-block;
- padding: 4px 10px;
+ padding: 4px 10px;
- background: var(--primary-light);
+ background: var(--primary-light);
+ color: var(--primary);
- color: var(--primary);
+ border-radius: 20px;
- border-radius: 20px;
-
- font-size: 11px;
-
- font-weight: 600;
+ font-size: 11px;
+ font-weight: 600;
}
-
/* =========================================
- GENERATION TITLE
-========================================= */
+ GENERATION TITLE
+ ========================================= */
.generation-title {
- position: relative;
-
- width: fit-content;
-
- margin: 0 auto 40px;
+ position: relative;
- padding: 7px 14px;
+ width: fit-content;
+ margin: 0 auto 40px;
- background: #edf5f0;
+ padding: 7px 14px;
- color: var(--primary);
+ background: var(--tree-title);
+ color: var(--primary);
- border-radius: 20px;
+ border-radius: 20px;
- font-size: 11px;
+ font-size: 11px;
+ font-weight: 700;
- font-weight: 700;
+ letter-spacing: 1px;
+ text-transform: uppercase;
- letter-spacing: 1px;
-
- text-transform: uppercase;
-
- z-index: 3;
+ z-index: 3;
}
-
/* =========================================
- TREE SEARCH RESULT
-========================================= */
+ TREE SEARCH RESULT
+ ========================================= */
.tree-member.tree-highlight {
- border: 2px solid var(--primary);
+ border: 2px solid var(--primary);
- box-shadow:
- 0 0 0 5px
- rgba(47, 107, 79, 0.10);
+ box-shadow: 0 0 0 5px var(--primary-light);
}
-
/* =========================================
MOBILE
========================================= */
@media (max-width: 650px) {
+ .tree-wrapper {
+ padding: 40px 15px;
+ overflow-x: auto;
+ }
- .tree-wrapper {
- padding: 40px 15px;
- overflow-x: auto;
- }
-
- .generation-members {
- min-width: max-content;
- gap: 20px;
- padding: 0 20px;
- }
-
- .tree-member {
- width: 155px;
- }
+ .generation-members {
+ min-width: max-content;
+ gap: 20px;
+ padding: 0 20px;
+ }
- .tree-member img {
- width: 60px;
- height: 60px;
- }
+ .tree-member {
+ width: 155px;
+ }
-}
\ No newline at end of file
+ .tree-member img {
+ width: 60px;
+ height: 60px;
+ }
+}
diff --git a/index.html b/index.html
index 5f48e13..3683704 100644
--- a/index.html
+++ b/index.html
@@ -1,588 +1,422 @@
-
-
-
-
-
+
+
+
+
+
FamilyTree | Build Your Family Story
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
Your Family. Your Story.
-
+
Build & Preserve Your Family Tree
-
-
-
- Your Family. Your Story.
-
-
-
- Build & Preserve Your Family Tree
-
-
-
- Discover, organize, and preserve your family's story
- in one beautiful and interactive family tree.
-
-
-
-
-
-
-
-
-
-

-
-
+
+ Discover, organize, and preserve your family's story in one
+ beautiful and interactive family tree.
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
--
-
Oldest Generation
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
--
+
Oldest Generation
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Grandparents
-
-
-
-
-
-
-
-
-
-
-
-
-
- Parents
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
No family members yet
-
- Start building your family tree by adding
- your first family member.
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
No family members yet
+
+ Start building your family tree by adding your first family
+ member.
+
+
+
+
+
+
+
-
-
+
-
+
+
-
-
-
-
-
-
-
-
-
![Family member]()
-
-
-
- Member Name
-
-
-
- Relationship
-
-
-
+
+
+
![Family member]()
+
+
Member Name
-
-
-
-
-
-
+ Relationship
+
-
+
-
+
+
+
-
+
-