draft theme

This commit is contained in:
Chaoming Li 2024-11-17 16:31:17 +11:00
parent 267dabd6d6
commit 2fa05575b2
11 changed files with 597 additions and 0 deletions

61
assets/css/main.css Normal file
View file

@ -0,0 +1,61 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
html {
@apply scroll-smooth;
}
body {
@apply font-sans text-gray-700 antialiased;
}
h1, h2, h3, h4, h5, h6 {
@apply font-heading font-bold text-gray-900;
}
}
@layer components {
.btn {
@apply inline-flex items-center justify-center px-6 py-3 rounded-lg font-medium transition duration-200 ease-in-out;
}
.btn-primary {
@apply btn bg-primary-600 text-white hover:bg-primary-700 hover:scale-105;
}
.btn-secondary {
@apply btn bg-secondary-600 text-white hover:bg-secondary-700 hover:scale-105;
}
.btn-outline {
@apply btn border-2 border-gray-200 hover:border-primary-600 hover:text-primary-600;
}
.container {
@apply mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl;
}
.section {
@apply py-16 md:py-24;
}
.card {
@apply bg-white rounded-xl shadow-subtle p-6 transition duration-200 hover:shadow-elevation;
}
.nav-link {
@apply text-gray-600 hover:text-primary-600 font-medium transition duration-200;
}
.feature-grid {
@apply grid gap-8 md:grid-cols-2 lg:grid-cols-3;
}
}
@layer utilities {
.text-gradient {
@apply bg-clip-text text-transparent bg-gradient-to-r from-primary-600 to-secondary-600;
}
}

View file

