/
klaiz
/
iosbuch
Обзор
Документация
Войти
/
klaiz
/
iosbuch
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
styles.css
1 579 строк
40 KB
klaiz
Create: app.js, index.html, server.mjs, styles.css
09 июл 2026, 10:30
Верифицирован
09 июл 2026, 10:30
a4e1737
Код
Авторство
О чём код?
:root { color-scheme: dark; --studio-bg: #07110f; --studio-panel: rgba(11, 18, 28, 0.76); --app-bg: #0a101d; --surface: rgba(16, 24, 39, 0.68); --surface-2: rgba(30, 41, 59, 0.62); --surface-soft: rgba(42, 55, 76, 0.6); --surface-top: rgba(255, 255, 255, 0.105); --control: rgba(255, 255, 255, 0.092); --control-hover: rgba(255, 255, 255, 0.14); --text: #f8fafc; --muted: #b4c3d6; --muted-2: #7b8da5; --line: rgba(209, 250, 229, 0.2); --glass: rgba(255, 255, 255, 0.085); --glass-strong: rgba(255, 255, 255, 0.16); --glass-wash: rgba(125, 211, 252, 0.08); --liquid-line: rgba(255, 255, 255, 0.22); --accent: #2ee66d; --accent-2: #58d7ff; --accent-3: #f7c948; --role-a: var(--accent); --role-b: var(--accent-2); --warn: #fbbf24; --danger: #fb7185; --shadow: 0 24px 80px rgba(0, 0, 0, 0.44); --glass-shadow: 0 16px 42px rgba(1, 8, 20, 0.34), inset 0 1px 0 rgba(255, 255, 255, 0.16); --press-shadow: 0 10px 26px rgba(1, 8, 20, 0.24), inset 0 1px 0 rgba(255, 255, 255, 0.2); --radius: 8px; --ease: cubic-bezier(0.16, 1, 0.3, 1); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } body.light { color-scheme: light; --studio-bg: #f3f8f6; --studio-panel: rgba(255, 255, 255, 0.78); --app-bg: #f6fbff; --surface: rgba(255, 255, 255, 0.74); --surface-2: rgba(239, 247, 255, 0.72); --surface-soft: rgba(226, 241, 250, 0.72); --surface-top: rgba(255, 255, 255, 0.9); --control: rgba(255, 255, 255, 0.72); --control-hover: rgba(255, 255, 255, 0.92); --text: #132033; --muted: #40546c; --muted-2: #6c7c91; --line: rgba(20, 40, 68, 0.16); --glass: rgba(255, 255, 255, 0.62); --glass-strong: rgba(255, 255, 255, 0.82); --glass-wash: rgba(34, 197, 94, 0.08); --liquid-line: rgba(255, 255, 255, 0.82); --accent: #118848; --accent-2: #0f84bd; --accent-3: #b7791f; --role-a: var(--accent); --role-b: var(--accent-2); --warn: #b7791f; --danger: #c24141; --shadow: 0 24px 80px rgba(35, 52, 79, 0.18); --glass-shadow: 0 18px 45px rgba(48, 72, 104, 0.14), inset 0 1px 0 rgba(255, 255, 255, 0.86); --press-shadow: 0 10px 28px rgba(48, 72, 104, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.92); } body[data-role="owner"] { --role-a: var(--accent-2); --role-b: var(--accent-3); } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; background: var(--studio-bg); color: var(--text); } body { overflow-x: hidden; font-variant-numeric: tabular-nums; background: linear-gradient(135deg, rgba(46, 230, 109, 0.12), transparent 28%), linear-gradient(230deg, rgba(88, 215, 255, 0.12), transparent 36%), linear-gradient(315deg, rgba(247, 201, 72, 0.08), transparent 42%), var(--studio-bg); } button, input, select, textarea { font: inherit; } button { cursor: pointer; } button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 3px solid color-mix(in srgb, var(--role-a) 48%, transparent); outline-offset: 2px; } .workspace { min-height: 100dvh; display: grid; grid-template-columns: 320px 1fr; } .studio-panel { position: sticky; top: 0; height: 100dvh; overflow: auto; padding: 24px; background: var(--studio-panel); border-right: 1px solid var(--line); backdrop-filter: blur(24px) saturate(150%); -webkit-backdrop-filter: blur(24px) saturate(150%); box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.08); } .brand-lockup { display: flex; gap: 14px; align-items: center; margin-bottom: 28px; } .brand-mark { width: 48px; height: 48px; display: grid; place-items: center; border-radius: 8px; background: linear-gradient(145deg, color-mix(in srgb, var(--accent) 94%, white), color-mix(in srgb, var(--accent-2) 74%, var(--accent))); color: #ffffff; font-weight: 800; box-shadow: 0 12px 28px color-mix(in srgb, var(--accent) 34%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.45); } .eyebrow, .app-kicker { margin: 0 0 4px; color: var(--muted); font-size: 12px; font-weight: 700; text-transform: uppercase; } h1, h2, h3, p { margin-top: 0; } h1 { margin-bottom: 0; font-size: 22px; line-height: 1.15; } .studio-section { padding: 18px 0; border-top: 1px solid var(--line); } .studio-section h2 { margin-bottom: 12px; font-size: 14px; } .segmented { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; padding: 4px; border: 1px solid var(--line); border-radius: 8px; background: var(--glass); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); backdrop-filter: blur(18px) saturate(150%); -webkit-backdrop-filter: blur(18px) saturate(150%); } .segment, .screen-link, .side-link, .chip, .tab, .text-button, .add-button, .wide-control { border: 0; color: var(--text); transition: background 180ms var(--ease), color 180ms var(--ease), transform 180ms var(--ease), border-color 180ms var(--ease); } .segment { min-height: 40px; border-radius: 6px; background: transparent; } .segment.is-active, .chip.is-active { background: linear-gradient(135deg, var(--role-a), var(--role-b)); color: #ffffff; box-shadow: 0 10px 28px color-mix(in srgb, var(--role-a) 24%, transparent); } .wide-control { width: 100%; min-height: 44px; margin-top: 12px; padding: 0 12px; display: flex; align-items: center; justify-content: center; gap: 8px; border-radius: 8px; background: var(--glass); border: 1px solid var(--line); backdrop-filter: blur(18px) saturate(140%); -webkit-backdrop-filter: blur(18px) saturate(140%); } .select-label { display: block; margin-bottom: 8px; color: var(--muted); font-size: 13px; } select, input, textarea { width: 100%; min-height: 46px; border: 1px solid var(--line); border-radius: 8px; background: var(--control); color: var(--text); padding: 10px 12px; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); backdrop-filter: blur(16px) saturate(140%); -webkit-backdrop-filter: blur(16px) saturate(140%); transition: border-color 180ms var(--ease), background 180ms var(--ease), box-shadow 180ms var(--ease); } select:hover, input:hover, textarea:hover, select:focus, input:focus, textarea:focus { background: var(--control-hover); border-color: color-mix(in srgb, var(--role-a) 44%, var(--line)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--role-a) 12%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.12); } textarea { resize: vertical; line-height: 1.45; } .screen-list { display: grid; gap: 6px; } .screen-link, .side-link { min-height: 40px; padding: 0 12px; border-radius: 8px; background: transparent; color: var(--muted); text-align: left; } .screen-link:hover, .screen-link.is-active, .side-link:hover, .side-link.is-active { background: linear-gradient(135deg, color-mix(in srgb, var(--role-a) 20%, transparent), color-mix(in srgb, var(--role-b) 13%, transparent)); color: var(--text); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); } .preview-area { min-width: 0; display: grid; place-items: center; padding: 36px; } .device-shell { position: relative; width: min(390px, calc(100vw - 370px)); height: min(844px, calc(100dvh - 72px)); min-height: 720px; border-radius: 36px; padding: 14px; background: linear-gradient(160deg, #020617, #09111f 48%, #120c1f); box-shadow: var(--shadow); transition: width 240ms var(--ease), height 240ms var(--ease), border-radius 240ms var(--ease); } .device-shell.ipad { width: min(1040px, calc(100vw - 390px)); height: min(760px, calc(100dvh - 72px)); min-height: 660px; border-radius: 28px; } .device-top { position: absolute; z-index: 4; top: 21px; left: 50%; width: 116px; height: 28px; transform: translateX(-50%); border-radius: 999px; background: #050914; } .device-shell.ipad .device-top { display: none; } .app-surface { position: relative; overflow: hidden; width: 100%; height: 100%; border-radius: 26px; background: linear-gradient(138deg, rgba(46, 230, 109, 0.13) 0%, transparent 26%), linear-gradient(215deg, rgba(88, 215, 255, 0.14) 4%, transparent 34%), linear-gradient(320deg, rgba(251, 113, 133, 0.1) 0%, transparent 40%), linear-gradient(180deg, color-mix(in srgb, var(--app-bg) 94%, #091d12), var(--app-bg)); border: 1px solid rgba(255, 255, 255, 0.08); isolation: isolate; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), inset 0 -1px 0 rgba(255, 255, 255, 0.04); } .app-surface::before, .app-surface::after { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; } .app-surface::before { background: linear-gradient(140deg, rgba(46, 230, 109, 0.13) 0%, transparent 44%), linear-gradient(218deg, rgba(88, 215, 255, 0.13) 6%, transparent 48%), linear-gradient(320deg, rgba(247, 201, 72, 0.09) 0%, transparent 52%), linear-gradient(180deg, rgba(255, 255, 255, 0.07), transparent 28%); opacity: 0.54; animation: glassBreath 8600ms ease-in-out infinite alternate; } .app-surface::after { background: linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 22%), linear-gradient(90deg, rgba(255, 255, 255, 0.025), transparent 34%, rgba(255, 255, 255, 0.02) 66%, transparent); opacity: 0.2; } .device-shell.ipad .app-surface { border-radius: 18px; } .status-bar { height: 48px; padding: 12px 22px 0; display: flex; align-items: center; justify-content: space-between; font-size: 12px; font-weight: 700; position: relative; z-index: 1; } .device-shell.iphone .status-bar { padding-top: 16px; } .app-layout { height: calc(100% - 48px - 78px); display: grid; grid-template-columns: 0 minmax(0, 1fr) 0; transition: grid-template-columns 240ms var(--ease); position: relative; z-index: 1; } .device-shell.ipad .app-layout { grid-template-columns: 188px minmax(0, 1fr) 190px; } .tablet-sidebar, .tablet-context { overflow: hidden; padding: 18px; border-color: var(--line); background: rgba(255, 255, 255, 0.035); backdrop-filter: blur(18px) saturate(140%); -webkit-backdrop-filter: blur(18px) saturate(140%); opacity: 0; pointer-events: none; transition: opacity 220ms var(--ease); } .tablet-sidebar { border-right: 1px solid var(--line); } .tablet-context { border-left: 1px solid var(--line); } .device-shell.ipad .tablet-sidebar, .device-shell.ipad .tablet-context { opacity: 1; pointer-events: auto; } .side-title { margin-bottom: 16px; color: var(--muted); font-size: 13px; font-weight: 700; } .tablet-context h3 { margin-bottom: 18px; font-size: 22px; } .context-stat { display: flex; align-items: center; justify-content: space-between; min-height: 48px; border-bottom: 1px solid var(--line); color: var(--muted); } .context-stat strong { color: var(--text); } .phone-stage { min-width: 0; display: flex; flex-direction: column; } .app-header { min-height: 74px; padding: 10px 18px 8px; display: flex; align-items: center; justify-content: space-between; } .app-header h2 { margin: 0; font-size: 24px; letter-spacing: 0; } .icon-button { width: 44px; height: 44px; display: grid; place-items: center; border: 1px solid var(--line); border-radius: 8px; background: var(--control); color: var(--text); box-shadow: var(--press-shadow); backdrop-filter: blur(18px) saturate(150%); -webkit-backdrop-filter: blur(18px) saturate(150%); } .icon-button [class^="icon-"], .icon-button [class*=" icon-"] { width: 18px; height: 18px; color: var(--role-a); } .sync-strip { margin: 0 18px 12px; min-height: 34px; display: flex; align-items: center; gap: 8px; padding: 0 12px; border-radius: 8px; background: linear-gradient(135deg, color-mix(in srgb, var(--role-a) 20%, transparent), color-mix(in srgb, var(--role-b) 10%, transparent)); color: var(--text); font-size: 13px; border: 1px solid color-mix(in srgb, var(--role-a) 24%, transparent); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12); backdrop-filter: blur(16px) saturate(140%); -webkit-backdrop-filter: blur(16px) saturate(140%); } .pulse-dot { width: 8px; height: 8px; border-radius: 999px; background: var(--accent); box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent) 36%, transparent); animation: pulse 1800ms infinite; } .screen-viewport { flex: 1; min-height: 0; overflow: hidden; position: relative; } .screen { position: absolute; inset: 0; overflow: auto; padding: 0 18px 24px; opacity: 0; transform: translateY(12px); pointer-events: none; transition: opacity 220ms var(--ease), transform 220ms var(--ease); scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--accent-2) 45%, transparent) transparent; } .screen.is-active { opacity: 1; transform: translateY(0); pointer-events: auto; } .hero-status, .detail-hero, .section-block, .alert-line, .safe-transfer, .complex-card { border: 1px solid var(--line); border-radius: 8px; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-top) 74%, transparent), var(--glass)); box-shadow: var(--glass-shadow); backdrop-filter: blur(22px) saturate(155%); -webkit-backdrop-filter: blur(22px) saturate(155%); position: relative; overflow: hidden; } .hero-status::before, .detail-hero::before, .section-block::before, .alert-line::before, .safe-transfer::before, .complex-card::before, .metric::before, .quick-action::before, .booking-card::before, .report-row::before, .summary-grid div::before, .permission-row::before, .calculated-row::before, .report-bars div::before { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(180deg, rgba(255, 255, 255, 0.11), transparent 34%), linear-gradient(115deg, var(--liquid-line), transparent 42%); opacity: 0.14; } .hero-status, .detail-hero { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding: 16px; margin-bottom: 14px; border-color: color-mix(in srgb, var(--role-a) 28%, var(--line)); box-shadow: 0 18px 48px color-mix(in srgb, var(--role-a) 10%, rgba(1, 8, 20, 0.32)), inset 0 1px 0 rgba(255, 255, 255, 0.18); } .hero-status h3, .detail-hero h3 { margin-bottom: 6px; font-size: 20px; } .hero-status p, .detail-hero p { margin-bottom: 0; color: var(--muted); line-height: 1.4; } .status-pill { white-space: nowrap; display: inline-flex; align-items: center; min-height: 28px; padding: 0 10px; border-radius: 999px; font-size: 12px; font-weight: 800; } .status-pill.good { background: color-mix(in srgb, var(--accent) 20%, transparent); color: var(--accent); border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent); } .status-pill.warn { background: color-mix(in srgb, var(--warn) 18%, transparent); color: var(--warn); border: 1px solid color-mix(in srgb, var(--warn) 34%, transparent); } .status-pill.neutral { background: color-mix(in srgb, var(--accent-2) 16%, transparent); color: var(--accent-2); border: 1px solid color-mix(in srgb, var(--accent-2) 30%, transparent); } .metric-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; } .metric { min-height: 118px; display: grid; align-content: space-between; gap: 8px; padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-top) 68%, transparent), var(--glass)); box-shadow: var(--glass-shadow); backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); position: relative; overflow: hidden; } .metric::after { content: ""; position: absolute; inset: auto 12px 10px 12px; height: 2px; border-radius: 999px; background: linear-gradient(90deg, color-mix(in srgb, var(--role-a) 74%, transparent), transparent); opacity: 0.55; pointer-events: none; } .metric span, .metric small, .summary-grid span, .close-list span { color: var(--muted); } .metric strong { font-size: 21px; letter-spacing: 0; } .metric small { line-height: 1.35; } .role-banner { display: grid; gap: 6px; padding: 12px 14px; margin-bottom: 14px; border: 1px solid var(--line); border-radius: 8px; background: linear-gradient(135deg, color-mix(in srgb, var(--role-a) 12%, var(--glass)), var(--glass)); box-shadow: var(--glass-shadow); backdrop-filter: blur(22px) saturate(150%); -webkit-backdrop-filter: blur(22px) saturate(150%); position: relative; overflow: hidden; } .role-banner::before { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(135deg, rgba(255, 255, 255, 0.16), transparent 42%), linear-gradient(150deg, color-mix(in srgb, var(--role-a) 16%, transparent), color-mix(in srgb, var(--role-b) 10%, transparent) 58%, transparent); opacity: 0.42; animation: glassBreath 6200ms ease-in-out infinite alternate; } .role-banner span { color: var(--muted); font-size: 12px; font-weight: 800; text-transform: uppercase; } .role-banner strong { line-height: 1.35; } .role-banner.admin { border-color: color-mix(in srgb, var(--accent) 30%, var(--line)); } .role-banner.owner { border-color: color-mix(in srgb, var(--accent-2) 34%, var(--line)); } .permission-row { min-height: 56px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--glass); box-shadow: var(--glass-shadow); backdrop-filter: blur(18px) saturate(145%); -webkit-backdrop-filter: blur(18px) saturate(145%); position: relative; overflow: hidden; } .permission-row span { color: var(--muted); } .signal-strip { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; } .signal-strip div { min-height: 66px; display: grid; align-content: center; gap: 4px; padding: 10px 12px; border: 1px solid color-mix(in srgb, var(--role-a) 26%, var(--line)); border-radius: 8px; background: linear-gradient(135deg, color-mix(in srgb, var(--role-a) 14%, var(--glass)), color-mix(in srgb, var(--role-b) 8%, var(--glass))); box-shadow: var(--press-shadow); backdrop-filter: blur(18px) saturate(145%); -webkit-backdrop-filter: blur(18px) saturate(145%); } .signal-strip span { color: var(--muted); font-size: 11px; font-weight: 800; text-transform: uppercase; } .signal-strip strong { line-height: 1.25; } .top-gap { margin-top: 14px; } .alert-line { display: flex; gap: 12px; align-items: flex-start; padding: 14px; margin-bottom: 14px; background: linear-gradient(135deg, color-mix(in srgb, var(--warn) 16%, var(--glass)), var(--glass)); } .alert-line.compact { margin: 0; } .alert-line.danger { background: linear-gradient(135deg, color-mix(in srgb, var(--danger) 16%, var(--glass)), var(--glass)); } .alert-line p { margin: 4px 0 0; color: var(--muted); line-height: 1.35; } .quick-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 16px; } .quick-grid.three { grid-template-columns: repeat(3, 1fr); } .quick-action { min-height: 78px; display: grid; justify-items: start; align-content: center; gap: 8px; padding: 13px; border: 1px solid var(--line); border-radius: 8px; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-top) 62%, transparent), var(--glass)); color: var(--text); box-shadow: var(--glass-shadow); backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); position: relative; overflow: hidden; } .quick-action.primary, .submit-button { background: linear-gradient(135deg, var(--role-a), color-mix(in srgb, var(--role-b) 74%, var(--role-a))); color: #ffffff; border-color: transparent; box-shadow: 0 18px 36px color-mix(in srgb, var(--role-a) 24%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.35); } .quick-action:hover, .booking-card:hover, .report-row:hover, .icon-button:hover, .wide-control:hover, .tab:hover, .text-button:hover, .add-button:hover, .submit-button:hover, .secondary-submit:hover, .upload-box:hover { transform: translateY(-1px); } .quick-action:active, .booking-card:active, .report-row:active, .icon-button:active, .wide-control:active, .tab:active, .text-button:active, .add-button:active, .submit-button:active, .secondary-submit:active, .upload-box:active { transform: translateY(0); filter: brightness(0.97); } .section-block { padding: 14px; margin-bottom: 14px; } .section-block.flush { margin: 0; display: grid; gap: 12px; } .section-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 12px; } .section-head h3 { margin-bottom: 0; font-size: 16px; min-width: 0; } .text-button { min-height: 36px; padding: 0 10px; border-radius: 8px; background: var(--control); color: var(--text); border: 1px solid var(--line); backdrop-filter: blur(14px) saturate(140%); -webkit-backdrop-filter: blur(14px) saturate(140%); } .add-button { flex: 0 0 auto; min-height: 40px; padding: 0 13px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; border: 1px solid color-mix(in srgb, var(--role-a) 36%, var(--line)); border-radius: 8px; background: linear-gradient(135deg, color-mix(in srgb, var(--role-a) 28%, var(--glass)), color-mix(in srgb, var(--role-b) 18%, var(--glass))); color: var(--text); font-size: 13px; font-weight: 800; line-height: 1; white-space: nowrap; box-shadow: var(--glass-shadow); backdrop-filter: blur(16px) saturate(145%); -webkit-backdrop-filter: blur(16px) saturate(145%); } .add-button::before { content: ""; width: 14px; height: 14px; flex: 0 0 auto; background: currentColor; mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 5h2v6h6v2h-6v6h-2v-6H5v-2h6V5Z'/%3E%3C/svg%3E") center / contain no-repeat; -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 5h2v6h6v2h-6v6h-2v-6H5v-2h6V5Z'/%3E%3C/svg%3E") center / contain no-repeat; } .booking-row { min-height: 56px; display: flex; align-items: center; justify-content: space-between; gap: 10px; border-top: 1px solid var(--line); } .booking-row:first-of-type { border-top: 0; } .booking-row span, .booking-card small { display: block; color: var(--muted); line-height: 1.35; } .amount { font-weight: 800; } .amount.due, .danger-text { color: var(--danger); } .amount.paid { color: var(--accent); } .search-field { min-height: 48px; display: flex; align-items: center; gap: 8px; margin-bottom: 12px; padding: 0 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--control); box-shadow: var(--press-shadow); backdrop-filter: blur(18px) saturate(145%); -webkit-backdrop-filter: blur(18px) saturate(145%); } .search-field input { min-height: 44px; border: 0; padding: 0; background: transparent; } .chips { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 10px; } .chips.wide .chip { flex: 1; } .chip { min-height: 36px; padding: 0 12px; border-radius: 999px; background: var(--control); border: 1px solid var(--line); white-space: nowrap; backdrop-filter: blur(14px) saturate(140%); -webkit-backdrop-filter: blur(14px) saturate(140%); } .list-stack { display: grid; gap: 10px; } .complex-list { display: grid; gap: 10px; } .complex-card { min-height: 142px; display: grid; gap: 12px; padding: 14px; } .complex-card.attention { border-color: color-mix(in srgb, var(--warn) 42%, var(--line)); background: linear-gradient(135deg, color-mix(in srgb, var(--warn) 12%, var(--glass)), var(--glass)); } .complex-card h3 { margin: 10px 0 4px; font-size: 18px; } .complex-card p { margin: 0; color: var(--muted); line-height: 1.35; } .complex-meta { min-height: 54px; display: grid; gap: 4px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; background: color-mix(in srgb, var(--glass-strong) 72%, transparent); } .complex-meta span, .admin-pick small { color: var(--muted); } .assignment-grid { display: grid; gap: 8px; } .admin-pick { min-height: 62px; display: grid; grid-template-columns: 24px minmax(0, 1fr); align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-top) 56%, transparent), var(--glass)); box-shadow: var(--press-shadow); backdrop-filter: blur(18px) saturate(145%); -webkit-backdrop-filter: blur(18px) saturate(145%); } .admin-pick input { width: 20px; min-height: 20px; padding: 0; accent-color: var(--accent); } .admin-pick small { display: block; margin-top: 2px; line-height: 1.3; } .admin-pick.disabled { opacity: 0.54; } .booking-card, .report-row { width: 100%; min-height: 74px; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-top) 58%, transparent), var(--glass)); color: var(--text); text-align: left; transition: transform 180ms var(--ease), border-color 180ms var(--ease), box-shadow 180ms var(--ease), background 180ms var(--ease); box-shadow: var(--press-shadow); backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); position: relative; overflow: hidden; } .report-row { grid-template-columns: minmax(0, 1fr) auto; } .booking-card:hover, .report-row:hover { border-color: color-mix(in srgb, var(--role-a) 34%, var(--line)); box-shadow: 0 16px 36px color-mix(in srgb, var(--role-a) 10%, rgba(1, 8, 20, 0.24)), inset 0 1px 0 rgba(255, 255, 255, 0.18); } .booking-card > span:nth-child(2), .report-row > span { min-width: 0; } .booking-card strong, .report-row strong { letter-spacing: 0; } .house-badge { width: 42px; height: 42px; display: grid; place-items: center; border-radius: 8px; background: linear-gradient(135deg, color-mix(in srgb, var(--role-a) 18%, var(--glass)), color-mix(in srgb, var(--role-b) 12%, var(--glass))); font-weight: 800; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12); } .summary-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; } .summary-grid div { padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-top) 58%, transparent), var(--glass)); box-shadow: var(--press-shadow); backdrop-filter: blur(18px) saturate(145%); -webkit-backdrop-filter: blur(18px) saturate(145%); position: relative; overflow: hidden; } .summary-grid strong, .summary-grid span { display: block; } .summary-grid strong { margin-top: 6px; } .timeline { list-style: none; margin: 0; padding: 0; } .timeline li { display: grid; grid-template-columns: 16px 1fr; gap: 10px; padding: 10px 0; border-top: 1px solid var(--line); } .timeline li:first-child { border-top: 0; } .timeline li > span { width: 10px; height: 10px; margin-top: 5px; border-radius: 999px; background: var(--accent); } .timeline small { display: block; color: var(--muted); margin-top: 3px; } .form-stack { display: grid; gap: 12px; } .form-stack.tight { gap: 10px; } .form-stack label { display: grid; gap: 7px; } .form-stack label > span { color: var(--muted); font-size: 13px; font-weight: 700; } .cash-fields { display: grid; gap: 12px; } .calculated-row, .safe-transfer, .close-list div { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .calculated-row { min-height: 48px; padding: 0 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--control); box-shadow: var(--press-shadow); backdrop-filter: blur(18px) saturate(145%); -webkit-backdrop-filter: blur(18px) saturate(145%); position: relative; overflow: hidden; } .submit-button, .secondary-submit { min-height: 50px; border: 0; border-radius: 8px; font-weight: 800; transition: transform 180ms var(--ease), filter 180ms var(--ease); } .sticky-actions { position: sticky; bottom: 0; display: grid; grid-template-columns: 0.86fr 1.14fr; gap: 10px; padding: 10px 0 0; background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--app-bg) 72%, transparent) 28%); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); } .secondary-submit { background: var(--control); color: var(--text); border: 1px solid var(--line); box-shadow: var(--press-shadow); } .upload-box { min-height: 84px; display: grid; place-items: center; gap: 8px; border: 1px dashed var(--line); border-radius: 8px; background: var(--glass); color: var(--muted); transition: transform 180ms var(--ease), border-color 180ms var(--ease); box-shadow: var(--glass-shadow); backdrop-filter: blur(18px) saturate(145%); -webkit-backdrop-filter: blur(18px) saturate(145%); } .safe-transfer { display: grid; grid-template-columns: 1fr auto; padding: 16px; margin-bottom: 14px; } .safe-transfer .submit-button { grid-column: 1 / -1; } .close-list { display: grid; gap: 1px; margin-bottom: 14px; overflow: hidden; border: 1px solid var(--line); border-radius: 8px; background: color-mix(in srgb, var(--line) 80%, transparent); } .close-list div { min-height: 44px; padding: 0 12px; background: var(--glass); } .report-bars { display: grid; gap: 12px; margin-bottom: 16px; } .report-bars div { display: grid; grid-template-columns: 1fr auto; gap: 8px; padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: var(--glass); box-shadow: var(--glass-shadow); backdrop-filter: blur(18px) saturate(145%); -webkit-backdrop-filter: blur(18px) saturate(145%); position: relative; overflow: hidden; } .report-bars i { grid-column: 1 / -1; height: 8px; border-radius: 999px; background: linear-gradient(90deg, var(--accent) var(--bar), color-mix(in srgb, var(--surface-2) 80%, transparent) var(--bar)); } .form-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } .tag-list { display: flex; flex-wrap: wrap; gap: 8px; } .tag-list span { padding: 8px 10px; border-radius: 999px; background: var(--glass); color: var(--muted); font-size: 13px; border: 1px solid var(--line); } .tab-bar { height: 78px; display: grid; grid-template-columns: repeat(5, 1fr); gap: 2px; padding: 7px 8px calc(7px + env(safe-area-inset-bottom)); border-top: 1px solid var(--line); background: linear-gradient(180deg, color-mix(in srgb, var(--app-bg) 48%, transparent), color-mix(in srgb, var(--app-bg) 82%, transparent)); backdrop-filter: blur(24px) saturate(150%); -webkit-backdrop-filter: blur(24px) saturate(150%); position: relative; z-index: 2; } .device-shell.ipad .tab-bar { display: none; } .tab { min-width: 0; display: grid; justify-items: center; align-content: center; gap: 4px; border-radius: 8px; background: transparent; color: var(--muted); font-size: 11px; transition: background 180ms var(--ease), color 180ms var(--ease), transform 180ms var(--ease); } .tab.is-active { color: var(--role-a); background: linear-gradient(135deg, color-mix(in srgb, var(--role-a) 20%, transparent), color-mix(in srgb, var(--role-b) 12%, transparent)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12); } .toast { position: absolute; left: 50%; bottom: calc(88px + env(safe-area-inset-bottom)); z-index: 20; min-height: 46px; width: calc(100% - 36px); max-width: 360px; display: grid; place-items: center; padding: 0 16px; border: 1px solid var(--line); border-radius: 8px; background: var(--glass-strong); color: var(--text); box-shadow: var(--shadow); backdrop-filter: blur(22px) saturate(150%); -webkit-backdrop-filter: blur(22px) saturate(150%); opacity: 0; transform: translate(-50%, 18px); pointer-events: none; transition: opacity 220ms var(--ease), transform 220ms var(--ease); } .device-shell.ipad .toast { bottom: 20px; max-width: 420px; } .toast.show { opacity: 1; transform: translate(-50%, 0); } [class^="icon-"], [class*=" icon-"] { width: 20px; height: 20px; display: inline-block; color: currentColor; background: currentColor; mask-repeat: no-repeat; mask-position: center; mask-size: contain; -webkit-mask-repeat: no-repeat; -webkit-mask-position: center; -webkit-mask-size: contain; } .icon-sync { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.7 6.3A8 8 0 0 0 4.1 10H2l3.2 3.2L8.4 10H6.1a6 6 0 0 1 10.2-2.3l1.4-1.4ZM6.3 17.7A8 8 0 0 0 19.9 14H22l-3.2-3.2L15.6 14h2.3a6 6 0 0 1-10.2 2.3l-1.4 1.4Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.7 6.3A8 8 0 0 0 4.1 10H2l3.2 3.2L8.4 10H6.1a6 6 0 0 1 10.2-2.3l1.4-1.4ZM6.3 17.7A8 8 0 0 0 19.9 14H22l-3.2-3.2L15.6 14h2.3a6 6 0 0 1-10.2 2.3l-1.4 1.4Z'/%3E%3C/svg%3E"); } .icon-alert { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 3 1.8 21h20.4L12 3Zm1 14h-2v2h2v-2Zm0-7h-2v5h2v-5Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 3 1.8 21h20.4L12 3Zm1 14h-2v2h2v-2Zm0-7h-2v5h2v-5Z'/%3E%3C/svg%3E"); color: var(--warn); } .icon-wallet { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3 6.5A2.5 2.5 0 0 1 5.5 4H19v3h1a2 2 0 0 1 2 2v9.5a2.5 2.5 0 0 1-2.5 2.5h-14A2.5 2.5 0 0 1 3 18.5v-12ZM5.5 6a.5.5 0 0 0 0 1H17V6H5.5ZM18 13a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3 6.5A2.5 2.5 0 0 1 5.5 4H19v3h1a2 2 0 0 1 2 2v9.5a2.5 2.5 0 0 1-2.5 2.5h-14A2.5 2.5 0 0 1 3 18.5v-12ZM5.5 6a.5.5 0 0 0 0 1H17V6H5.5ZM18 13a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Z'/%3E%3C/svg%3E"); } .icon-shield { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2 4 5.5V11c0 5 3.4 9.7 8 11 4.6-1.3 8-6 8-11V5.5L12 2Zm0 4 4 1.8V11c0 3.2-1.8 6.2-4 7.5C9.8 17.2 8 14.2 8 11V7.8L12 6Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2 4 5.5V11c0 5 3.4 9.7 8 11 4.6-1.3 8-6 8-11V5.5L12 2Zm0 4 4 1.8V11c0 3.2-1.8 6.2-4 7.5C9.8 17.2 8 14.2 8 11V7.8L12 6Z'/%3E%3C/svg%3E"); } .icon-receipt { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 2h12v20l-3-1.7-3 1.7-3-1.7L6 22V2Zm3 5h6V5H9v2Zm0 4h8V9H9v2Zm0 4h5v-2H9v2Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 2h12v20l-3-1.7-3 1.7-3-1.7L6 22V2Zm3 5h6V5H9v2Zm0 4h8V9H9v2Zm0 4h5v-2H9v2Z'/%3E%3C/svg%3E"); } .icon-safe { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 5a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3H7a3 3 0 0 1-3-3V5Zm3 1v12h10V6H7Zm5 3a3 3 0 1 0 0 6 3 3 0 0 0 0-6Zm0 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 5a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3H7a3 3 0 0 1-3-3V5Zm3 1v12h10V6H7Zm5 3a3 3 0 1 0 0 6 3 3 0 0 0 0-6Zm0 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z'/%3E%3C/svg%3E"); } .icon-search { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.5 4a6.5 6.5 0 0 1 5.1 10.5l4 4-1.4 1.4-4-4A6.5 6.5 0 1 1 10.5 4Zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.5 4a6.5 6.5 0 0 1 5.1 10.5l4 4-1.4 1.4-4-4A6.5 6.5 0 1 1 10.5 4Zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9Z'/%3E%3C/svg%3E"); color: var(--muted); } .icon-camera { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9 4 7.5 6H4a2 2 0 0 0-2 2v9a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V8a2 2 0 0 0-2-2h-3.5L15 4H9Zm3 5a4 4 0 1 1 0 8 4 4 0 0 1 0-8Zm0 2a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9 4 7.5 6H4a2 2 0 0 0-2 2v9a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V8a2 2 0 0 0-2-2h-3.5L15 4H9Zm3 5a4 4 0 1 1 0 8 4 4 0 0 1 0-8Zm0 2a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z'/%3E%3C/svg%3E"); } .icon-home { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 3 3 10.5V21h7v-6h4v6h7V10.5L12 3Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 3 3 10.5V21h7v-6h4v6h7V10.5L12 3Z'/%3E%3C/svg%3E"); } .icon-bed { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 5h4a3 3 0 0 1 3 3v2h7a3 3 0 0 1 3 3v6h-2v-2H5v2H3V5h1Zm1 7v3h14v-2a1 1 0 0 0-1-1H5Zm0-5v3h4V8a1 1 0 0 0-1-1H5Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 5h4a3 3 0 0 1 3 3v2h7a3 3 0 0 1 3 3v6h-2v-2H5v2H3V5h1Zm1 7v3h14v-2a1 1 0 0 0-1-1H5Zm0-5v3h4V8a1 1 0 0 0-1-1H5Z'/%3E%3C/svg%3E"); } .icon-chart { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 20V4h2v14h14v2H4Zm4-4V9h3v7H8Zm5 0V6h3v10h-3Zm5 0v-5h3v5h-3Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 20V4h2v14h14v2H4Zm4-4V9h3v7H8Zm5 0V6h3v10h-3Zm5 0v-5h3v5h-3Z'/%3E%3C/svg%3E"); } .icon-settings { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.5 2h3l.6 2.3c.5.2.9.4 1.3.7l2.2-.9 1.5 2.6-1.8 1.5c.1.5.2 1 .2 1.5s-.1 1-.2 1.5l1.8 1.5-1.5 2.6-2.2-.9c-.4.3-.9.5-1.3.7L13.5 22h-3l-.6-2.3c-.5-.2-.9-.4-1.3-.7l-2.2.9-1.5-2.6 1.8-1.5c-.1-.5-.2-1-.2-1.5s.1-1 .2-1.5L4.9 7.3l1.5-2.6 2.2.9c.4-.3.9-.5 1.3-.7L10.5 2ZM12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.5 2h3l.6 2.3c.5.2.9.4 1.3.7l2.2-.9 1.5 2.6-1.8 1.5c.1.5.2 1 .2 1.5s-.1 1-.2 1.5l1.8 1.5-1.5 2.6-2.2-.9c-.4.3-.9.5-1.3.7L13.5 22h-3l-.6-2.3c-.5-.2-.9-.4-1.3-.7l-2.2.9-1.5-2.6 1.8-1.5c-.1-.5-.2-1-.2-1.5s.1-1 .2-1.5L4.9 7.3l1.5-2.6 2.2.9c.4-.3.9-.5 1.3-.7L10.5 2ZM12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8Z'/%3E%3C/svg%3E"); } .icon-moon { mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 15.3A8 8 0 0 1 8.7 4 8.5 8.5 0 1 0 20 15.3Z'/%3E%3C/svg%3E"); -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 15.3A8 8 0 0 1 8.7 4 8.5 8.5 0 1 0 20 15.3Z'/%3E%3C/svg%3E"); } @keyframes glassBreath { 0% { opacity: 0.34; } 55% { opacity: 0.58; } 100% { opacity: 0.44; } } @keyframes pulse { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent) 36%, transparent); } 70% { box-shadow: 0 0 0 8px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } } @media (max-width: 900px) { .workspace { grid-template-columns: 1fr; } .studio-panel { position: static; height: auto; border-right: 0; border-bottom: 1px solid var(--line); } .preview-area { padding: 20px 12px 28px; } .device-shell, .device-shell.ipad { width: min(100%, 390px); height: 820px; min-height: 680px; } .device-shell.ipad { width: min(100%, 760px); } } @media (max-width: 420px) { .preview-area { padding: 0; } .device-shell { width: 100%; height: 100dvh; min-height: 100dvh; padding: 0; border-radius: 0; } .device-top { top: 8px; } .app-surface { border-radius: 0; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 1ms !important; transition-duration: 1ms !important; scroll-behavior: auto !important; } }