diff --git a/ts_web/elements/index.ts b/ts_web/elements/index.ts
index 038a70e..777739b 100644
--- a/ts_web/elements/index.ts
+++ b/ts_web/elements/index.ts
@@ -3,6 +3,7 @@ export * from './upl-statuspage-assetsselector.js';
export * from './upl-statuspage-footer.js';
export * from './upl-statuspage-header.js';
export * from './upl-statuspage-incidents.js';
+export * from './upl-statuspage-pagetitle.js';
export * from './upl-statuspage-statusbar.js';
export * from './upl-statuspage-statusdetails.js';
export * from './upl-statuspage-statusmonth.js';
diff --git a/ts_web/elements/upl-statuspage-header.ts b/ts_web/elements/upl-statuspage-header.ts
index 91b93a8..a44be21 100644
--- a/ts_web/elements/upl-statuspage-header.ts
+++ b/ts_web/elements/upl-statuspage-header.ts
@@ -24,15 +24,9 @@ export class UplStatuspageHeader extends DeesElement {
@property({ type: Boolean })
public showSubscribeButton: boolean = true;
- @property({ type: String })
- public brandColor: string = '';
-
@property({ type: String })
public logoUrl: string = '';
- @property({ type: Boolean })
- public customStyles: boolean = false;
-
@property({ type: Boolean })
public loading: boolean = false;
@@ -46,31 +40,44 @@ export class UplStatuspageHeader extends DeesElement {
css`
:host {
display: block;
- background: transparent;
+ background: ${cssManager.bdTheme('#ffffff', '#0a0a0a')};
font-family: ${unsafeCSS(fonts.base)};
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
+ border-bottom: 1px solid ${cssManager.bdTheme('#e5e7eb', '#27272a')};
+ position: sticky;
+ top: 0;
+ z-index: 40;
}
- .mainbox {
- margin: auto;
+ .header-container {
max-width: 1200px;
+ margin: 0 auto;
padding: 0 24px;
}
- .mainbox .actions {
+ .header-nav {
display: flex;
- justify-content: flex-end;
- gap: 8px;
- padding: 24px 0;
+ align-items: center;
+ justify-content: space-between;
+ height: 64px;
}
- .mainbox .actions .actionButton {
- background: ${cssManager.bdTheme('rgba(255, 255, 255, 0.8)', 'rgba(0, 0, 0, 0.6)')};
- backdrop-filter: blur(10px);
+ .header-left {
+ display: flex;
+ align-items: center;
+ gap: 24px;
+ }
+
+ .header-actions {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ .actionButton {
font-size: 14px;
font-weight: 500;
- border: 1px solid ${cssManager.bdTheme('rgba(0, 0, 0, 0.08)', 'rgba(255, 255, 255, 0.08)')};
- padding: 8px 16px;
+ padding: 8px 12px;
border-radius: 6px;
cursor: pointer;
user-select: none;
@@ -78,82 +85,89 @@ export class UplStatuspageHeader extends DeesElement {
display: inline-flex;
align-items: center;
justify-content: center;
- min-height: 36px;
+ height: 36px;
+ background: transparent;
+ border: none;
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
- box-shadow: ${unsafeCSS(shadows.sm)};
}
- .mainbox .actions .actionButton:hover {
- background: ${cssManager.bdTheme('rgba(255, 255, 255, 0.95)', 'rgba(0, 0, 0, 0.8)')};
- border-color: ${cssManager.bdTheme('rgba(0, 0, 0, 0.12)', 'rgba(255, 255, 255, 0.12)')};
- transform: translateY(-1px);
- box-shadow: ${unsafeCSS(shadows.md)};
+ .actionButton:hover {
+ background: ${cssManager.bdTheme('#f4f4f5', '#27272a')};
}
- .mainbox .actions .actionButton:active {
- transform: translateY(0);
+ .site-title {
+ font-size: 20px;
+ font-weight: 600;
+ letter-spacing: -0.02em;
+ color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
}
- .header-content {
- padding: 64px 0 48px 0;
- text-align: center;
+ .logo {
+ height: 24px;
+ width: auto;
+ filter: ${cssManager.bdTheme('none', 'brightness(0) invert(1)')};
}
-
- h1 {
- margin: 0;
+
+ .page-info {
+ padding: 48px 0 64px 0;
+ }
+
+ .page-title {
font-size: 48px;
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.1;
color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
+ margin: 0 0 16px 0;
}
-
- .subtitle {
- margin: 16px 0 0 0;
- font-size: 16px;
- font-weight: 400;
+
+ .page-subtitle {
+ font-size: 20px;
color: ${cssManager.bdTheme('#6b7280', '#a1a1aa')};
- letter-spacing: 0.02em;
- text-transform: uppercase;
+ margin: 0;
+ line-height: 1.5;
}
- .logo {
- display: block;
- margin: 0 auto 32px;
- max-width: 180px;
- height: auto;
- filter: ${cssManager.bdTheme('none', 'brightness(0) invert(1)')};
- }
-
- .loading-skeleton {
- height: 200px;
- background: ${cssManager.bdTheme(
- 'linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%)',
- 'linear-gradient(90deg, #1f1f1f 25%, #262626 50%, #1f1f1f 75%)'
- )};
- background-size: 200% 100%;
- animation: loading 1.5s infinite;
- border-radius: 6px;
- margin: 24px 0;
- }
-
- @keyframes loading {
- 0% { background-position: 200% 0; }
- 100% { background-position: -200% 0; }
- }
-
/* Primary button variant */
.actionButton.primary {
background: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
color: ${cssManager.bdTheme('#ffffff', '#0a0a0a')};
- border-color: transparent;
- backdrop-filter: none;
+ border: 1px solid ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
}
.actionButton.primary:hover {
background: ${cssManager.bdTheme('#262626', '#e5e7eb')};
- transform: translateY(-1px);
- box-shadow: ${unsafeCSS(shadows.md)};
+ border-color: ${cssManager.bdTheme('#262626', '#e5e7eb')};
+ }
+
+ .loading-skeleton {
+ height: 64px;
+ background: ${cssManager.bdTheme('#f9fafb', '#0a0a0a')};
+ border-bottom: 1px solid ${cssManager.bdTheme('#e5e7eb', '#27272a')};
+ }
+
+ @media (max-width: 640px) {
+ .header-nav {
+ height: 56px;
+ }
+
+ .site-title {
+ font-size: 18px;
+ }
+
+ .actionButton {
+ font-size: 13px;
+ padding: 6px 10px;
+ height: 32px;
+ }
+
+ .page-title {
+ font-size: 36px;
+ }
+
+ .page-subtitle {
+ font-size: 18px;
+ }
}
`
]
@@ -161,52 +175,35 @@ export class UplStatuspageHeader extends DeesElement {
public render(): TemplateResult {
if (this.loading) {
return html`
-
+
`;
}
return html`
- ${domtools.elementBasic.styles}
-
-
-
- ${this.showReportButton ? html`
-
Report Issue
- ` : ''}
- ${this.showSubscribeButton ? html`
-
Subscribe
- ` : ''}
+
+
`;
}
diff --git a/ts_web/elements/upl-statuspage-pagetitle.demo.ts b/ts_web/elements/upl-statuspage-pagetitle.demo.ts
new file mode 100644
index 0000000..6b0584a
--- /dev/null
+++ b/ts_web/elements/upl-statuspage-pagetitle.demo.ts
@@ -0,0 +1,25 @@
+import { html } from '@design.estate/dees-element';
+
+export const demoFunc = () => html`
+
+
+
+
+
+
+
+
+`;
\ No newline at end of file
diff --git a/ts_web/elements/upl-statuspage-pagetitle.ts b/ts_web/elements/upl-statuspage-pagetitle.ts
new file mode 100644
index 0000000..91eaece
--- /dev/null
+++ b/ts_web/elements/upl-statuspage-pagetitle.ts
@@ -0,0 +1,89 @@
+import { DeesElement, property, html, customElement, type TemplateResult, css, cssManager, unsafeCSS } from '@design.estate/dees-element';
+import * as domtools from '@design.estate/dees-domtools';
+import { fonts } from '../styles/shared.styles.js';
+import { demoFunc } from './upl-statuspage-pagetitle.demo.js';
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'upl-statuspage-pagetitle': UplStatuspagePagetitle;
+ }
+}
+
+@customElement('upl-statuspage-pagetitle')
+export class UplStatuspagePagetitle extends DeesElement {
+ public static demo = demoFunc;
+
+ @property({ type: String })
+ public pageTitle: string = 'System Status';
+
+ @property({ type: String })
+ public pageSubtitle: string = '';
+
+ @property({ type: Boolean })
+ public centered: boolean = false;
+
+ constructor() {
+ super();
+ }
+
+ public static styles = [
+ domtools.elementBasic.staticStyles,
+ css`
+ :host {
+ display: block;
+ font-family: ${unsafeCSS(fonts.base)};
+ }
+
+ .title-container {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 48px 24px 24px 24px;
+ }
+
+ .title-container.centered {
+ text-align: center;
+ }
+
+ h1 {
+ font-size: 48px;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ line-height: 1.1;
+ color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
+ margin: 0 0 16px 0;
+ }
+
+ p {
+ font-size: 20px;
+ color: ${cssManager.bdTheme('#6b7280', '#a1a1aa')};
+ margin: 0;
+ line-height: 1.5;
+ }
+
+ @media (max-width: 640px) {
+ .title-container {
+ padding: 32px 16px 20px 16px;
+ }
+
+ h1 {
+ font-size: 36px;
+ }
+
+ p {
+ font-size: 18px;
+ }
+ }
+ `
+ ]
+
+ public render(): TemplateResult {
+ return html`
+
+
${this.pageTitle}
+ ${this.pageSubtitle ? html`
+
${this.pageSubtitle}
+ ` : ''}
+
+ `;
+ }
+}
\ No newline at end of file
diff --git a/ts_web/elements/upl-statuspage-statusbar.ts b/ts_web/elements/upl-statuspage-statusbar.ts
index 2fe47f6..0baa8c3 100644
--- a/ts_web/elements/upl-statuspage-statusbar.ts
+++ b/ts_web/elements/upl-statuspage-statusbar.ts
@@ -46,7 +46,7 @@ export class UplStatuspageStatusbar extends DeesElement {
.statusbar-container {
margin: auto;
max-width: 1200px;
- padding: 0 24px 24px 24px;
+ padding: 24px 24px;
position: relative;
}
@@ -157,6 +157,10 @@ export class UplStatuspageStatusbar extends DeesElement {
}
@media (max-width: 640px) {
+ .statusbar-container {
+ padding: 16px 16px;
+ }
+
.statusbar-inner {
font-size: 13px;
padding: 12px 16px;
diff --git a/ts_web/pages/statuspage-allgreen.ts b/ts_web/pages/statuspage-allgreen.ts
index eff94af..d119df4 100644
--- a/ts_web/pages/statuspage-allgreen.ts
+++ b/ts_web/pages/statuspage-allgreen.ts
@@ -45,12 +45,10 @@ export const statuspageAllgreen = () => html`
const footer = wrapperElement.querySelector('upl-statuspage-footer') as any;
// Configure Header
- header.pageTitle = 'TechVault Services Status';
+ header.pageTitle = 'TechVault';
header.showReportButton = true;
header.showSubscribeButton = true;
- header.logoUrl = 'https://via.placeholder.com/150x50/4CAF50/ffffff?text=TechVault';
- header.customStyles = true;
- header.brandColor = '#4CAF50';
+ header.logoUrl = 'https://via.placeholder.com/150x50/4CAF50/ffffff?text=TV';
// Configure Overall Status - All Green
statusBar.overallStatus = {
diff --git a/ts_web/pages/statuspage-demo.ts b/ts_web/pages/statuspage-demo.ts
index 8cb5245..75c12a7 100644
--- a/ts_web/pages/statuspage-demo.ts
+++ b/ts_web/pages/statuspage-demo.ts
@@ -36,6 +36,7 @@ export const statuspageDemo = () => html`
{
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
+ const pageTitle = wrapperElement.querySelector('upl-statuspage-pagetitle') as any;
const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any;
const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any;
const statusDetails = wrapperElement.querySelector('upl-statuspage-statusdetails') as any;
@@ -44,12 +45,14 @@ export const statuspageDemo = () => html`
const footer = wrapperElement.querySelector('upl-statuspage-footer') as any;
// Configure Header
- header.pageTitle = 'CloudFlow Infrastructure Status';
+ header.pageTitle = 'CloudFlow';
header.showReportButton = true;
header.showSubscribeButton = true;
- header.logoUrl = 'https://via.placeholder.com/150x50/2196F3/ffffff?text=CloudFlow';
- header.customStyles = true;
- header.brandColor = '#2196F3';
+ header.logoUrl = 'https://via.placeholder.com/150x50/2196F3/ffffff?text=CF';
+
+ // Configure Page Title
+ pageTitle.pageTitle = 'Service Status';
+ pageTitle.pageSubtitle = 'Current operational status of CloudFlow Infrastructure services';
// Configure Overall Status
statusBar.overallStatus = {
@@ -639,6 +642,7 @@ export const statuspageDemo = () => html`
}}
>
+
diff --git a/ts_web/pages/statuspage-maintenance.ts b/ts_web/pages/statuspage-maintenance.ts
index af33801..72bb5b6 100644
--- a/ts_web/pages/statuspage-maintenance.ts
+++ b/ts_web/pages/statuspage-maintenance.ts
@@ -45,12 +45,10 @@ export const statuspageMaintenance = () => html`
const footer = wrapperElement.querySelector('upl-statuspage-footer') as any;
// Configure Header
- header.pageTitle = 'SecureVault Infrastructure Status';
+ header.pageTitle = 'SecureVault';
header.showReportButton = true;
header.showSubscribeButton = true;
- header.logoUrl = 'https://via.placeholder.com/150x50/2196F3/ffffff?text=SecureVault';
- header.customStyles = true;
- header.brandColor = '#2196F3';
+ header.logoUrl = 'https://via.placeholder.com/150x50/2196F3/ffffff?text=SV';
// Configure Overall Status - Maintenance
statusBar.overallStatus = {
diff --git a/ts_web/pages/statuspage-outage.ts b/ts_web/pages/statuspage-outage.ts
index 379a958..0e95279 100644
--- a/ts_web/pages/statuspage-outage.ts
+++ b/ts_web/pages/statuspage-outage.ts
@@ -45,12 +45,10 @@ export const statuspageOutage = () => html`
const footer = wrapperElement.querySelector('upl-statuspage-footer') as any;
// Configure Header
- header.pageTitle = 'DataStream Platform Status';
+ header.pageTitle = 'DataStream';
header.showReportButton = true;
header.showSubscribeButton = true;
- header.logoUrl = 'https://via.placeholder.com/150x50/F44336/ffffff?text=DataStream';
- header.customStyles = true;
- header.brandColor = '#F44336';
+ header.logoUrl = 'https://via.placeholder.com/150x50/F44336/ffffff?text=DS';
// Configure Overall Status - Major Outage
statusBar.overallStatus = {