Minimal SaaS - Free HTML/CSS UI Kit

A clean, modern UI kit tailored for SaaS dashboards and applications.

Download Full Kit (.zip)

Complete kit with all components & styles

Just need one component?

Download base.css and add the following line to your HTML:

Then grab a component below and add it to your HTML.

Color Palette

Primary #4F46E5
Background #F9FAFB
Surface #FFFFFF
Border #E5E7EB
Text #111827

Typography


Navbars

Simple Clean Navbar

HTML
<nav class="ms-navbar">
    <div class="ms-logo">MinimalSaaS</div>
    <ul class="ms-nav-links">
        <li><a href="##">Product</a></li>
        <li><a href="##">Features</a></li>
        <li><a href="##">Pricing</a></li>
    </ul>
    <div class="ms-nav-actions">
        <a href="##" class="ms-btn ms-btn-outline">Log in</a>
        <a href="##" class="ms-btn ms-btn-primary">Sign up</a>
    </div>
</nav>
CSS (Component Only)
/* Component: Simple Clean Navbar */
/* NOTE: This component requires base.css to be included in your page. */

.ms-navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 1rem 2rem;
    background-color: #ffffff;
    border-bottom: 1px solid #e5e7eb;
}
.ms-navbar .ms-logo {
    font-weight: 700;
    font-size: 1.25rem;
    color: #111827;
}
.ms-nav-links {
    display: flex;
    gap: 2rem;
    list-style: none;
    margin: 0;
    padding: 0;
}
.ms-nav-links a {
    text-decoration: none;
    color: #4b5563;
    font-size: 0.95rem;
    font-weight: 500;
    transition: color 0.2s;
}
.ms-nav-links a:hover {
    color: #111827;
}
.ms-nav-actions {
    display: flex;
    gap: 1rem;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 1rem 2rem;
    background-color: #ffffff;
    border-bottom: 1px solid #e5e7eb;
}
.ms-navbar .ms-logo {
    font-weight: 700;
    font-size: 1.25rem;
    color: #111827;
}
.ms-nav-links {
    display: flex;
    gap: 2rem;
    list-style: none;
    margin: 0;
    padding: 0;
}
.ms-nav-links a {
    text-decoration: none;
    color: #4b5563;
    font-size: 0.95rem;
    font-weight: 500;
    transition: color 0.2s;
}
.ms-nav-links a:hover {
    color: #111827;
}
.ms-nav-actions {
    display: flex;
    gap: 1rem;
}

Dashboard Sidebar

HTML
<aside class="ms-sidebar">
    <div class="ms-sidebar-header">
        <div class="ms-logo">SaaS<span>App</span></div>
    </div>
    <nav class="ms-sidebar-nav">
        <ul>
            <li><a href="##" class="active"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg> Dashboard</a></li>
            <li><a href="##"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg> Team</a></li>
            <li><a href="##"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg> Projects</a></li>
            <li><a href="##"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg> Calendar</a></li>
        </ul>
        <div class="ms-nav-divider"></div>
        <ul>
            <li><a href="##"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg> Settings</a></li>
        </ul>
    </nav>
    <div class="ms-sidebar-footer">
        <div class="ms-user-profile">
            <img src="https://i.pravatar.cc/100?img=3" alt="User">
            <div class="ms-user-info">
                <strong>Alex Doe</strong>
                <span>[email protected]</span>
            </div>
        </div>
    </div>
</aside>
CSS (Component Only)
/* Component: Dashboard Sidebar */
/* NOTE: This component requires base.css to be included in your page. */

.ms-sidebar {
    width: 280px;
    height: 600px; /* Using fixed height instead of 100vh for iframe preview stability */
    background: #ffffff;
    color: #111827;
    display: flex;
    flex-direction: column;
    border-right: 1px solid #e5e7eb;
}

.ms-sidebar-header {
    padding: 1.5rem 2rem;
}

.ms-sidebar .ms-logo {
    font-size: 1.5rem;
    font-weight: 700;
    color: #111827;
}

.ms-sidebar .ms-logo span {
    color: #4f46e5;
}

.ms-sidebar-nav {
    flex: 1;
    padding: 1rem 1.5rem;
    overflow-y: auto;
}

.ms-sidebar-nav ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

.ms-sidebar-nav li {
    margin-bottom: 0.5rem;
}

.ms-sidebar-nav a {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.75rem 1rem;
    color: #4b5563;
    text-decoration: none;
    border-radius: 8px;
    font-weight: 500;
    transition: all 0.2s;
}

.ms-sidebar-nav a:hover {
    background: #f3f4f6;
    color: #111827;
}

.ms-sidebar-nav a.active {
    background: #4f46e5;
    color: #ffffff;
}

.ms-nav-divider {
    height: 1px;
    background: #e5e7eb;
    margin: 1.5rem 0;
}

.ms-sidebar-footer {
    padding: 1.5rem;
    border-top: 1px solid #e5e7eb;
}