@ -0,0 +1,192 @@
<!DOCTYPE html>
<html lang="{{ .Site.LanguageCode | default "en" }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }}</title>
<meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}">
<!-- Favicon -->
<link rel="icon" type="image/png" href="{{ "favicon.png" | relURL }}">
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@600;700;800&display=swap" rel="stylesheet">
<!-- Temporary Tailwind CDN for development -->
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: {
50: '#f0f9ff',
100: '#e0f2fe',
200: '#bae6fd',
300: '#7dd3fc',
400: '#38bdf8',
500: '#0ea5e9',
600: '#0284c7',
700: '#0369a1',
800: '#075985',
900: '#0c4a6e',
},
secondary: {
50: '#faf5ff',
100: '#f3e8ff',
200: '#e9d5ff',
300: '#d8b4fe',
400: '#c084fc',
500: '#a855f7',
600: '#9333ea',
700: '#7e22ce',
800: '#6b21a8',
900: '#581c87',
},
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
heading: ['Plus Jakarta Sans', 'sans-serif'],
},
},
},
}
</script>
</head>
<body class="flex flex-col min-h-screen">
<!-- Header -->
<header class="fixed w-full top-0 z-50 bg-white/80 backdrop-blur-sm border-b border-gray-100">
<div class="container">
<nav class="flex items-center justify-between h-20">
<!-- Logo -->
<a href="{{ .Site.BaseURL }}" class="flex items-center">
{{ with .Site.Params.logo }}
<img src="{{ . | relURL }}" alt="{{ $.Site.Title }}" class="h-8">
{{ else }}
<span class="text-xl font-bold text-gray-900">{{ .Site.Title }}</span>
{{ end }}
</a>
<!-- Navigation -->
<div class="hidden md:flex items-center space-x-8">
{{ range .Site.Menus.main }}
<a href="{{ .URL }}" class="text-gray-600 hover:text-primary-600 font-medium transition duration-200">{{ .Name }}</a>
{{ end }}
</div>
<!-- CTA Buttons -->
<div class="hidden md:flex items-center space-x-4">
<a href="{{ .Site.Params.signInURL | default "#" }}" class="inline-flex items-center justify-center px-6 py-3 rounded-lg font-medium transition duration-200 ease-in-out border-2 border-gray-200 hover:border-primary-600 hover:text-primary-600">
Sign in
</a>
<a href="{{ .Site.Params.getStartedURL | default "#" }}" class="inline-flex items-center justify-center px-6 py-3 rounded-lg font-medium transition duration-200 ease-in-out bg-primary-600 text-white hover:bg-primary-700 hover:scale-105">
Get Started
</a>
</div>
<!-- Mobile Menu Button -->
<button class="md:hidden p-2" id="mobile-menu-button" aria-label="Menu">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
</button>
</nav>
<!-- Mobile Menu -->
<div class="md:hidden hidden" id="mobile-menu">
<div class="py-4 space-y-4">
{{ range .Site.Menus.main }}
<a href="{{ .URL }}" class="block text-gray-600 hover:text-primary-600 font-medium transition duration-200 py-2">{{ .Name }}</a>
{{ end }}
<div class="pt-4 space-y-4">
<a href="{{ .Site.Params.signInURL | default "#" }}" class="block text-center inline-flex items-center justify-center px-6 py-3 rounded-lg font-medium transition duration-200 ease-in-out border-2 border-gray-200 hover:border-primary-600 hover:text-primary-600">
Sign in
</a>
<a href="{{ .Site.Params.getStartedURL | default "#" }}" class="block text-center inline-flex items-center justify-center px-6 py-3 rounded-lg font-medium transition duration-200 ease-in-out bg-primary-600 text-white hover:bg-primary-700 hover:scale-105">
Get Started
</a>
</div>
</div>
</div>
</div>
</header>
<!-- Main Content -->
<main class="flex-grow pt-20">
{{ block "main" . }}{{ end }}
</main>
<!-- Footer -->
<footer class="bg-gray-50 border-t border-gray-100">
<div class="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl py-12 md:py-16">
<div class="grid gap-8 md:grid-cols-2 lg:grid-cols-4">
<!-- Brand -->
<div class="space-y-4">
<a href="{{ .Site.BaseURL }}" class="inline-block">
{{ with .Site.Params.logo }}
<img src="{{ . | relURL }}" alt="{{ $.Site.Title }}" class="h-8">
{{ else }}
<span class="text-xl font-bold text-gray-900">{{ .Site.Title }}</span>
{{ end }}
</a>
<p class="text-gray-600">{{ .Site.Params.description }}</p>
</div>
<!-- Navigation -->
<div>
<h3 class="text-sm font-semibold uppercase tracking-wider text-gray-900 mb-4">Product</h3>
<ul class="space-y-3">
{{ range .Site.Menus.footer_product }}
<li><a href="{{ .URL }}" class="text-gray-600 hover:text-primary-600">{{ .Name }}</a></li>
{{ end }}
</ul>
</div>
<div>
<h3 class="text-sm font-semibold uppercase tracking-wider text-gray-900 mb-4">Company</h3>
<ul class="space-y-3">
{{ range .Site.Menus.footer_company }}
<li><a href="{{ .URL }}" class="text-gray-600 hover:text-primary-600">{{ .Name }}</a></li>
{{ end }}
</ul>
</div>
<!-- Newsletter -->
<div>
<h3 class="text-sm font-semibold uppercase tracking-wider text-gray-900 mb-4">Stay Updated</h3>
<form class="space-y-4">
<div>
<label for="email" class="sr-only">Email address</label>
<input type="email" id="email" name="email" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-primary-500" placeholder="Enter your email">
</div>
<button type="submit" class="w-full inline-flex items-center justify-center px-6 py-3 rounded-lg font-medium transition duration-200 ease-in-out bg-primary-600 text-white hover:bg-primary-700 hover:scale-105">Subscribe</button>
</form>
</div>
</div>
<!-- Bottom -->
<div class="mt-12 pt-8 border-t border-gray-200">
<div class="flex flex-col md:flex-row justify-between items-center space-y-4 md:space-y-0">
<p class="text-gray-600 text-sm">
© {{ now.Format "2006" }} {{ .Site.Title }}. All rights reserved.
</p>
<div class="flex space-x-6">
{{ range .Site.Menus.footer_legal }}
<a href="{{ .URL }}" class="text-sm text-gray-600 hover:text-primary-600">{{ .Name }}</a>
{{ end }}
</div>
</div>
</div>
</div>
</footer>
<!-- Mobile Menu Script -->
<script>
document.getElementById('mobile-menu-button').addEventListener('click', function() {
document.getElementById('mobile-menu').classList.toggle('hidden');
});
</script>
</body>
</html>

