odac 1.4.4 → 1.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/rules/memory.md +10 -1
- package/.releaserc.js +1 -1
- package/CHANGELOG.md +50 -0
- package/README.md +2 -1
- package/client/odac.js +228 -62
- package/docs/ai/skills/backend/views.md +102 -30
- package/docs/ai/skills/frontend/core.md +17 -3
- package/docs/ai/skills/frontend/navigation.md +105 -8
- package/docs/backend/07-views/01-the-view-directory.md +28 -6
- package/docs/backend/07-views/02-rendering-a-view.md +16 -23
- package/docs/backend/07-views/03-template-syntax.md +48 -14
- package/docs/backend/07-views/03-variables.md +22 -7
- package/docs/frontend/02-ajax-navigation/01-quick-start.md +22 -0
- package/docs/frontend/02-ajax-navigation/03-advanced-usage.md +51 -0
- package/package.json +30 -6
- package/src/Request.js +5 -4
- package/src/Route.js +11 -0
- package/src/View.js +54 -9
- package/template/controller/page/about.js +3 -3
- package/template/controller/page/index.js +2 -2
- package/template/public/assets/js/app.js +38 -54
- package/template/skeleton/main.html +4 -4
- package/template/view/content/about.html +64 -60
- package/template/view/content/home.html +148 -175
- package/template/view/css/app.css +46 -0
- package/template/view/footer/main.html +10 -9
- package/template/view/header/main.html +34 -11
- package/test/Client/load.test.js +306 -0
- package/test/Database/ConnectionFactory/buildConnections.test.js +4 -0
- package/test/View/parseOdacTag.test.js +180 -0
- package/template/public/assets/css/style.css +0 -1835
|
@@ -1,205 +1,178 @@
|
|
|
1
1
|
<!-- Hero Section -->
|
|
2
|
-
<section class="
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
<section class="mb-24 py-12">
|
|
3
|
+
<div class="flex flex-col items-center text-center space-y-8">
|
|
4
|
+
<h1 class="text-5xl md:text-7xl font-bold tracking-tight text-brand-900 leading-tight">
|
|
5
|
+
Your ODAC Site is <br/><span class="text-brand-900/40">Ready to Build.</span>
|
|
6
|
+
</h1>
|
|
7
|
+
<p class="text-xl md:text-2xl text-brand-900/50 max-w-2xl font-medium leading-relaxed">
|
|
8
|
+
A next-generation framework for modern web applications. Fast, secure, and zero-config by design.
|
|
9
|
+
</p>
|
|
10
|
+
<div class="flex items-center gap-4 pt-4">
|
|
11
|
+
<a href="https://docs.odac.run" target="_blank" rel="noopener" class="btn-apple btn-primary px-8 py-3 text-lg" data-navigate="false">
|
|
12
|
+
Quick Start
|
|
13
|
+
</a>
|
|
14
|
+
<a href="/about" class="btn-apple btn-secondary px-8 py-3 text-lg">
|
|
15
|
+
Learn More
|
|
16
|
+
</a>
|
|
17
|
+
</div>
|
|
15
18
|
</div>
|
|
16
|
-
</div>
|
|
17
19
|
</section>
|
|
18
20
|
|
|
19
21
|
<!-- Project Structure Section -->
|
|
20
|
-
<section class="
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<div class="structure-grid">
|
|
26
|
-
<div class="structure-item">
|
|
27
|
-
<div class="structure-icon">📄</div>
|
|
28
|
-
<h3 class="structure-title">controller/</h3>
|
|
29
|
-
<p class="structure-description">Your application logic lives here. Each file handles requests and prepares data for views.</p>
|
|
30
|
-
<code class="structure-path">controller/page/index.js</code>
|
|
31
|
-
</div>
|
|
32
|
-
|
|
33
|
-
<div class="structure-item">
|
|
34
|
-
<div class="structure-icon">🎨</div>
|
|
35
|
-
<h3 class="structure-title">view/</h3>
|
|
36
|
-
<p class="structure-description">HTML templates for your pages. Organized by type (content, header, footer).</p>
|
|
37
|
-
<code class="structure-path">view/content/home.html</code>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
<div class="structure-item">
|
|
41
|
-
<div class="structure-icon">🎯</div>
|
|
42
|
-
<h3 class="structure-title">route/</h3>
|
|
43
|
-
<p class="structure-description">Define your URL routes here. Map URLs to controllers and views.</p>
|
|
44
|
-
<code class="structure-path">route/www.js</code>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
<div class="structure-item">
|
|
48
|
-
<div class="structure-icon">💎</div>
|
|
49
|
-
<h3 class="structure-title">public/</h3>
|
|
50
|
-
<p class="structure-description">Static assets like CSS, JavaScript, and images. Served directly to browsers.</p>
|
|
51
|
-
<code class="structure-path">public/assets/css/style.css</code>
|
|
52
|
-
</div>
|
|
53
|
-
|
|
54
|
-
<div class="structure-item">
|
|
55
|
-
<div class="structure-icon">🏗️</div>
|
|
56
|
-
<h3 class="structure-title">skeleton/</h3>
|
|
57
|
-
<p class="structure-description">Page layouts that wrap your content. Define your HTML structure once.</p>
|
|
58
|
-
<code class="structure-path">skeleton/main.html</code>
|
|
59
|
-
</div>
|
|
22
|
+
<section class="mb-24">
|
|
23
|
+
<div class="space-y-4 mb-12">
|
|
24
|
+
<h2 class="text-3xl font-semibold tracking-tight text-brand-900">Project Structure</h2>
|
|
25
|
+
<p class="text-brand-900/50 text-lg">Everything has a place. Convention over configuration.</p>
|
|
26
|
+
</div>
|
|
60
27
|
|
|
61
|
-
|
|
62
|
-
<div class="
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
28
|
+
<div class="bg-white rounded-[2rem] shadow-sm border border-brand-100 overflow-hidden">
|
|
29
|
+
<div class="grid grid-cols-1 lg:grid-cols-2">
|
|
30
|
+
<!-- Tree -->
|
|
31
|
+
<div class="p-8 lg:p-10 bg-brand-900 text-brand-200">
|
|
32
|
+
<pre class="text-sm leading-relaxed font-mono"><code>my-project/
|
|
33
|
+
├── controller/ <span class="text-brand-500"># Request handlers</span>
|
|
34
|
+
├── middleware/ <span class="text-brand-500"># Route middlewares</span>
|
|
35
|
+
├── public/ <span class="text-brand-500"># Static assets</span>
|
|
36
|
+
├── route/ <span class="text-brand-500"># Route definitions</span>
|
|
37
|
+
├── schema/ <span class="text-brand-500"># Database schemas</span>
|
|
38
|
+
├── skeleton/ <span class="text-brand-500"># Page layouts</span>
|
|
39
|
+
├── view/
|
|
40
|
+
│ ├── content/ <span class="text-brand-500"># Page templates</span>
|
|
41
|
+
│ ├── css/ <span class="text-brand-500"># Tailwind source</span>
|
|
42
|
+
│ ├── head/ <span class="text-brand-500"># <head> partials</span>
|
|
43
|
+
│ ├── header/ <span class="text-brand-500"># Header partials</span>
|
|
44
|
+
│ └── footer/ <span class="text-brand-500"># Footer partials</span>
|
|
45
|
+
└── odac.json <span class="text-brand-500"># Configuration</span></code></pre>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<!-- Description -->
|
|
49
|
+
<div class="p-8 lg:p-10 space-y-6">
|
|
50
|
+
<div class="space-y-1">
|
|
51
|
+
<h3 class="text-sm font-bold text-brand-900">controller/</h3>
|
|
52
|
+
<p class="text-sm text-brand-900/50">Your application logic. Each file handles requests and prepares data for views.</p>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="space-y-1">
|
|
55
|
+
<h3 class="text-sm font-bold text-brand-900">route/</h3>
|
|
56
|
+
<p class="text-sm text-brand-900/50">Map URLs to controllers. Simple, declarative routing.</p>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="space-y-1">
|
|
59
|
+
<h3 class="text-sm font-bold text-brand-900">view/</h3>
|
|
60
|
+
<p class="text-sm text-brand-900/50">HTML templates organized by type. Tailwind CSS source lives in <code class="text-xs bg-brand-50 px-1 py-0.5 rounded text-brand-900/60">view/css/</code>.</p>
|
|
61
|
+
</div>
|
|
62
|
+
<div class="space-y-1">
|
|
63
|
+
<h3 class="text-sm font-bold text-brand-900">schema/</h3>
|
|
64
|
+
<p class="text-sm text-brand-900/50">Database table definitions. Auto-migrated on every startup.</p>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="space-y-1">
|
|
67
|
+
<h3 class="text-sm font-bold text-brand-900">skeleton/</h3>
|
|
68
|
+
<p class="text-sm text-brand-900/50">Page layouts that wrap your content. Define once, reuse everywhere.</p>
|
|
69
|
+
</div>
|
|
70
|
+
<div class="space-y-1">
|
|
71
|
+
<h3 class="text-sm font-bold text-brand-900">odac.json</h3>
|
|
72
|
+
<p class="text-sm text-brand-900/50">Centralized config for database, routes, and framework behavior.</p>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
67
76
|
</div>
|
|
68
|
-
</div>
|
|
69
77
|
</section>
|
|
70
78
|
|
|
71
|
-
<!-- Quick Start
|
|
72
|
-
<section class="
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
<div class="quickstart-step">
|
|
78
|
-
<div class="step-number">1</div>
|
|
79
|
-
<h3 class="step-title">Edit Your Content</h3>
|
|
80
|
-
<p class="step-description">
|
|
81
|
-
Open <code>view/content/home.html</code> to customize this page. All your HTML templates are in the <code>view/</code> directory.
|
|
82
|
-
</p>
|
|
83
|
-
</div>
|
|
79
|
+
<!-- Quick Start Guide -->
|
|
80
|
+
<section class="mb-24">
|
|
81
|
+
<div class="space-y-4 mb-12">
|
|
82
|
+
<h2 class="text-3xl font-semibold tracking-tight text-brand-900">Quick Start</h2>
|
|
83
|
+
<p class="text-brand-900/50 text-lg">Four steps to your first custom page.</p>
|
|
84
|
+
</div>
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
<div class="
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
|
87
|
+
<div class="bg-white p-8 rounded-[2rem] shadow-sm border border-brand-100 space-y-4 flex flex-col">
|
|
88
|
+
<div class="flex items-center gap-3">
|
|
89
|
+
<span class="w-8 h-8 bg-brand-900 text-white rounded-full flex items-center justify-center text-sm font-bold">1</span>
|
|
90
|
+
<h3 class="text-lg font-bold">Define a Route</h3>
|
|
91
|
+
</div>
|
|
92
|
+
<p class="text-brand-900/50 text-sm">Map a URL to a controller in <code class="text-xs bg-brand-50 px-1.5 py-0.5 rounded text-brand-900/60">route/www.js</code></p>
|
|
93
|
+
<pre class="bg-brand-900 text-brand-200 text-sm p-4 rounded-xl overflow-x-auto mt-auto h-full"><code>Odac.Route.page('/my-page', 'page.mypage')</code></pre>
|
|
94
|
+
</div>
|
|
91
95
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
<div class="bg-white p-8 rounded-[2rem] shadow-sm border border-brand-100 space-y-4 flex flex-col">
|
|
97
|
+
<div class="flex items-center gap-3">
|
|
98
|
+
<span class="w-8 h-8 bg-brand-900 text-white rounded-full flex items-center justify-center text-sm font-bold">2</span>
|
|
99
|
+
<h3 class="text-lg font-bold">Create a Controller</h3>
|
|
100
|
+
</div>
|
|
101
|
+
<p class="text-brand-900/50 text-sm">Add logic in <code class="text-xs bg-brand-50 px-1.5 py-0.5 rounded text-brand-900/60">controller/page/mypage.js</code></p>
|
|
102
|
+
<pre class="bg-brand-900 text-brand-200 text-sm p-4 rounded-xl overflow-x-auto mt-auto h-full"><code>module.exports = function(Odac) {
|
|
98
103
|
Odac.View.set({
|
|
104
|
+
skeleton: 'main',
|
|
105
|
+
head: 'main',
|
|
99
106
|
header: 'main',
|
|
100
107
|
content: 'mypage',
|
|
101
108
|
footer: 'main'
|
|
102
109
|
})
|
|
103
110
|
}</code></pre>
|
|
104
|
-
</div>
|
|
105
|
-
|
|
106
|
-
<div class="quickstart-step">
|
|
107
|
-
<div class="step-number">4</div>
|
|
108
|
-
<h3 class="step-title">Style Your Site</h3>
|
|
109
|
-
<p class="step-description">
|
|
110
|
-
Customize the look in <code>public/assets/css/style.css</code>. Add your own CSS or use your favorite framework.
|
|
111
|
-
</p>
|
|
112
|
-
</div>
|
|
113
|
-
</div>
|
|
114
|
-
</div>
|
|
115
|
-
</section>
|
|
116
|
-
|
|
117
|
-
<!-- Features Section -->
|
|
118
|
-
<section class="code-examples">
|
|
119
|
-
<div class="container">
|
|
120
|
-
<h2 class="section-title">✨ What's Included</h2>
|
|
121
|
-
|
|
122
|
-
<div class="features-list">
|
|
123
|
-
<div class="feature-item">
|
|
124
|
-
<div class="feature-icon">🎯</div>
|
|
125
|
-
<div class="feature-content">
|
|
126
|
-
<h3>AJAX Navigation</h3>
|
|
127
|
-
<p>Smooth page transitions without full reloads. Already configured in <code>public/assets/js/app.js</code></p>
|
|
128
111
|
</div>
|
|
129
|
-
</div>
|
|
130
112
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
113
|
+
<div class="bg-white p-8 rounded-[2rem] shadow-sm border border-brand-100 space-y-4 flex flex-col">
|
|
114
|
+
<div class="flex items-center gap-3">
|
|
115
|
+
<span class="w-8 h-8 bg-brand-900 text-white rounded-full flex items-center justify-center text-sm font-bold">3</span>
|
|
116
|
+
<h3 class="text-lg font-bold">Build the View</h3>
|
|
117
|
+
</div>
|
|
118
|
+
<p class="text-brand-900/50 text-sm">Create your template in <code class="text-xs bg-brand-50 px-1.5 py-0.5 rounded text-brand-900/60">view/content/mypage.html</code></p>
|
|
119
|
+
<pre class="bg-brand-900 text-brand-200 text-sm p-4 rounded-xl overflow-x-auto mt-auto h-full"><code><section class="py-12">
|
|
120
|
+
<h1 class="text-4xl font-bold">My Page</h1>
|
|
121
|
+
<p class="text-brand-900/50">Welcome!</p>
|
|
122
|
+
</section></code></pre>
|
|
136
123
|
</div>
|
|
137
|
-
</div>
|
|
138
124
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
125
|
+
<div class="bg-white p-8 rounded-[2rem] shadow-sm border border-brand-100 space-y-4 flex flex-col">
|
|
126
|
+
<div class="flex items-center gap-3">
|
|
127
|
+
<span class="w-8 h-8 bg-brand-900 text-white rounded-full flex items-center justify-center text-sm font-bold">4</span>
|
|
128
|
+
<h3 class="text-lg font-bold">Style with Tailwind</h3>
|
|
129
|
+
</div>
|
|
130
|
+
<p class="text-brand-900/50 text-sm">Customize the theme in <code class="text-xs bg-brand-50 px-1.5 py-0.5 rounded text-brand-900/60">view/css/app.css</code></p>
|
|
131
|
+
<pre class="bg-brand-900 text-brand-200 text-sm p-4 rounded-xl overflow-x-auto mt-auto h-full"><code>@theme {
|
|
132
|
+
--color-brand: #0071e3;
|
|
133
|
+
--font-display: "Inter", sans-serif;
|
|
134
|
+
}</code></pre>
|
|
144
135
|
</div>
|
|
145
|
-
|
|
136
|
+
</div>
|
|
137
|
+
</section>
|
|
146
138
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
139
|
+
<!-- Features Spotlight -->
|
|
140
|
+
<section class="mb-24">
|
|
141
|
+
<div class="bg-brand-900 rounded-[3rem] p-12 md:p-20 text-white space-y-12">
|
|
142
|
+
<div class="text-center space-y-4">
|
|
143
|
+
<h2 class="text-3xl md:text-5xl font-bold tracking-tight">Built for modern scale.</h2>
|
|
144
|
+
<p class="text-white/50 text-xl font-medium">Enterprise grade performance out of the box.</p>
|
|
152
145
|
</div>
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
146
|
+
|
|
147
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-12 pt-8">
|
|
148
|
+
<div class="space-y-4 border-l-2 border-white/10 pl-8">
|
|
149
|
+
<h3 class="text-xl font-bold">AJAX Navigation</h3>
|
|
150
|
+
<p class="text-white/40 leading-relaxed">Smooth page transitions without full reloads, giving your users a native app feel.</p>
|
|
151
|
+
</div>
|
|
152
|
+
<div class="space-y-4 border-l-2 border-white/10 pl-8">
|
|
153
|
+
<h3 class="text-xl font-bold">Security First</h3>
|
|
154
|
+
<p class="text-white/40 leading-relaxed">Automatic CSRF protection and secure session management built into the core.</p>
|
|
155
|
+
</div>
|
|
156
|
+
<div class="space-y-4 border-l-2 border-white/10 pl-8">
|
|
157
|
+
<h3 class="text-xl font-bold">Sub-ms Latency</h3>
|
|
158
|
+
<p class="text-white/40 leading-relaxed">Optimized routing and view engine designed for the highest possible throughput.</p>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="space-y-4 border-l-2 border-white/10 pl-8">
|
|
161
|
+
<h3 class="text-xl font-bold">Tailwind Included</h3>
|
|
162
|
+
<p class="text-white/40 leading-relaxed">The default template now leverages Tailwind CSS for professional, scalable designs.</p>
|
|
163
|
+
</div>
|
|
160
164
|
</div>
|
|
161
|
-
</div>
|
|
162
|
-
|
|
163
|
-
<div class="feature-item">
|
|
164
|
-
<div class="feature-icon">📧</div>
|
|
165
|
-
<div class="feature-content">
|
|
166
|
-
<h3>Email Support</h3>
|
|
167
|
-
<p>Send emails with the built-in mail service. SMTP and IMAP included.</p>
|
|
168
|
-
</div>
|
|
169
|
-
</div>
|
|
170
165
|
</div>
|
|
171
|
-
</div>
|
|
172
166
|
</section>
|
|
173
167
|
|
|
174
|
-
<!--
|
|
175
|
-
<section class="
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
<p>Official website with guides, tutorials, and community resources</p>
|
|
184
|
-
</a>
|
|
185
|
-
|
|
186
|
-
<a href="https://docs.odac.run" target="_blank" class="resource-card" data-navigate="false">
|
|
187
|
-
<div class="resource-icon">📖</div>
|
|
188
|
-
<h3>Documentation</h3>
|
|
189
|
-
<p>Complete API reference, examples, and best practices</p>
|
|
190
|
-
</a>
|
|
191
|
-
|
|
192
|
-
<a href="https://github.com/odac-run/odac" target="_blank" class="resource-card" data-navigate="false">
|
|
193
|
-
<div class="resource-icon">💻</div>
|
|
194
|
-
<h3>GitHub</h3>
|
|
195
|
-
<p>Source code, issues, and contribution guidelines</p>
|
|
196
|
-
</a>
|
|
197
|
-
</div>
|
|
198
|
-
|
|
199
|
-
<div class="next-steps">
|
|
200
|
-
<h3>🎨 Ready to Build?</h3>
|
|
201
|
-
<p>Start by editing <code>view/content/home.html</code> to replace this page with your own content.</p>
|
|
202
|
-
<p>Check out the <a href="/about">About</a> page for more examples.</p>
|
|
168
|
+
<!-- Call to Action -->
|
|
169
|
+
<section class="mb-12 py-12">
|
|
170
|
+
<div class="flex flex-col items-center text-center space-y-6">
|
|
171
|
+
<h2 class="text-3xl font-bold text-brand-900 tracking-tight">Ready to build the future?</h2>
|
|
172
|
+
<p class="text-brand-900/50 max-w-xl">Start by editing <code class="text-xs bg-brand-50 px-1.5 py-0.5 rounded text-brand-900/60">view/content/home.html</code> to replace this page with your own vision.</p>
|
|
173
|
+
<div class="pt-4 flex items-center gap-4">
|
|
174
|
+
<a href="https://github.com/odac-run/odac" target="_blank" rel="noopener" class="px-6 py-2 border border-brand-100 rounded-full font-medium hover:bg-brand-50 transition-colors" data-navigate="false">Star on GitHub</a>
|
|
175
|
+
<a href="/about" class="px-6 py-2 text-brand-900 font-medium hover:opacity-60 transition-opacity">Meet the Framework →</a>
|
|
176
|
+
</div>
|
|
203
177
|
</div>
|
|
204
|
-
</div>
|
|
205
178
|
</section>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
|
|
3
|
+
@theme {
|
|
4
|
+
--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
5
|
+
|
|
6
|
+
--color-brand-50: #f8f8f8;
|
|
7
|
+
--color-brand-100: #e8e8e8;
|
|
8
|
+
--color-brand-200: #d1d1d1;
|
|
9
|
+
--color-brand-300: #b0b0b0;
|
|
10
|
+
--color-brand-400: #888888;
|
|
11
|
+
--color-brand-500: #6d6d6d;
|
|
12
|
+
--color-brand-600: #5d5d5d;
|
|
13
|
+
--color-brand-700: #4b4b4b;
|
|
14
|
+
--color-brand-800: #373737;
|
|
15
|
+
--color-brand-900: #1d1d1f;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Base Styles */
|
|
19
|
+
body {
|
|
20
|
+
@apply bg-[#f5f5f7] text-brand-900 antialiased;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
h1, h2, h3, h4, h5, h6 {
|
|
24
|
+
@apply font-semibold tracking-tight;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Components */
|
|
28
|
+
.glass {
|
|
29
|
+
@apply bg-white/70 backdrop-blur-md border-b border-white/10;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.btn-apple {
|
|
33
|
+
@apply px-6 py-2 rounded-full font-medium transition-all duration-200 inline-flex items-center justify-center;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.btn-primary {
|
|
37
|
+
@apply bg-brand-900 text-white hover:bg-brand-800;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.btn-secondary {
|
|
41
|
+
@apply bg-brand-100 text-brand-900 hover:bg-brand-200;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.active {
|
|
45
|
+
@apply !text-brand-900 opacity-100 font-semibold;
|
|
46
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
<div class="
|
|
3
|
-
|
|
4
|
-
<
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
</p>
|
|
1
|
+
<div class="max-w-5xl mx-auto px-6 flex flex-col items-center gap-6">
|
|
2
|
+
<div class="flex items-center gap-6">
|
|
3
|
+
<a href="https://github.com/odac-run/odac" target="_blank" rel="noopener" class="text-xs font-medium text-brand-900/40 hover:text-brand-900/60 transition-colors" data-navigate="false">GitHub</a>
|
|
4
|
+
<a href="https://docs.odac.run" target="_blank" rel="noopener" class="text-xs font-medium text-brand-900/40 hover:text-brand-900/60 transition-colors" data-navigate="false">Documentation</a>
|
|
5
|
+
<a href="https://odac.run" target="_blank" rel="noopener" class="text-xs font-medium text-brand-900/40 hover:text-brand-900/60 transition-colors" data-navigate="false">Official Site</a>
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
<div class="flex flex-col items-center gap-2">
|
|
9
|
+
<p class="text-xs text-brand-900/30">Powered by <span class="font-semibold text-brand-900/40">ODAC</span> Framework</p>
|
|
10
|
+
<p class="text-[10px] uppercase tracking-widest text-brand-900/20 font-medium">Built for High Performance</p>
|
|
10
11
|
</div>
|
|
11
12
|
</div>
|
|
@@ -1,14 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<div class="
|
|
9
|
-
<a href="/" class="
|
|
10
|
-
<a href="/about" class="
|
|
11
|
-
<a href="https://docs.odac.run"
|
|
1
|
+
<div class="container mx-auto px-6 h-full flex items-center justify-between">
|
|
2
|
+
<a href="/" class="flex items-center gap-2 transition-opacity hover:opacity-80">
|
|
3
|
+
<span class="text-xl font-bold tracking-tight text-brand-900">ODAC</span>
|
|
4
|
+
</a>
|
|
5
|
+
|
|
6
|
+
<!-- Desktop Nav -->
|
|
7
|
+
<nav class="hidden md:flex items-center gap-8">
|
|
8
|
+
<div class="flex items-center gap-6">
|
|
9
|
+
<a href="/" class="text-sm font-medium text-brand-900/60 hover:text-brand-900 transition-colors active">Getting Started</a>
|
|
10
|
+
<a href="/about" class="text-sm font-medium text-brand-900/60 hover:text-brand-900 transition-colors">About</a>
|
|
11
|
+
<a href="https://docs.odac.run" target="_blank" rel="noopener" class="text-sm font-medium text-brand-900/60 hover:text-brand-900 transition-colors flex items-center gap-1" data-navigate="false">
|
|
12
|
+
Docs
|
|
13
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg>
|
|
14
|
+
</a>
|
|
12
15
|
</div>
|
|
16
|
+
|
|
17
|
+
<a href="https://github.com/odac-run/odac" target="_blank" rel="noopener" class="btn-apple btn-primary text-sm px-4 py-1.5" data-navigate="false">
|
|
18
|
+
GitHub
|
|
19
|
+
</a>
|
|
20
|
+
</nav>
|
|
21
|
+
|
|
22
|
+
<!-- Mobile Menu Toggle -->
|
|
23
|
+
<label for="mobile-menu" class="md:hidden cursor-pointer p-2 -mr-2 text-brand-900/60 hover:text-brand-900 transition-colors">
|
|
24
|
+
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" /></svg>
|
|
25
|
+
</label>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<!-- Mobile Menu (CSS-only toggle) -->
|
|
29
|
+
<input type="checkbox" id="mobile-menu" class="hidden peer" />
|
|
30
|
+
<nav class="peer-checked:flex hidden md:hidden flex-col w-full bg-white/90 backdrop-blur-xl border-t border-brand-100 px-6 py-6 gap-4">
|
|
31
|
+
<a href="/" class="text-sm font-medium text-brand-900/60 hover:text-brand-900 transition-colors py-2 active">Getting Started</a>
|
|
32
|
+
<a href="/about" class="text-sm font-medium text-brand-900/60 hover:text-brand-900 transition-colors py-2">About</a>
|
|
33
|
+
<a href="https://docs.odac.run" target="_blank" rel="noopener" class="text-sm font-medium text-brand-900/60 hover:text-brand-900 transition-colors py-2" data-navigate="false">Docs</a>
|
|
34
|
+
<div class="pt-2 border-t border-brand-100">
|
|
35
|
+
<a href="https://github.com/odac-run/odac" target="_blank" rel="noopener" class="btn-apple btn-primary text-sm w-full" data-navigate="false">GitHub</a>
|
|
13
36
|
</div>
|
|
14
37
|
</nav>
|