.ms-user-profile {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.ms-user-profile img {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    object-fit: cover;
}

.ms-user-info {
    display: flex;
    flex-direction: column;
}

.ms-user-info strong {
    font-size: 0.9rem;
    color: #111827;
}

.ms-user-info span {
    font-size: 0.8rem;
    color: #6b7280;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-sidebar {
    width: 280px;
    height: 600px; /* Using fixed height instead of 100vh for iframe preview stability */
    background: #ffffff;
    color: #111827;
    display: flex;
    flex-direction: column;
    border-right: 1px solid #e5e7eb;
}

.ms-sidebar-header {
    padding: 1.5rem 2rem;
}

.ms-sidebar .ms-logo {
    font-size: 1.5rem;
    font-weight: 700;
    color: #111827;
}

.ms-sidebar .ms-logo span {
    color: #4f46e5;
}

.ms-sidebar-nav {
    flex: 1;
    padding: 1rem 1.5rem;
    overflow-y: auto;
}

.ms-sidebar-nav ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

.ms-sidebar-nav li {
    margin-bottom: 0.5rem;
}

.ms-sidebar-nav a {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.75rem 1rem;
    color: #4b5563;
    text-decoration: none;
    border-radius: 8px;
    font-weight: 500;
    transition: all 0.2s;
}

.ms-sidebar-nav a:hover {
    background: #f3f4f6;
    color: #111827;
}

.ms-sidebar-nav a.active {
    background: #4f46e5;
    color: #ffffff;
}

.ms-nav-divider {
    height: 1px;
    background: #e5e7eb;
    margin: 1.5rem 0;
}

.ms-sidebar-footer {
    padding: 1.5rem;
    border-top: 1px solid #e5e7eb;
}

.ms-user-profile {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.ms-user-profile img {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    object-fit: cover;
}

.ms-user-info {
    display: flex;
    flex-direction: column;
}

.ms-user-info strong {
    font-size: 0.9rem;
    color: #111827;
}

.ms-user-info span {
    font-size: 0.8rem;
    color: #6b7280;
}

Hero Sections

Split Layout Hero

HTML
<div class="ms-hero-split">
    <div class="ms-hero-content">
        <span class="ms-badge">New Release v2.0</span>
        <h1>Data to enrich your online business</h1>
        <p>Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui lorem cupidatat commodo. Elit sunt amet fugiat veniam occaecat fugiat aliqua.</p>
        <div class="ms-hero-actions">
            <a href="##" class="ms-btn ms-btn-primary">Get started</a>
            <a href="##" class="ms-btn ms-btn-ghost">View details <span aria-hidden="true">→</span></a>
        </div>
    </div>
    <div class="ms-hero-image">
        <img src="https://images.unsplash.com/photo-1551434678-e076c223a692?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="App screenshot">
    </div>
</div>
CSS (Component Only)
/* Component: Split Layout Hero */
/* NOTE: This component requires base.css to be included in your page. */

.ms-hero-split {
    display: flex;
    align-items: center;
    gap: 4rem;
    padding: 6rem 2rem;
    background: #ffffff;
}

.ms-hero-content {
    flex: 1;
    max-width: 600px;
}

.ms-badge {
    display: inline-block;
    padding: 0.25rem 0.75rem;
    background: #eef2ff;
    color: #4f46e5;
    border-radius: 50px;
    font-size: 0.875rem;
    font-weight: 600;
    margin-bottom: 1.5rem;
}

.ms-hero-content h1 {
    font-size: 3.5rem;
    font-weight: 800;
    line-height: 1.1;
    color: #111827;
    margin-top: 0;
    margin-bottom: 1.5rem;
}

.ms-hero-content p {
    font-size: 1.25rem;
    line-height: 1.6;
    color: #4b5563;
    margin-bottom: 2.5rem;
}

.ms-hero-actions {
    display: flex;
    gap: 1rem;
    align-items: center;
}

.ms-hero-image {
    flex: 1;
}

.ms-hero-image img {
    width: 100%;
    border-radius: 12px;
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}

@media (max-width: 900px) {
    .ms-hero-split {
        flex-direction: column;
        padding: 4rem 1.5rem;
    }
    
    .ms-hero-content h1 {
        font-size: 2.5rem;
    }
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-hero-split {
    display: flex;
    align-items: center;
    gap: 4rem;
    padding: 6rem 2rem;
    background: #ffffff;
}

.ms-hero-content {
    flex: 1;
    max-width: 600px;
}

.ms-badge {
    display: inline-block;
    padding: 0.25rem 0.75rem;
    background: #eef2ff;
    color: #4f46e5;
    border-radius: 50px;
    font-size: 0.875rem;
    font-weight: 600;
    margin-bottom: 1.5rem;
}

.ms-hero-content h1 {
    font-size: 3.5rem;
    font-weight: 800;
    line-height: 1.1;
    color: #111827;
    margin-top: 0;
    margin-bottom: 1.5rem;
}

.ms-hero-content p {
    font-size: 1.25rem;
    line-height: 1.6;
    color: #4b5563;
    margin-bottom: 2.5rem;
}

.ms-hero-actions {
    display: flex;
    gap: 1rem;
    align-items: center;
}

.ms-hero-image {
    flex: 1;
}

.ms-hero-image img {
    width: 100%;
    border-radius: 12px;
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}

@media (max-width: 900px) {
    .ms-hero-split {
        flex-direction: column;
        padding: 4rem 1.5rem;
    }
    
    .ms-hero-content h1 {
        font-size: 2.5rem;
    }
}

Centered Hero

HTML
<div class="ms-hero-centered">
    <div class="ms-hero-bg-blur"></div>
    <div class="ms-hero-content">
        <h1>Deploy to the cloud with confidence</h1>
        <p>Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui lorem cupidatat commodo. Elit sunt amet fugiat veniam occaecat fugiat aliqua.</p>
        <div class="ms-hero-actions">
            <a href="##" class="ms-btn ms-btn-primary">Get started</a>
            <a href="##" class="ms-btn ms-btn-outline">Live demo</a>
        </div>
    </div>
</div>
CSS (Component Only)
/* Component: Centered Hero */
/* NOTE: This component requires base.css to be included in your page. */

.ms-hero-centered {
    position: relative;
    padding: 8rem 2rem;
    text-align: center;
    background: #ffffff;
    overflow: hidden;
}

.ms-hero-bg-blur {
    position: absolute;
    top: -50%;
    left: 50%;
    transform: translateX(-50%);
    width: 800px;
    height: 800px;
    background: radial-gradient(circle, rgba(79,70,229,0.1) 0%, rgba(255,255,255,0) 70%);
    z-index: 0;
    pointer-events: none;
}

.ms-hero-content {
    position: relative;
    z-index: 1;
    max-width: 800px;
    margin: 0 auto;
}

.ms-hero-content h1 {
    font-size: 4rem;
    font-weight: 800;
    line-height: 1.1;
    color: #111827;
    margin-top: 0;
    margin-bottom: 1.5rem;
    letter-spacing: -0.02em;
}

.ms-hero-content p {
    font-size: 1.25rem;
    line-height: 1.6;
    color: #4b5563;
    margin-bottom: 2.5rem;
    max-width: 600px;
    margin-left: auto;
    margin-right: auto;
}

.ms-hero-actions {
    display: flex;
    justify-content: center;
    gap: 1rem;
}

@media (max-width: 768px) {
    .ms-hero-content h1 {
        font-size: 2.5rem;
    }
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-hero-centered {
    position: relative;
    padding: 8rem 2rem;
    text-align: center;
    background: #ffffff;
    overflow: hidden;
}

.ms-hero-bg-blur {
    position: absolute;
    top: -50%;
    left: 50%;
    transform: translateX(-50%);
    width: 800px;
    height: 800px;
    background: radial-gradient(circle, rgba(79,70,229,0.1) 0%, rgba(255,255,255,0) 70%);
    z-index: 0;
    pointer-events: none;
}

.ms-hero-content {
    position: relative;
    z-index: 1;
    max-width: 800px;
    margin: 0 auto;
}

.ms-hero-content h1 {
    font-size: 4rem;
    font-weight: 800;
    line-height: 1.1;
    color: #111827;
    margin-top: 0;
    margin-bottom: 1.5rem;
    letter-spacing: -0.02em;
}

.ms-hero-content p {
    font-size: 1.25rem;
    line-height: 1.6;
    color: #4b5563;
    margin-bottom: 2.5rem;
    max-width: 600px;
    margin-left: auto;
    margin-right: auto;
}

.ms-hero-actions {
    display: flex;
    justify-content: center;
    gap: 1rem;
}

@media (max-width: 768px) {
    .ms-hero-content h1 {
        font-size: 2.5rem;
    }
}

Buttons

Primary Buttons

HTML
<div class="ms-button-group">
    <button class="ms-btn ms-btn-primary">Primary Button</button>
    <button class="ms-btn ms-btn-primary ms-btn-icon">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
        With Icon
    </button>
    <button class="ms-btn ms-btn-primary" disabled>Disabled State</button>
</div>
CSS (Component Only)
/* Component: Primary Buttons */
/* NOTE: This component requires base.css to be included in your page. */

/* This component uses base button styles defined in base.css */
.ms-button-group {
    display: flex;
    gap: 1rem;
    align-items: center;
    flex-wrap: wrap;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
/* This component uses base button styles defined in base.css */
.ms-button-group {
    display: flex;
    gap: 1rem;
    align-items: center;
    flex-wrap: wrap;
}

Outline Buttons

HTML
<div class="ms-button-group">
    <button class="ms-btn ms-btn-outline">Outline Button</button>
    <button class="ms-btn ms-btn-outline ms-btn-icon">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
        Download
    </button>
    <button class="ms-btn ms-btn-outline" disabled>Disabled State</button>
</div>
CSS (Component Only)
/* Component: Outline Buttons */
/* NOTE: This component requires base.css to be included in your page. */

/* This component uses base button styles defined in base.css */
.ms-button-group {
    display: flex;
    gap: 1rem;
    align-items: center;
    flex-wrap: wrap;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
/* This component uses base button styles defined in base.css */
.ms-button-group {
    display: flex;
    gap: 1rem;
    align-items: center;
    flex-wrap: wrap;
}

Forms

Login Form

HTML
<div class="ms-login-container">
    <div class="ms-login-header">
        <h2>Sign in to your account</h2>
        <p>Or <a href="##">start your 14-day free trial</a></p>
    </div>
    <form class="ms-login-form">
        <div class="ms-form-group">
            <label for="email">Email address</label>
            <input type="email" id="email" placeholder="[email protected]" required>
        </div>
        <div class="ms-form-group">
            <label for="password">Password</label>
            <input type="password" id="password" required>
        </div>
        <div class="ms-form-actions">
            <div class="ms-checkbox">
                <input type="checkbox" id="remember">
                <label for="remember">Remember me</label>
            </div>
            <a href="##" class="ms-forgot-password">Forgot password?</a>
        </div>
        <button type="submit" class="ms-btn ms-btn-primary ms-btn-block">Sign in</button>
    </form>
</div>
CSS (Component Only)
/* Component: Login Form */
/* NOTE: This component requires base.css to be included in your page. */

.ms-login-container {
    max-width: 400px;
    margin: 0 auto;
}

.ms-login-header {
    text-align: center;
    margin-bottom: 2rem;
}

.ms-login-header h2 {
    font-size: 1.8rem;
    font-weight: 800;
    color: #111827;
    margin: 0 0 0.5rem 0;
}

.ms-login-header p {
    color: #6b7280;
    margin: 0;
}

.ms-login-header a {
    color: #4f46e5;
    text-decoration: none;
    font-weight: 500;
}

.ms-login-header a:hover {
    color: #4338ca;
}

.ms-login-form {
    background: #ffffff;
    padding: 2rem;
    border-radius: 8px;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
    border: 1px solid #f3f4f6;
}

.ms-form-group {
    margin-bottom: 1.5rem;
}

.ms-form-group label {
    display: block;
    font-size: 0.875rem;
    font-weight: 500;
    color: #374151;
    margin-bottom: 0.5rem;
}

.ms-form-group input[type="email"],
.ms-form-group input[type="password"] {
    width: 100%;
    padding: 0.6rem 0.75rem;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    font-size: 0.95rem;
    color: #111827;
    transition: border-color 0.2s, box-shadow 0.2s;
    box-sizing: border-box;
}

.ms-form-group input:focus {
    outline: none;
    border-color: #4f46e5;
    box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
}

.ms-form-actions {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1.5rem;
}

.ms-checkbox {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.ms-checkbox input[type="checkbox"] {
    width: 1rem;
    height: 1rem;
    accent-color: #4f46e5;
    border-radius: 4px;
    border: 1px solid #d1d5db;
}

.ms-checkbox label {
    font-size: 0.875rem;
    color: #374151;
    cursor: pointer;
}

.ms-forgot-password {
    font-size: 0.875rem;
    color: #4f46e5;
    text-decoration: none;
    font-weight: 500;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-login-container {
    max-width: 400px;
    margin: 0 auto;
}

.ms-login-header {
    text-align: center;
    margin-bottom: 2rem;
}

.ms-login-header h2 {
    font-size: 1.8rem;
    font-weight: 800;
    color: #111827;
    margin: 0 0 0.5rem 0;
}

.ms-login-header p {
    color: #6b7280;
    margin: 0;
}

.ms-login-header a {
    color: #4f46e5;
    text-decoration: none;
    font-weight: 500;
}

.ms-login-header a:hover {
    color: #4338ca;
}

.ms-login-form {
    background: #ffffff;
    padding: 2rem;
    border-radius: 8px;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
    border: 1px solid #f3f4f6;
}

.ms-form-group {
    margin-bottom: 1.5rem;
}

.ms-form-group label {
    display: block;
    font-size: 0.875rem;
    font-weight: 500;
    color: #374151;
    margin-bottom: 0.5rem;
}

.ms-form-group input[type="email"],
.ms-form-group input[type="password"] {
    width: 100%;
    padding: 0.6rem 0.75rem;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    font-size: 0.95rem;
    color: #111827;
    transition: border-color 0.2s, box-shadow 0.2s;
    box-sizing: border-box;
}

.ms-form-group input:focus {
    outline: none;
    border-color: #4f46e5;
    box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
}

.ms-form-actions {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1.5rem;
}

.ms-checkbox {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.ms-checkbox input[type="checkbox"] {
    width: 1rem;
    height: 1rem;
    accent-color: #4f46e5;
    border-radius: 4px;
    border: 1px solid #d1d5db;
}

.ms-checkbox label {
    font-size: 0.875rem;
    color: #374151;
    cursor: pointer;
}

.ms-forgot-password {
    font-size: 0.875rem;
    color: #4f46e5;
    text-decoration: none;
    font-weight: 500;
}

Account Settings Form

HTML
<div class="ms-settings-panel">
    <div class="ms-panel-header">
        <h3>Profile</h3>
        <p>This information will be displayed publicly so be careful what you share.</p>
    </div>
    <form class="ms-settings-form">
        <div class="ms-form-row">
            <label for="username">Username</label>
            <div class="ms-input-group">
                <span class="ms-input-prefix">workcation.com/</span>
                <input type="text" id="username" placeholder="janesmith">
            </div>
        </div>
        
        <div class="ms-form-row">
            <label for="about">About</label>
            <textarea id="about" rows="3" placeholder="Brief description for your profile. URLs are hyperlinked."></textarea>
        </div>

        <div class="ms-form-row ms-photo-row">
            <label>Photo</label>
            <div class="ms-photo-upload">
                <img src="https://i.pravatar.cc/100?img=5" alt="Profile photo">
                <button type="button" class="ms-btn ms-btn-outline">Change</button>
            </div>
        </div>

        <div class="ms-panel-footer">
            <button type="button" class="ms-btn ms-btn-ghost">Cancel</button>
            <button type="submit" class="ms-btn ms-btn-primary">Save</button>
        </div>
    </form>
</div>
CSS (Component Only)
/* Component: Account Settings Form */
/* NOTE: This component requires base.css to be included in your page. */

.ms-settings-panel {
    background: #ffffff;
    border-radius: 8px;
    box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
    border: 1px solid #e5e7eb;
    max-width: 600px;
}

.ms-panel-header {
    padding: 1.5rem 1.5rem 0;
}

.ms-panel-header h3 {
    margin: 0 0 0.25rem 0;
    font-size: 1.1rem;
    color: #111827;
}

.ms-panel-header p {
    margin: 0 0 1.5rem 0;
    font-size: 0.875rem;
    color: #6b7280;
}

.ms-settings-form {
    padding: 0 1.5rem;
}

.ms-form-row {
    margin-bottom: 1.5rem;
}

.ms-form-row > label {
    display: block;
    font-size: 0.875rem;
    font-weight: 500;
    color: #374151;
    margin-bottom: 0.5rem;
}

.ms-input-group {
    display: flex;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    overflow: hidden;
}

.ms-input-prefix {
    background: #f9fafb;
    padding: 0.5rem 0.75rem;
    color: #6b7280;
    font-size: 0.95rem;
    border-right: 1px solid #d1d5db;
}

.ms-input-group input {
    flex: 1;
    border: none;
    padding: 0.5rem 0.75rem;
    font-size: 0.95rem;
    color: #111827;
}

.ms-input-group input:focus {
    outline: none;
}

.ms-input-group:focus-within {
    border-color: #4f46e5;
    box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.1);
}

.ms-form-row textarea {
    width: 100%;
    padding: 0.5rem 0.75rem;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    font-size: 0.95rem;
    color: #111827;
    font-family: inherit;
    resize: vertical;
    box-sizing: border-box;
}

.ms-form-row textarea:focus {
    outline: none;
    border-color: #4f46e5;
    box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.1);
}

.ms-photo-upload {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.ms-photo-upload img {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    object-fit: cover;
}

.ms-panel-footer {
    padding: 1rem 1.5rem;
    background: #f9fafb;
    border-top: 1px solid #e5e7eb;
    margin: 0 -1.5rem;
    border-radius: 0 0 8px 8px;
    display: flex;
    justify-content: flex-end;
    gap: 1rem;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-settings-panel {
    background: #ffffff;
    border-radius: 8px;
    box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
    border: 1px solid #e5e7eb;
    max-width: 600px;
}

.ms-panel-header {
    padding: 1.5rem 1.5rem 0;
}

.ms-panel-header h3 {
    margin: 0 0 0.25rem 0;
    font-size: 1.1rem;
    color: #111827;
}

.ms-panel-header p {
    margin: 0 0 1.5rem 0;
    font-size: 0.875rem;
    color: #6b7280;
}

.ms-settings-form {
    padding: 0 1.5rem;
}

.ms-form-row {
    margin-bottom: 1.5rem;
}

.ms-form-row > label {
    display: block;
    font-size: 0.875rem;
    font-weight: 500;
    color: #374151;
    margin-bottom: 0.5rem;
}

.ms-input-group {
    display: flex;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    overflow: hidden;
}

.ms-input-prefix {
    background: #f9fafb;
    padding: 0.5rem 0.75rem;
    color: #6b7280;
    font-size: 0.95rem;
    border-right: 1px solid #d1d5db;
}

.ms-input-group input {
    flex: 1;
    border: none;
    padding: 0.5rem 0.75rem;
    font-size: 0.95rem;
    color: #111827;
}

.ms-input-group input:focus {
    outline: none;
}

.ms-input-group:focus-within {
    border-color: #4f46e5;
    box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.1);
}

.ms-form-row textarea {
    width: 100%;
    padding: 0.5rem 0.75rem;
    border: 1px solid #d1d5db;
    border-radius: 6px;
    font-size: 0.95rem;
    color: #111827;
    font-family: inherit;
    resize: vertical;
    box-sizing: border-box;
}

.ms-form-row textarea:focus {
    outline: none;
    border-color: #4f46e5;
    box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.1);
}

.ms-photo-upload {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.ms-photo-upload img {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    object-fit: cover;
}

.ms-panel-footer {
    padding: 1rem 1.5rem;
    background: #f9fafb;
    border-top: 1px solid #e5e7eb;
    margin: 0 -1.5rem;
    border-radius: 0 0 8px 8px;
    display: flex;
    justify-content: flex-end;
    gap: 1rem;
}

Cards

Statistic Cards

HTML
<div class="ms-stats-grid">
    <div class="ms-stat-card">
        <div class="ms-stat-header">
            <h4>Total Subscribers</h4>
            <span class="ms-trend ms-trend-up">+12.5%</span>
        </div>
        <div class="ms-stat-value">71,897</div>
        <div class="ms-stat-desc">from 63,450 last month</div>
    </div>
    
    <div class="ms-stat-card">
        <div class="ms-stat-header">
            <h4>Avg. Open Rate</h4>
            <span class="ms-trend ms-trend-up">+2.1%</span>
        </div>
        <div class="ms-stat-value">58.16%</div>
        <div class="ms-stat-desc">from 56.14% last month</div>
    </div>
    
    <div class="ms-stat-card">
        <div class="ms-stat-header">
            <h4>Avg. Click Rate</h4>
            <span class="ms-trend ms-trend-down">-1.4%</span>
        </div>
        <div class="ms-stat-value">24.57%</div>
        <div class="ms-stat-desc">from 25.91% last month</div>
    </div>
</div>
CSS (Component Only)
/* Component: Statistic Cards */
/* NOTE: This component requires base.css to be included in your page. */

.ms-stats-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 1.5rem;
}

.ms-stat-card {
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    padding: 1.5rem;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}

.ms-stat-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 0.5rem;
}

.ms-stat-header h4 {
    margin: 0;
    font-size: 0.875rem;
    font-weight: 500;
    color: #4b5563;
}

.ms-trend {
    font-size: 0.75rem;
    font-weight: 600;
    padding: 0.125rem 0.5rem;
    border-radius: 50px;
}

.ms-trend-up {
    background: #dcfce7;
    color: #166534;
}

.ms-trend-down {
    background: #fee2e2;
    color: #991b1b;
}

.ms-stat-value {
    font-size: 2rem;
    font-weight: 700;
    color: #111827;
    margin-bottom: 0.25rem;
    line-height: 1.2;
}

.ms-stat-desc {
    font-size: 0.875rem;
    color: #6b7280;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-stats-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 1.5rem;
}

.ms-stat-card {
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    padding: 1.5rem;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}

.ms-stat-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 0.5rem;
}

.ms-stat-header h4 {
    margin: 0;
    font-size: 0.875rem;
    font-weight: 500;
    color: #4b5563;
}

.ms-trend {
    font-size: 0.75rem;
    font-weight: 600;
    padding: 0.125rem 0.5rem;
    border-radius: 50px;
}

.ms-trend-up {
    background: #dcfce7;
    color: #166534;
}

.ms-trend-down {
    background: #fee2e2;
    color: #991b1b;
}

.ms-stat-value {
    font-size: 2rem;
    font-weight: 700;
    color: #111827;
    margin-bottom: 0.25rem;
    line-height: 1.2;
}

.ms-stat-desc {
    font-size: 0.875rem;
    color: #6b7280;
}

Pricing Card

HTML
<div class="ms-pricing-card ms-popular">
    <div class="ms-pricing-badge">Most Popular</div>
    <div class="ms-pricing-header">
        <h3>Startup</h3>
        <p>A plan that scales with your rapidly growing business.</p>
    </div>
    <div class="ms-pricing-price">
        <span class="ms-currency">$</span>
        <span class="ms-amount">49</span>
        <span class="ms-period">/mo</span>
    </div>
    <ul class="ms-pricing-features">
        <li><svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd" /></svg> 25 Products</li>
        <li><svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd" /></svg> Up to 10,000 Subscribers</li>
        <li><svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd" /></svg> Advanced Analytics</li>
        <li><svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd" /></svg> 24-hour Support Response</li>
    </ul>
    <a href="##" class="ms-btn ms-btn-primary ms-btn-block">Start your trial</a>
</div>
CSS (Component Only)
/* Component: Pricing Card */
/* NOTE: This component requires base.css to be included in your page. */

.ms-pricing-card {
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 12px;
    padding: 2.5rem;
    max-width: 350px;
    position: relative;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}

.ms-popular {
    border: 2px solid #4f46e5;
}

.ms-pricing-badge {
    position: absolute;
    top: -12px;
    left: 50%;
    transform: translateX(-50%);
    background: #4f46e5;
    color: white;
    font-size: 0.75rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    padding: 0.25rem 1rem;
    border-radius: 50px;
}

.ms-pricing-header {
    text-align: center;
    margin-bottom: 2rem;
}

.ms-pricing-header h3 {
    margin: 0 0 0.5rem 0;
    font-size: 1.5rem;
    font-weight: 700;
    color: #111827;
}

.ms-pricing-header p {
    margin: 0;
    font-size: 0.875rem;
    color: #6b7280;
    line-height: 1.5;
}

.ms-pricing-price {
    text-align: center;
    margin-bottom: 2rem;
    display: flex;
    justify-content: center;
    align-items: baseline;
}

.ms-currency {
    font-size: 1.5rem;
    font-weight: 700;
    color: #111827;
}

.ms-amount {
    font-size: 3rem;
    font-weight: 800;
    color: #111827;
    letter-spacing: -0.02em;
}

.ms-period {
    font-size: 1rem;
    color: #6b7280;
    margin-left: 0.25rem;
}

.ms-pricing-features {
    list-style: none;
    padding: 0;
    margin: 0 0 2rem 0;
}

.ms-pricing-features li {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 0.95rem;
    color: #374151;
    margin-bottom: 1rem;
}

.ms-pricing-features svg {
    width: 20px;
    height: 20px;
    color: #4f46e5;
    flex-shrink: 0;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-pricing-card {
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 12px;
    padding: 2.5rem;
    max-width: 350px;
    position: relative;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}

.ms-popular {
    border: 2px solid #4f46e5;
}

.ms-pricing-badge {
    position: absolute;
    top: -12px;
    left: 50%;
    transform: translateX(-50%);
    background: #4f46e5;
    color: white;
    font-size: 0.75rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    padding: 0.25rem 1rem;
    border-radius: 50px;
}

.ms-pricing-header {
    text-align: center;
    margin-bottom: 2rem;
}

.ms-pricing-header h3 {
    margin: 0 0 0.5rem 0;
    font-size: 1.5rem;
    font-weight: 700;
    color: #111827;
}

.ms-pricing-header p {
    margin: 0;
    font-size: 0.875rem;
    color: #6b7280;
    line-height: 1.5;
}

.ms-pricing-price {
    text-align: center;
    margin-bottom: 2rem;
    display: flex;
    justify-content: center;
    align-items: baseline;
}

.ms-currency {
    font-size: 1.5rem;
    font-weight: 700;
    color: #111827;
}

.ms-amount {
    font-size: 3rem;
    font-weight: 800;
    color: #111827;
    letter-spacing: -0.02em;
}

.ms-period {
    font-size: 1rem;
    color: #6b7280;
    margin-left: 0.25rem;
}

.ms-pricing-features {
    list-style: none;
    padding: 0;
    margin: 0 0 2rem 0;
}

.ms-pricing-features li {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 0.95rem;
    color: #374151;
    margin-bottom: 1rem;
}

.ms-pricing-features svg {
    width: 20px;
    height: 20px;
    color: #4f46e5;
    flex-shrink: 0;
}

Tables

Data Grid Table

HTML
<div class="ms-table-container">
    <div class="ms-table-header">
        <h3>Team Members</h3>
        <p>A list of all the users in your account including their name, title, email and role.</p>
    </div>
    <table class="ms-table">
        <thead>
            <tr>
                <th>Name</th>
                <th>Title</th>
                <th>Email</th>
                <th>Role</th>
                <th><span class="sr-only">Edit</span></th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><strong>Lindsay Walton</strong></td>
                <td>Front-end Developer</td>
                <td>[email protected]</td>
                <td>Member</td>
                <td class="ms-table-actions"><a href="##">Edit</a></td>
            </tr>
            <tr>
                <td><strong>Courtney Henry</strong></td>
                <td>Designer</td>
                <td>[email protected]</td>
                <td>Admin</td>
                <td class="ms-table-actions"><a href="##">Edit</a></td>
            </tr>
            <tr>
                <td><strong>Tom Cook</strong></td>
                <td>Director of Product</td>
                <td>[email protected]</td>
                <td>Owner</td>
                <td class="ms-table-actions"><a href="##">Edit</a></td>
            </tr>
        </tbody>
    </table>
</div>
CSS (Component Only)
/* Component: Data Grid Table */
/* NOTE: This component requires base.css to be included in your page. */

.ms-table-container {
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
    overflow: hidden;
}

.ms-table-header {
    padding: 1.5rem;
    border-bottom: 1px solid #e5e7eb;
}

.ms-table-header h3 {
    margin: 0 0 0.25rem 0;
    font-size: 1.1rem;
    color: #111827;
}

.ms-table-header p {
    margin: 0;
    font-size: 0.875rem;
    color: #6b7280;
}

.ms-table {
    width: 100%;
    border-collapse: collapse;
    text-align: left;
}

.ms-table th {
    background: #f9fafb;
    padding: 0.75rem 1.5rem;
    font-size: 0.75rem;
    font-weight: 600;
    color: #374151;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    border-bottom: 1px solid #e5e7eb;
}

.ms-table td {
    padding: 1rem 1.5rem;
    font-size: 0.875rem;
    color: #4b5563;
    border-bottom: 1px solid #e5e7eb;
}

.ms-table tbody tr:last-child td {
    border-bottom: none;
}

.ms-table td strong {
    color: #111827;
    font-weight: 500;
}

.ms-table-actions {
    text-align: right;
}

.ms-table-actions a {
    color: #4f46e5;
    font-weight: 500;
    text-decoration: none;
}

.ms-table-actions a:hover {
    color: #4338ca;
}

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border-width: 0;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-table-container {
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
    overflow: hidden;
}

.ms-table-header {
    padding: 1.5rem;
    border-bottom: 1px solid #e5e7eb;
}

.ms-table-header h3 {
    margin: 0 0 0.25rem 0;
    font-size: 1.1rem;
    color: #111827;
}

.ms-table-header p {
    margin: 0;
    font-size: 0.875rem;
    color: #6b7280;
}

.ms-table {
    width: 100%;
    border-collapse: collapse;
    text-align: left;
}

.ms-table th {
    background: #f9fafb;
    padding: 0.75rem 1.5rem;
    font-size: 0.75rem;
    font-weight: 600;
    color: #374151;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    border-bottom: 1px solid #e5e7eb;
}

.ms-table td {
    padding: 1rem 1.5rem;
    font-size: 0.875rem;
    color: #4b5563;
    border-bottom: 1px solid #e5e7eb;
}

.ms-table tbody tr:last-child td {
    border-bottom: none;
}

.ms-table td strong {
    color: #111827;
    font-weight: 500;
}

.ms-table-actions {
    text-align: right;
}

.ms-table-actions a {
    color: #4f46e5;
    font-weight: 500;
    text-decoration: none;
}

.ms-table-actions a:hover {
    color: #4338ca;
}

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border-width: 0;
}

Lists

Activity Feed List

HTML
<div class="ms-activity-feed">
    <div class="ms-activity-item">
        <div class="ms-activity-icon bg-blue">
            <svg viewBox="0 0 20 20" fill="currentColor"><path d="M8 9a3 3 0 100-6 3 3 0 000 6zM8 11a6 6 0 016 6H2a6 6 0 016-6zM16 7a1 1 0 10-2 0v1h-1a1 1 0 100 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2h-1V7z"></path></svg>
        </div>
        <div class="ms-activity-content">
            <p><strong>Eduardo Benz</strong> invited <strong>Chelsea Hagon</strong> to the workspace</p>
            <span class="ms-activity-time">1h ago</span>
        </div>
    </div>
    
    <div class="ms-activity-item">
        <div class="ms-activity-icon bg-green">
            <svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg>
        </div>
        <div class="ms-activity-content">
            <p><strong>Database backup</strong> completed successfully</p>
            <span class="ms-activity-time">3h ago</span>
        </div>
    </div>

    <div class="ms-activity-item">
        <div class="ms-activity-icon bg-gray">
            <svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clip-rule="evenodd"></path></svg>
        </div>
        <div class="ms-activity-content">
            <p><strong>Jason Bourne</strong> uploaded a new document <a href="##">Q3_Report.pdf</a></p>
            <span class="ms-activity-time">Yesterday</span>
        </div>
    </div>
</div>
CSS (Component Only)
/* Component: Activity Feed List */
/* NOTE: This component requires base.css to be included in your page. */

.ms-activity-feed {
    max-width: 600px;
    padding: 1rem 0;
}

.ms-activity-item {
    display: flex;
    gap: 1rem;
    position: relative;
    padding-bottom: 2rem;
}

.ms-activity-item:last-child {
    padding-bottom: 0;
}

/* Connecting line */
.ms-activity-item:not(:last-child)::before {
    content: '';
    position: absolute;
    left: 1rem;
    top: 2rem;
    bottom: 0;
    width: 2px;
    background-color: #e5e7eb;
    transform: translateX(-50%);
}

.ms-activity-icon {
    width: 2rem;
    height: 2rem;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    z-index: 1;
    flex-shrink: 0;
}

.ms-activity-icon svg {
    width: 1rem;
    height: 1rem;
}

.bg-blue { background-color: #3b82f6; }
.bg-green { background-color: #10b981; }
.bg-gray { background-color: #6b7280; }

.ms-activity-content {
    flex: 1;
    padding-top: 0.25rem;
}

.ms-activity-content p {
    margin: 0 0 0.25rem 0;
    font-size: 0.9rem;
    color: #4b5563;
    line-height: 1.5;
}

.ms-activity-content strong {
    color: #111827;
    font-weight: 600;
}

.ms-activity-content a {
    color: #4f46e5;
    text-decoration: none;
    font-weight: 500;
}

.ms-activity-content a:hover {
    text-decoration: underline;
}

.ms-activity-time {
    font-size: 0.8rem;
    color: #9ca3af;
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-activity-feed {
    max-width: 600px;
    padding: 1rem 0;
}

.ms-activity-item {
    display: flex;
    gap: 1rem;
    position: relative;
    padding-bottom: 2rem;
}

.ms-activity-item:last-child {
    padding-bottom: 0;
}

/* Connecting line */
.ms-activity-item:not(:last-child)::before {
    content: '';
    position: absolute;
    left: 1rem;
    top: 2rem;
    bottom: 0;
    width: 2px;
    background-color: #e5e7eb;
    transform: translateX(-50%);
}

.ms-activity-icon {
    width: 2rem;
    height: 2rem;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    z-index: 1;
    flex-shrink: 0;
}

.ms-activity-icon svg {
    width: 1rem;
    height: 1rem;
}

.bg-blue { background-color: #3b82f6; }
.bg-green { background-color: #10b981; }
.bg-gray { background-color: #6b7280; }

.ms-activity-content {
    flex: 1;
    padding-top: 0.25rem;
}

.ms-activity-content p {
    margin: 0 0 0.25rem 0;
    font-size: 0.9rem;
    color: #4b5563;
    line-height: 1.5;
}

.ms-activity-content strong {
    color: #111827;
    font-weight: 600;
}

.ms-activity-content a {
    color: #4f46e5;
    text-decoration: none;
    font-weight: 500;
}

.ms-activity-content a:hover {
    text-decoration: underline;
}

.ms-activity-time {
    font-size: 0.8rem;
    color: #9ca3af;
}

Modals

Confirmation Modal

HTML
<div class="ms-modal-overlay">
    <div class="ms-modal">
        <div class="ms-modal-icon">
            <svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v3m0 3h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
            </svg>
        </div>
        <div class="ms-modal-content">
            <h3>Deactivate account</h3>
            <p>Are you sure you want to deactivate your account? All of your data will be permanently removed. This action cannot be undone.</p>
        </div>
        <div class="ms-modal-actions">
            <button class="ms-btn ms-btn-danger">Deactivate</button>
            <button class="ms-btn ms-btn-outline">Cancel</button>
        </div>
    </div>
</div>
CSS (Component Only)
/* Component: Confirmation Modal */
/* NOTE: This component requires base.css to be included in your page. */

.ms-modal-overlay {
    position: relative;
    background: rgba(17, 24, 39, 0.75);
    padding: 2rem;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 300px;
}

.ms-modal {
    background: #ffffff;
    border-radius: 8px;
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
    max-width: 500px;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

@media (min-width: 600px) {
    .ms-modal {
        flex-direction: row;
        align-items: flex-start;
        padding: 1.5rem;
    }
}

.ms-modal-icon {
    background: #fee2e2;
    color: #dc2626;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 1.5rem auto 0;
    flex-shrink: 0;
}

.ms-modal-icon svg {
    width: 24px;
    height: 24px;
}

@media (min-width: 600px) {
    .ms-modal-icon {
        margin: 0 1.5rem 0 0;
    }
}

.ms-modal-content {
    padding: 1rem 1.5rem;
    text-align: center;
    flex: 1;
}

@media (min-width: 600px) {
    .ms-modal-content {
        padding: 0;
        text-align: left;
    }
}

.ms-modal-content h3 {
    margin: 0 0 0.5rem 0;
    font-size: 1.125rem;
    font-weight: 600;
    color: #111827;
}

.ms-modal-content p {
    margin: 0;
    font-size: 0.875rem;
    color: #6b7280;
    line-height: 1.5;
}

.ms-modal-actions {
    background: #f9fafb;
    padding: 1rem 1.5rem;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

@media (min-width: 600px) {
    .ms-modal-actions {
        background: transparent;
        padding: 1.5rem 0 0 0;
        flex-direction: row-reverse;
        justify-content: flex-start;
        width: 100%;
        clear: both;
    }
    
    .ms-modal {
        flex-wrap: wrap;
    }
}

.ms-btn {
    width: 100%;
}

@media (min-width: 600px) {
    .ms-btn {
        width: auto;
    }
}
Combined CSS (Includes Base)
/* 
   COMBINED CSS
   Includes base resets/variables + component styles.
   Use this if you haven't included base.css elsewhere.
*/

/* --- BASE STYLES --- */
/* Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* Base Reset */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: 'Inter', sans-serif;
    color: #111827;
    background-color: transparent;
    -webkit-font-smoothing: antialiased;
}

/* Global Buttons */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.6rem 1.25rem;
    border-radius: 6px;
    font-weight: 500;
    font-size: 0.95rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.ms-btn:focus {
    outline: 2px solid transparent;
    outline-offset: 2px;
}
.ms-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
.ms-btn svg {
    flex-shrink: 0;
}
.ms-btn-icon {
    gap: 0.5rem;
}
.ms-btn-block {
    display: flex;
    width: 100%;
}

/* Primary Button */
.ms-btn-primary {
    background-color: #4f46e5;
    color: #ffffff;
    border-color: #4f46e5;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-primary:hover:not(:disabled) {
    background-color: #4338ca;
    border-color: #4338ca;
}
.ms-btn-primary:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #4f46e5;
}

/* Outline Button */
.ms-btn-outline {
    background-color: #ffffff;
    color: #374151;
    border-color: #d1d5db;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.ms-btn-outline:hover:not(:disabled) {
    background-color: #f9fafb;
    color: #111827;
}
.ms-btn-outline:focus {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #d1d5db;
}

/* Ghost Button */
.ms-btn-ghost {
    background-color: transparent;
    color: #374151;
}
.ms-btn-ghost:hover:not(:disabled) {
    background-color: #f3f4f6;
}

/* Danger Button */
.ms-btn-danger {
    background-color: #dc2626;
    color: #ffffff;
    border-color: #dc2626;
}
.ms-btn-danger:hover:not(:disabled) {
    background-color: #b91c1c;
    border-color: #b91c1c;
}


/* --- COMPONENT STYLES --- */
.ms-modal-overlay {
    position: relative;
    background: rgba(17, 24, 39, 0.75);
    padding: 2rem;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 300px;
}

.ms-modal {
    background: #ffffff;
    border-radius: 8px;
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
    max-width: 500px;
    width: 100%;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

@media (min-width: 600px) {
    .ms-modal {
        flex-direction: row;
        align-items: flex-start;
        padding: 1.5rem;
    }
}

.ms-modal-icon {
    background: #fee2e2;
    color: #dc2626;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 1.5rem auto 0;
    flex-shrink: 0;
}

.ms-modal-icon svg {
    width: 24px;
    height: 24px;
}

@media (min-width: 600px) {
    .ms-modal-icon {
        margin: 0 1.5rem 0 0;
    }
}

.ms-modal-content {
    padding: 1rem 1.5rem;
    text-align: center;
    flex: 1;
}

@media (min-width: 600px) {
    .ms-modal-content {
        padding: 0;
        text-align: left;
    }
}

.ms-modal-content h3 {
    margin: 0 0 0.5rem 0;
    font-size: 1.125rem;
    font-weight: 600;
    color: #111827;
}

.ms-modal-content p {
    margin: 0;
    font-size: 0.875rem;
    color: #6b7280;
    line-height: 1.5;
}

.ms-modal-actions {
    background: #f9fafb;
    padding: 1rem 1.5rem;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

@media (min-width: 600px) {
    .ms-modal-actions {
        background: transparent;
        padding: 1.5rem 0 0 0;
        flex-direction: row-reverse;
        justify-content: flex-start;
        width: 100%;
        clear: both;
    }
    
    .ms-modal {
        flex-wrap: wrap;
    }
}

.ms-btn {
    width: 100%;
}

@media (min-width: 600px) {
    .ms-btn {
        width: auto;
    }
}

Footers