147
layouts/index.html Normal file
View file

@ -0,0 +1,147 @@
{{ define "main" }}
<!-- Hero Section -->
<section class="relative overflow-hidden bg-gradient-to-b from-gray-50 to-white">
<div class="container pt-16 pb-20 md:pt-24 md:pb-28">
<div class="grid lg:grid-cols-2 gap-12 items-center">
<div class="space-y-8">
<h1 class="text-4xl md:text-5xl lg:text-6xl font-bold leading-tight">
Unlock the Hidden Revenue in Your User Journeys
</h1>
<p class="text-xl text-gray-600">
Transform your user experience with powerful analytics and insights that drive growth and engagement.
</p>
<div class="flex flex-col sm:flex-row gap-4">
<a href="#" class="btn-primary text-center">
Get Started Free
</a>
<a href="#" class="btn-outline text-center">
Schedule Demo
</a>
</div>
</div>
<div class="relative">
<div class="relative z-10">
<img src="{{ "images/hero-dashboard.png" | relURL }}" alt="Analytics Dashboard" class="rounded-xl shadow-elevation">
</div>
<!-- Background decoration -->
<div class="absolute -top-20 -right-20 w-64 h-64 bg-primary-100 rounded-full filter blur-3xl opacity-50"></div>
<div class="absolute -bottom-20 -left-20 w-64 h-64 bg-secondary-100 rounded-full filter blur-3xl opacity-50"></div>
</div>
</div>
</div>
</section>
<!-- Client Logos -->
<section class="border-y border-gray-100">
<div class="container py-12">
<p class="text-center text-sm font-medium text-gray-600 mb-8">Trusted by leading companies worldwide</p>
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-8 items-center justify-items-center opacity-70">
{{ range $i := (seq 6) }}
<img src="{{ (printf "images/client-logo-%d.png" $i) | relURL }}" alt="Client Logo" class="h-8">
{{ end }}
</div>
</div>
</section>
<!-- Feature Sections -->
<section class="section">
<div class="container">
<div class="text-center max-w-3xl mx-auto mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-6">Powerful Features for Modern Teams</h2>
<p class="text-xl text-gray-600">Discover how our platform helps you understand and optimize every aspect of your user experience.</p>
</div>
<!-- Feature Grid -->
<div class="space-y-24">
<!-- Feature 1 -->
<div class="grid lg:grid-cols-2 gap-12 items-center">
<div class="space-y-6">
<div class="inline-block px-4 py-2 rounded-full bg-primary-100 text-primary-700 font-medium">User Analytics</div>
<h3 class="text-2xl md:text-3xl font-bold">Deep Insights into User Behavior</h3>
<p class="text-lg text-gray-600">Track and analyze user interactions in real-time. Understand how users navigate your product and identify opportunities for improvement.</p>
<ul class="space-y-4">
{{ range (slice "Real-time user tracking" "Behavioral analytics" "Custom event tracking" "User flow visualization") }}
<li class="flex items-center space-x-3">
<svg class="w-5 h-5 text-primary-600" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
</svg>
<span>{{ . }}</span>
</li>
{{ end }}
</ul>
<a href="#" class="btn-primary inline-block">Learn More</a>
</div>
<div class="relative">
<img src="{{ "images/feature-analytics.png" | relURL }}" alt="Analytics Feature" class="rounded-xl shadow-elevation">
</div>
</div>
<!-- Feature 2 -->
<div class="grid lg:grid-cols-2 gap-12 items-center">
<div class="relative order-2 lg:order-1">
<img src="{{ "images/feature-session.png" | relURL }}" alt="Session Replay Feature" class="rounded-xl shadow-elevation">
</div>
<div class="space-y-6 order-1 lg:order-2">
<div class="inline-block px-4 py-2 rounded-full bg-secondary-100 text-secondary-700 font-medium">Session Replay</div>
<h3 class="text-2xl md:text-3xl font-bold">Watch Real User Sessions</h3>
<p class="text-lg text-gray-600">Understand exactly how users interact with your product through high-fidelity session recordings and heatmaps.</p>
<ul class="space-y-4">
{{ range (slice "Full session recordings" "Click and scroll heatmaps" "Error tracking" "User journey analysis") }}
<li class="flex items-center space-x-3">
<svg class="w-5 h-5 text-secondary-600" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
</svg>
<span>{{ . }}</span>
</li>
{{ end }}
</ul>
<a href="#" class="btn-secondary inline-block">Learn More</a>
</div>
</div>
</div>
</div>
</section>
<!-- Testimonials -->
<section class="section bg-gray-50">
<div class="container">
<div class="text-center max-w-3xl mx-auto mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-6">Loved by Teams Worldwide</h2>
<p class="text-xl text-gray-600">See what our customers have to say about their experience with our platform.</p>
</div>
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{{ range $i := (seq 3) }}
<div class="card">
<div class="flex items-center space-x-4 mb-6">
<img src="{{ (printf "images/testimonial-%d.jpg" $i) | relURL }}" alt="Testimonial" class="w-12 h-12 rounded-full">
<div>
<h4 class="font-bold">John Smith</h4>
<p class="text-gray-600">Product Manager at Company</p>
</div>
</div>
<p class="text-gray-600">"This platform has transformed how we understand our users. The insights we've gained have been invaluable for our product development."</p>
</div>
{{ end }}
</div>
</div>
</section>
<!-- CTA Section -->
<section class="section bg-primary-600">
<div class="container">
<div class="text-center max-w-3xl mx-auto">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-6">Ready to Transform Your User Experience?</h2>
<p class="text-xl text-primary-100 mb-8">Join thousands of companies already using our platform to drive growth.</p>
<div class="flex flex-col sm:flex-row justify-center gap-4">
<a href="#" class="btn bg-white text-primary-600 hover:bg-gray-100">
Get Started Free
</a>
<a href="#" class="btn border-2 border-white text-white hover:bg-primary-700">
Schedule Demo
</a>
</div>
</div>
</div>
</section>
{{ end }}

