Files
Philip e045354892 feat: Initialize License Tracker Pro v1.2 project
Adds initial project structure, dependencies, and basic configuration for the License Tracker Pro v1.2 application. This includes setting up Vite for the build process, defining core types, and incorporating essential UI components like icons and a timeline. The project is now ready for development.
2026-01-26 18:55:43 -08:00

330 lines
6.4 KiB
CSS

/* General Body & Theme */
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
background-color: #0f172a; /* slate-900 */
color: #e5e7eb; /* gray-200 */
margin: 0;
line-height: 1.6;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 2rem;
}
/* Header */
header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
padding-bottom: 1rem;
border-bottom: 1px solid #334155; /* slate-700 */
}
header h1 {
font-size: 2.5rem;
color: #22d3ee; /* cyan-400 */
margin: 0;
}
header span {
margin-right: 1rem;
color: #9ca3af; /* gray-400 */
}
/* Buttons */
.button {
display: inline-block;
padding: 0.5rem 1rem;
border-radius: 6px;
text-decoration: none;
font-weight: 600;
transition: background-color 0.2s ease;
border: none;
cursor: pointer;
background-color: #334155; /* slate-700 */
color: #e5e7eb; /* gray-200 */
}
.button:hover {
background-color: #475569; /* slate-600 */
}
.primary-button {
background-color: #06b6d4; /* cyan-500 */
color: #0f172a; /* slate-900 */
}
.primary-button:hover {
background-color: #22d3ee; /* cyan-400 */
}
.delete-button {
background-color: #ef4444;
color: white;
}
.delete-button:hover {
background-color: #f87171;
}
/* Cards */
.card {
background-color: #1e293b; /* slate-800 */
border-radius: 8px;
padding: 1.5rem;
margin-bottom: 1.5rem;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
}
.card-header h2 {
margin: 0;
font-size: 1.25rem;
}
.nav-button {
display: inline-block;
padding: 0.25rem 0.5rem;
text-decoration: none;
color: #9ca3af;
background-color: #334155;
border-radius: 4px;
margin-left: 0.5rem;
}
/* Timeline */
.timeline-container {
padding: 1rem 0;
}
.timeline-bar {
position: relative;
height: 8px;
background-color: #334155;
border-radius: 4px;
}
.timeline-dot-wrapper {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.timeline-dot {
width: 16px;
height: 16px;
border-radius: 50%;
border: 2px solid #1e293b;
transform: translateX(-50%);
cursor: pointer;
}
.timeline-tooltip {
visibility: hidden;
width: max-content;
background-color: #0f172a;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 5px 10px;
position: absolute;
z-index: 1;
bottom: 150%;
left: 50%;
transform: translateX(-50%);
opacity: 0;
transition: opacity 0.3s;
}
.timeline-dot-wrapper:hover .timeline-tooltip {
visibility: visible;
opacity: 1;
}
.timeline-legend {
display: flex;
flex-wrap: wrap;
gap: 1rem;
margin-top: 1rem;
font-size: 0.875rem;
}
.legend-item {
display: flex;
align-items: center;
gap: 0.5rem;
}
.legend-color-box {
width: 14px;
height: 14px;
border-radius: 3px;
}
/* License List */
.actions {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
}
.license-item .license-main {
display: grid;
grid-template-columns: 150px 1fr 300px;
gap: 1.5rem;
align-items: start;
}
.license-image img {
width: 100px;
height: 100px;
border-radius: 50%;
object-fit: cover;
border: 3px solid #334155;
}
.license-details h3 {
font-size: 1.75rem;
color: #22d3ee;
margin-top: 0;
margin-bottom: 0.5rem;
}
.license-details p {
margin: 0.25rem 0;
color: #9ca3af;
}
.license-details p strong {
color: #e5e7eb;
}
.comment-box {
background-color: #334155;
padding: 0.5rem;
border-radius: 4px;
margin-top: 1rem;
font-size: 0.9rem;
}
.license-chart {
height: 150px;
}
.license-actions {
margin-top: 1rem;
padding-top: 1rem;
border-top: 1px solid #334155;
text-align: right;
}
.license-actions .button {
margin-left: 0.5rem;
}
/* Forms */
.form-container h3 {
margin-top: 2rem;
margin-bottom: 1rem;
padding-bottom: 0.5rem;
border-bottom: 1px solid #334155;
color: #22d3ee;
}
.form-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
}
.form-group {
display: flex;
flex-direction: column;
}
.form-group.form-group-full {
grid-column: 1 / -1;
}
.form-group label {
margin-bottom: 0.5rem;
font-weight: 500;
color: #9ca3af;
}
input[type="text"], input[type="email"], input[type="tel"], input[type="date"], input[type="number"], textarea {
background: #0f172a;
border: 1px solid #334155;
color: #e5e7eb;
border-radius: 6px;
padding: 0.75rem;
width: 100%;
box-sizing: border-box;
}
input:focus, textarea:focus {
outline: none;
border-color: #22d3ee;
box-shadow: 0 0 0 2px rgba(34, 211, 238, 0.5);
}
textarea {
resize: vertical;
}
.form-image-preview {
max-width: 100px;
margin-top: 1rem;
border-radius: 6px;
}
.form-actions {
text-align: right;
margin-top: 2rem;
border-top: 1px solid #334155;
padding-top: 1.5rem;
}
.form-actions .button {
margin-left: 1rem;
}
#renewals-container {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-bottom: 1rem;
}
.renewal-row {
display: grid;
grid-template-columns: 1fr 1fr 1fr auto;
gap: 1rem;
align-items: center;
}
/* Login Page */
.login-body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.login-container {
width: 100%;
max-width: 400px;
padding: 2.5rem;
background-color: #1e293b;
border-radius: 8px;
box-shadow: 0 10px 15px rgba(0,0,0,0.2);
}
.login-title {
text-align: center;
font-size: 2rem;
color: #22d3ee;
margin-bottom: 2rem;
}
.login-form div {
margin-bottom: 1rem;
}
.login-form label {
display: block;
margin-bottom: 0.5rem;
}
.login-form input {
width: 100%;
padding: 0.75rem;
}
.login-form button {
width: 100%;
padding: 0.75rem;
margin-top: 1rem;
font-size: 1rem;
}
.login-footer {
text-align: center;
margin-top: 1rem;
font-size: 0.9rem;
color: #9ca3af;
}
.error-message {
background-color: rgba(239, 68, 68, 0.2);
color: #f87171;
padding: 1rem;
border-radius: 6px;
margin-bottom: 1rem;
border: 1px solid #ef4444;
}