24
package.json Normal file
View file

@ -0,0 +1,24 @@
{
"name": "hugo-sassify-theme",
"version": "1.0.0",
"description": "A modern Hugo theme for SaaS websites",
"scripts": {
"dev": "npx tailwindcss -i ./assets/css/main.css -o ./assets/css/style.css --watch",
"build": "npx tailwindcss -i ./assets/css/main.css -o ./assets/css/style.css --minify"
},
"keywords": [
"hugo",
"theme",
"saas",
"tailwind"
],
"author": "Chaoming Li",
"license": "MIT",
"devDependencies": {
"@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.10",
"autoprefixer": "^10.4.16",
"postcss": "^8.4.31",
"tailwindcss": "^3.3.5"
}
}

View file

@ -0,0 +1,4 @@
<svg width="160" height="40" viewBox="0 0 160 40" xmlns="http://www.w3.org/2000/svg">
<rect x="20" y="10" width="120" height="20" rx="4" fill="#6b7280"/>
<text x="80" y="25" font-family="Arial" font-size="14" fill="white" text-anchor="middle">Client One</text>
</svg>

After

Width:  |  Height:  |  Size: 272 B

View file

@ -0,0 +1,28 @@
<svg width="600" height="400" viewBox="0 0 600 400" xmlns="http://www.w3.org/2000/svg">
<rect width="600" height="400" fill="#f3f4f6"/>
<rect x="20" y="20" width="560" height="360" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="2"/>
<!-- Header -->
<rect x="40" y="40" width="200" height="24" rx="4" fill="#e5e7eb"/>
<rect x="40" y="72" width="160" height="16" rx="4" fill="#f3f4f6"/>
<!-- Analytics Graph -->
<rect x="40" y="120" width="520" height="220" rx="4" fill="#f9fafb"/>
<!-- Graph Lines -->
<path d="M60 300 C 140 200, 220 280, 300 180 S 460 220, 540 120"
stroke="#60a5fa" stroke-width="3" fill="none"/>
<path d="M60 320 C 140 280, 220 300, 300 240 S 460 260, 540 200"
stroke="#818cf8" stroke-width="3" fill="none" opacity="0.6"/>
<!-- Data Points -->
<circle cx="140" cy="200" r="6" fill="#60a5fa"/>
<circle cx="220" cy="280" r="6" fill="#60a5fa"/>
<circle cx="300" cy="180" r="6" fill="#60a5fa"/>
<circle cx="380" cy="220" r="6" fill="#60a5fa"/>
<circle cx="460" cy="220" r="6" fill="#60a5fa"/>
<!-- Legend -->
<rect x="40" y="360" width="80" height="8" rx="4" fill="#60a5fa"/>
<rect x="140" y="360" width="80" height="8" rx="4" fill="#818cf8"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,35 @@
<svg width="600" height="400" viewBox="0 0 600 400" xmlns="http://www.w3.org/2000/svg">
<rect width="600" height="400" fill="#f3f4f6"/>
<rect x="20" y="20" width="560" height="360" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="2"/>
<!-- Session Player Header -->
<rect x="40" y="40" width="520" height="40" rx="4" fill="#f9fafb"/>
<circle cx="70" cy="60" r="12" fill="#a855f7"/>
<rect x="100" y="50" width="120" height="20" rx="4" fill="#e5e7eb"/>
<circle cx="500" cy="60" r="12" fill="#ef4444"/>
<!-- Timeline -->
<rect x="40" y="100" width="520" height="20" rx="4" fill="#f9fafb"/>
<rect x="40" y="100" width="200" height="20" rx="4" fill="#a855f7" opacity="0.3"/>
<circle cx="240" cy="110" r="8" fill="#a855f7"/>
<!-- Session Content -->
<rect x="40" y="140" width="520" height="220" rx="4" fill="#f9fafb"/>
<!-- Mouse Movement Path -->
<path d="M100 200 C 200 180, 300 280, 400 200 S 500 220, 520 180"
stroke="#a855f7" stroke-width="2" stroke-dasharray="4 4" fill="none"/>
<!-- Click Points -->
<circle cx="200" cy="180" r="8" fill="#a855f7" opacity="0.3"/>
<circle cx="300" cy="280" r="8" fill="#a855f7" opacity="0.3"/>
<circle cx="400" cy="200" r="8" fill="#a855f7" opacity="0.3"/>
<!-- Cursor -->
<path d="M520 180 L 530 190 L 515 185 Z" fill="#a855f7"/>
<!-- Event List -->
<rect x="40" y="320" width="120" height="24" rx="4" fill="#e5e7eb"/>
<rect x="180" y="320" width="120" height="24" rx="4" fill="#e5e7eb"/>
<rect x="320" y="320" width="120" height="24" rx="4" fill="#e5e7eb"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,26 @@
<svg width="800" height="600" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg">
<rect width="800" height="600" fill="#f3f4f6"/>
<rect x="40" y="40" width="720" height="520" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="2"/>
<!-- Header -->
<rect x="60" y="60" width="680" height="60" rx="4" fill="#f9fafb"/>
<circle cx="100" cy="90" r="15" fill="#60a5fa"/>
<rect x="140" y="80" width="120" height="20" rx="4" fill="#e5e7eb"/>
<!-- Charts -->
<rect x="60" y="140" width="320" height="200" rx="4" fill="#f9fafb"/>
<path d="M80 300 L140 260 L200 280 L260 220 L320 240 L360 200" stroke="#60a5fa" stroke-width="2" fill="none"/>
<!-- Stats -->
<rect x="400" y="140" width="340" height="200" rx="4" fill="#f9fafb"/>
<rect x="420" y="160" width="140" height="20" rx="4" fill="#e5e7eb"/>
<rect x="420" y="200" width="300" height="8" rx="4" fill="#60a5fa"/>
<rect x="420" y="220" width="260" height="8" rx="4" fill="#818cf8"/>
<rect x="420" y="240" width="220" height="8" rx="4" fill="#a78bfa"/>
<!-- Bottom Section -->
<rect x="60" y="360" width="680" height="180" rx="4" fill="#f9fafb"/>
<rect x="80" y="380" width="200" height="140" rx="4" fill="#ffffff" stroke="#e5e7eb" stroke-width="1"/>
<rect x="300" y="380" width="200" height="140" rx="4" fill="#ffffff" stroke="#e5e7eb" stroke-width="1"/>
<rect x="520" y="380" width="200" height="140" rx="4" fill="#ffffff" stroke="#e5e7eb" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,5 @@
<svg width="80" height="80" viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg">
<circle cx="40" cy="40" r="40" fill="#e5e7eb"/>
<circle cx="40" cy="35" r="15" fill="#9ca3af"/>
<path d="M40 80 C 10 80 10 55 40 55 C 70 55 70 80 40 80" fill="#9ca3af"/>
</svg>

After

Width:  |  Height:  |  Size: 267 B

63
tailwind.config.js Normal file
View file

@ -0,0 +1,63 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./layouts/**/*.html"],
theme: {
extend: {
colors: {
primary: {
50: '#f0f9ff',
100: '#e0f2fe',
200: '#bae6fd',
300: '#7dd3fc',
400: '#38bdf8',
500: '#0ea5e9',
600: '#0284c7',
700: '#0369a1',
800: '#075985',
900: '#0c4a6e',
},
secondary: {
50: '#faf5ff',
100: '#f3e8ff',
200: '#e9d5ff',
300: '#d8b4fe',
400: '#c084fc',
500: '#a855f7',
600: '#9333ea',
700: '#7e22ce',
800: '#6b21a8',
900: '#581c87',
},
accent: {
green: '#22c55e',
yellow: '#eab308',
}
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
heading: ['Plus Jakarta Sans', 'sans-serif'],
},
boxShadow: {
'subtle': '0 2px 15px -3px rgba(0, 0, 0, 0.07)',
'elevation': '0 10px 40px -3px rgba(0, 0, 0, 0.1)',
},
borderRadius: {
'xl': '1rem',
'2xl': '1.5rem',
},
animation: {
'subtle-bounce': 'subtle-bounce 2s infinite',
},
keyframes: {
'subtle-bounce': {
'0%, 100%': { transform: 'translateY(0)' },
'50%': { transform: 'translateY(-5px)' },
},
},
},
},
plugins: [
require('@tailwindcss/forms'),
require('@tailwindcss/typography'),
],
}

12
theme.toml Normal file
View file

@ -0,0 +1,12 @@
name = "Hugo Sassify"
license = "MIT"
licenselink = "https://github.com/yourusername/hugo-sassify-theme/blob/master/LICENSE"
description = "A modern Hugo theme for SaaS websites built with TailwindCSS"
homepage = "https://github.com/yourusername/hugo-sassify-theme"
tags = ["saas", "business", "tailwind", "responsive", "modern", "clean"]
features = ["responsive", "tailwind", "modern design"]
min_version = "0.80.0"
[author]
name = "Your Name"
homepage = "https://yourwebsite.com"