:root { /* Etherpad green design system */ --ep-accent: #149474; --ep-accent-h: #1AAA85; --ep-accent-d: #0E7257; --ep-accent-tint: #E6F5F0; --ep-accent-tint2: #D1ECDF; --ep-forest: #0E3D32; --ep-forest-d: #082A22; --ep-forest-l: #155144; --ink: rgba(0,0,0,.88); --ink-2: rgba(0,0,0,.65); --ink-3: rgba(0,0,0,.45); --ink-4: rgba(0,0,0,.25); --bg: #F5F7F6; --panel: #FFFFFF; --line: #E7EAE8; --line-2: #F0F2F1; --hover: #F7FAF8; --r: 6px; --r-lg: 10px; /* Legacy aliases kept for other pages */ --etherpad-color: #149474; --etherpad-comp: #0E3D32; --etherpad-light: #99FF99; --sidebar-width: 248px; } @font-face { font-family: Karla; src: url(/Karla-Regular.ttf); } html, body, #root { box-sizing: border-box; height: 100%; font-family: "Karla", sans-serif; } *, *:before, *:after { box-sizing: inherit; font-size: 16px; } body { margin: 0; color: #333; font: 14px helvetica, sans-serif; background: #eee; } div.menu { left: 0; transition: left .3s; height: 100vh; display: flex; align-items: stretch; width: var(--sidebar-width); z-index: 99; position: fixed; } [role="dialog"] h2 { color: var(--etherpad-color); } .icon-button { display: flex; gap: 10px; background-color: var(--etherpad-color); color: white; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; } .icon-button:hover { background-color: #13a37c; } .dialog-close-button { position: absolute; top: 10px; right: 10px; background: none; border: none; cursor: pointer; color: var(--etherpad-color); } .icon-button:active { background-color: #13a37c; transform: scale(0.98); } .icon-button svg { align-self: center; } .icon-button span { align-self: center; } /* sidebar brand header handled by .sidebar-* classes below */ .inner-menu { flex-grow: 1; background-color: var(--ep-forest); color: rgba(255,255,255,.92); height: 100vh; display: flex; flex-direction: column; overflow: hidden; } /* legacy menu rules kept for fallback */ div.menu ul { color: white; padding: 0; } div.menu svg { align-self: center; } div.menu li { list-style: none; } div.innerwrapper { transition: margin-left .3s; isolation: isolate; background-color: #F0F0F0; overflow: auto; height: 100vh; flex-grow: 100; margin-left: var(--sidebar-width); padding: 16px 12px; } div.innerwrapper-err { display: none; } #wrapper { background: none repeat scroll 0px 0px #FFFFFF; box-shadow: 0px 1px 10px rgba(0, 0, 0, 0.2); min-height: 100%; /*always display a scrollbar*/ } h1 { font-size: 29px; } h2 { font-size: 24px; } .separator { margin: 10px 0; height: 1px; background: #aaa; background: -webkit-linear-gradient(left, #fff, #aaa 20%, #aaa 80%, #fff); background: -moz-linear-gradient(left, #fff, #aaa 20%, #aaa 80%, #fff); background: -ms-linear-gradient(left, #fff, #aaa 20%, #aaa 80%, #fff); background: -o-linear-gradient(left, #fff, #aaa 20%, #aaa 80%, #fff); } form { margin-bottom: 0; } #inner { width: 300px; margin: 0 auto; } input { font-weight: bold; font-size: 15px; } .sort { cursor: pointer; } .sort:after { content: '▲▼' } .sort.up:after { content: '▲' } .sort.down:after { content: '▼' } #installed-plugins thead tr th:nth-child(3) { width: 15%; } table { border: 1px solid #ddd; border-radius: 3px; border-spacing: 0; width: 100%; margin: 20px 0; } .table-container { width: 100%; overflow: auto; max-height: 90vh; } #available-plugins th:first-child, #available-plugins th:nth-child(2) { text-align: center; } td, th { padding: 5px; } .template { display: none; } #installed-plugins td > div { position: relative; /* Allows us to position the loading indicator relative to this row */ display: inline-block; /*make this fill the whole cell*/ width: 100%; } .messages { height: 5em; } .messages * { display: none; text-align: center; } .messages .fetching { display: block; } .progress { position: absolute; top: 0; left: 0; bottom: 0; right: 0; padding: auto; background: rgb(255, 255, 255); display: none; } #search-progress.progress { padding-top: 20%; background: rgba(255, 255, 255, 0.3); } .progress * { display: block; margin: 0 auto; text-align: center; color: #666; } .settings-page { display: flex; flex-direction: column; gap: 20px; min-height: 100%; } #response { display: inline; } a:link, a:visited, a:hover, a:focus { color: #333333; text-decoration: none; } a:focus, a:hover { text-decoration: underline; } .installed-results a:link, .search-results a:link, .installed-results a:visited, .search-results a:visited, .installed-results a:hover, .search-results a:hover, .installed-results a:focus, .search-results a:focus { text-decoration: underline; } .installed-results a:focus, .search-results a:focus, .installed-results a:hover, .search-results a:hover { text-decoration: none; } pre { white-space: pre-wrap; word-wrap: break-word; } /* #icon-button removed — burger is now inside .sidebar-top */ #icon-button { display: none; } /* sidebar footer handled by .sidebar-footer below */ /* collapsed state handled by the rules at the bottom of this file */ @media (max-width: 800px) { div.innerwrapper { margin-left: 64px; } .inner-menu { border-radius: 0; } div.menu { height: 100vh; border-right: none; width: 64px; } table { border: none; } table, thead, tbody, td, tr { display: block; } thead tr { display: none; } tr { border: 1px solid #ccc; margin-bottom: 5px; border-radius: 3px; } td { border: none; border-bottom: 1px solid #eee; position: relative; padding-left: 50%; white-space: normal; text-align: left; } td.name { word-wrap: break-word; } td:before { position: absolute; top: 6px; left: 6px; text-align: left; padding-right: 10px; white-space: nowrap; font-weight: bold; content: attr(data-label); } td:last-child { border-bottom: none; } table input[type="button"] { float: none; } } .settings-button-bar { margin-top: 10px; display: flex; gap: 10px; } .login-background { background-image: url("/fond.jpg"); background-position: center; background-repeat: no-repeat; background-size: cover; display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #f0f0f0; } .login-inner-box div { margin-top: 1rem; } .login-inner-box [type=submit] { margin-top: 2rem; } .login-textinput { width: 100%; padding: 10px; background-color: #fffacc; border-radius: 5px; border: 1px solid #ccc; margin-bottom: 10px; } .login-box { padding: 20px; border-radius: 40px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); background-color: #fff; } @media (max-width: 900px) { .login-box { width: 90% } } .login-inner-box { position: relative; padding: 20px; } .login-title { padding: 0; margin: 0; text-align: center; color: var(--etherpad-color); font-size: 4rem; font-weight: 1000; } .login-button { padding: 10px; background-color: var(--etherpad-color); color: white; border: none; border-radius: 5px; cursor: pointer; width: 100%; height: 40px; } .dialog-overlay { position: fixed; inset: 0; background-color: white; z-index: 100; } .dialog-confirm-overlay { position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.5); z-index: 100; } .dialog-confirm-content { position: fixed; top: 50%; left: 50%; background-color: white; transform: translate(-50%, -50%); padding: 20px; z-index: 101; } .dialog-content { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); padding: 20px; z-index: 101; } .dialog-title { color: var(--etherpad-color); font-size: 2em; margin-bottom: 20px; } .ToastViewport { position: fixed; top: 10px; right: 20px; display: flex; flex-direction: column; gap: 10px; width: 390px; max-width: 100vw; margin: 0; list-style: none; z-index: 2147483647; outline: none; } .ToastRootSuccess { background-color: lawngreen; } .ToastRootFailure { background-color: red; } .ToastRootFailure > .ToastTitle { color: white; } .ToastRoot { border-radius: 20px; box-shadow: hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px; padding: 15px; display: grid; grid-template-areas: 'title action' 'description action'; grid-template-columns: auto max-content; column-gap: 15px; align-items: center; } .ToastRoot[data-state='open'] { animation: slideIn 150ms cubic-bezier(0.16, 1, 0.3, 1); } .ToastRoot[data-state='closed'] { animation: hide 100ms ease-in; } .ToastRoot[data-swipe='move'] { transform: translateX(var(--radix-toast-swipe-move-x)); } .ToastRoot[data-swipe='cancel'] { transform: translateX(0); transition: transform 200ms ease-out; } .ToastRoot[data-swipe='end'] { animation: swipeOut 100ms ease-out; } @keyframes hide { from { opacity: 1; } to { opacity: 0; } } @keyframes slideIn { from { transform: translateX(calc(100% + var(--viewport-padding))); } to { transform: translateX(0); } } @keyframes swipeOut { from { transform: translateX(var(--radix-toast-swipe-end-x)); } to { transform: translateX(calc(100% + var(--viewport-padding))); } } .ToastTitle { grid-area: title; margin-bottom: 5px; font-weight: 500; color: var(--slate-12); padding: 10px; font-size: 15px; } .ToastDescription { grid-area: description; margin: 0; color: var(--slate-11); font-size: 13px; line-height: 1.3; } .ToastAction { grid-area: action; } .help-block { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px } .search-field { position: relative; } .search-field input { border-color: transparent; border-radius: 20px; height: 2.5rem; width: 100%; padding: 5px 5px 5px 30px; } .search-field input:focus { outline: none; } .send-message { position: relative; } .send-message input { width: auto; } .send-message { } .send-message svg { position: absolute; right: 3px; bottom: -3px; left: auto !important; } .search-field svg { position: absolute; left: 3px; bottom: -3px; } .search-field svg { color: gray } table { margin: 25px 0; font-size: 0.9em; font-family: sans-serif; min-width: 400px; box-shadow: 0 0 20px rgba(0, 0, 0, 0.15); } th:first-child { border-top-left-radius: 10px; } th:last-child { border-top-right-radius: 10px; } table thead tr { font-size: 25px; background-color: var(--etherpad-color); color: #ffffff; text-align: left; } table tbody tr { border-bottom: 1px solid #dddddd; } table tr:nth-child(even) td { background-color: lightgray; } table tr td { padding: 12px 15px; } table tbody tr:nth-of-type(even) { background-color: #f3f3f3; } table tbody tr:last-of-type { border-bottom: 2px solid #009879; } table tbody tr.active-row { font-weight: bold; color: #009879; } .pad-pagination { display: flex; justify-content: center; gap: 10px; margin-top: 20px; } .pad-pagination button { display: flex; padding: 10px 20px; border-radius: 5px; border: none; color: black; cursor: pointer; } .pad-pagination button:disabled { background: transparent; color: lightgrey; cursor: not-allowed; } .pad-pagination span { align-self: center; } .pad-pagination > span { font-size: 20px; } .login-page .login-form .input-control input[type=text], .login-page .login-form .input-control input[type=email], .login-page .login-form .input-control input[type=password], .login-page .signup-form .input-control input[type=text], .login-page .signup-form .input-control input[type=email], .login-page .signup-form .input-control input[type=password], .login-page .forgot-form .input-control input[type=text], .login-page .forgot-form .input-control input[type=email], .login-page .forgot-form .input-control input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border-bottom: 2px solid #ccc; border-top: 0; border-left: 0; border-right: 0; -webkit-box-sizing: border-box; box-sizing: border-box; border-radius: 5px; font-size: 14px; color: #666; background-color: #f8f8f8; -webkit-transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } .icon-input { position: relative; } .icon-input svg { position: absolute; top: 50%; transform: translateY(-50%); right: 10px; color: #666; } .SwitchRoot { align-self: center; width: 60px; height: 30px; background-color: black; border-radius: 9999px; position: relative; box-shadow: 0 2px 10px var(--black-a7); -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .SwitchRoot:focus { box-shadow: 0 0 0 2px black; } .SwitchRoot[data-state='checked'] { background-color: var(--etherpad-color); } .SwitchThumb { display: block; width: 20px; height: 20px; background-color: white; border-radius: 9999px; box-shadow: 0 2px 2px var(--black-a7); transition: transform 100ms; transform: translateX(2px); will-change: transform; } .SwitchThumb[data-state='checked'] { transform: translateX(25px); } .Label { color: white; font-size: 15px; line-height: 1; } .message { position: relative; padding: 10px; border: 1px solid #e0e0e0; margin: 10px 20px 10px 10px; border-radius: 10px 0 10px 10px; background-color: var(--etherpad-color); color: white } .search-pads { text-align: center; } .search-pads-body tr td:last-child { display: flex; justify-content: center; } .manage-pads-header { display: flex; } /* Update banner — shown on every admin page when a new version is available. */ .update-banner { display: flex; align-items: center; gap: 8px; padding: 10px 14px; margin: 0 0 12px 0; background: #fff3cd; color: #664d03; border: 1px solid #ffe69c; border-radius: 4px; font-size: 14px; } .update-banner a { color: inherit; text-decoration: underline; font-weight: 500; } /* Update page layout. */ .update-page { padding: 16px 0; } .update-page h1 { margin-bottom: 16px; } .update-page dl { display: grid; grid-template-columns: max-content 1fr; gap: 6px 16px; margin: 0 0 24px; } .update-page dt { font-weight: 600; color: #555; } .update-page dd { margin: 0; } .update-page pre { background: #f6f8fa; border: 1px solid #d0d7de; border-radius: 4px; padding: 12px; font-size: 13px; max-height: 400px; overflow: auto; } /* ═══════════════════════════════════════════════════════════════════════════ SIDEBAR — new forest-green design ═══════════════════════════════════════════════════════════════════════════ */ .sidebar-top { display: flex; align-items: center; gap: 10px; padding: 16px 14px 14px; border-bottom: 1px solid rgba(255,255,255,.08); flex-shrink: 0; } .sidebar-burger { appearance: none; border: 0; width: 32px; height: 32px; border-radius: var(--r); background: transparent; color: rgba(255,255,255,.9); display: grid; place-items: center; cursor: pointer; flex-shrink: 0; transition: background .15s; } .sidebar-burger:hover { background: rgba(255,255,255,.1); } .sidebar-brand { display: flex; align-items: center; gap: 10px; overflow: hidden; } .sidebar-brand-mark { width: 32px; height: 32px; border-radius: var(--r); background: rgba(255,255,255,.12); color: #fff; display: grid; place-items: center; flex-shrink: 0; } .sidebar-brand-name { font-size: 17px; font-weight: 600; letter-spacing: -.01em; color: #fff; white-space: nowrap; } .sidebar-nav { display: flex; flex-direction: column; gap: 2px; padding: 12px 10px; flex: 1; overflow-y: auto; } .sidebar-nav .sidebar-nav-item, .sidebar-nav .sidebar-nav-item:link, .sidebar-nav .sidebar-nav-item:visited { position: relative; display: flex; align-items: center; gap: 12px; padding: 9px 12px; border-radius: var(--r); color: rgba(255,255,255,.55); font-size: 13.5px; font-weight: 500; text-decoration: none; transition: background .15s, color .15s; white-space: nowrap; overflow: hidden; } .sidebar-nav .sidebar-nav-item:hover { background: rgba(255,255,255,.08); color: #fff; text-decoration: none; } .sidebar-nav .sidebar-nav-item.is-active { background: rgba(255,255,255,.12); color: #fff; } .sidebar-nav .sidebar-nav-item.is-active::before { content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 0 3px 3px 0; background: var(--ep-accent-h); } .sidebar-nav-icon { display: grid; place-items: center; flex-shrink: 0; opacity: .85; } .sidebar-nav-item.is-active .sidebar-nav-icon { opacity: 1; } .sidebar-nav-label { overflow: hidden; text-overflow: ellipsis; } .sidebar-footer { padding: 14px 16px; border-top: 1px solid rgba(255,255,255,.08); font-size: 12px; flex-shrink: 0; } .sidebar-footer-row { display: flex; align-items: center; gap: 8px; color: rgba(255,255,255,.8); } .sidebar-status-dot { width: 7px; height: 7px; border-radius: 50%; background: #5EE3B5; box-shadow: 0 0 0 3px rgba(94,227,181,.2); flex-shrink: 0; } /* collapsed sidebar — icon-only at 64px */ #wrapper.closed .menu { width: 64px; left: 0; } #wrapper.closed .innerwrapper { margin-left: 64px; } #wrapper.closed .sidebar-top { justify-content: center; padding: 16px 0; } #wrapper.closed .sidebar-nav-item { justify-content: center; padding: 9px 0; } #wrapper.closed .sidebar-nav-icon { opacity: .85; } /* ═══════════════════════════════════════════════════════════════════════════ PLUGIN MANAGER PAGE (pm-* classes) ═══════════════════════════════════════════════════════════════════════════ */ .pm-page { padding: 8px 8px 40px; } .pm-banner { margin: 8px 0 16px; padding: 12px 16px; border-radius: 6px; border: 1px solid var(--ink-3, #cbd5e1); background: var(--surface-2, #f8fafc); font-size: .9rem; } .pm-banner-info { border-left: 4px solid var(--accent, #0ea5e9); } /* Header */ .pm-header { display: flex; justify-content: space-between; align-items: flex-end; gap: 24px; margin-bottom: 24px; } .pm-crumbs { font-size: 12px; color: var(--ink-3); display: flex; align-items: center; gap: 6px; margin-bottom: 4px; } .pm-crumbs-sep { color: var(--ink-4); } .pm-title { font-size: 26px; font-weight: 600; letter-spacing: -.015em; margin: 0 0 4px; color: var(--ink); line-height: 1.2; } .pm-subtitle { font-size: 13.5px; color: var(--ink-2); margin: 0; max-width: 60ch; } .pm-header-actions { display: flex; gap: 8px; flex-shrink: 0; } /* Buttons */ .pm-btn { appearance: none; border: 1px solid transparent; height: 32px; padding: 0 12px; border-radius: var(--r); font-size: 13px; font-weight: 500; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 6px; transition: all .15s; white-space: nowrap; text-decoration: none; font-family: inherit; } .pm-btn--sm { height: 28px; padding: 0 10px; font-size: 12px; } .pm-btn-primary { background: var(--ep-accent); color: #fff; } .pm-btn-primary:hover { background: var(--ep-accent-h); } .pm-btn-primary:active { background: var(--ep-accent-d); } a.pm-btn-primary:link, a.pm-btn-primary:visited { color: #fff; } .pm-btn-ghost { background: var(--panel); border-color: var(--line); color: var(--ink); } .pm-btn-ghost:hover { border-color: var(--ep-accent); color: var(--ep-accent-d); } /* Stats row */ .pm-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 24px; } .pm-stat { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 16px 18px; position: relative; overflow: hidden; } .pm-stat--primary { border-color: var(--ep-accent-tint2); background: linear-gradient(135deg, var(--ep-accent-tint) 0%, #fff 60%); } .pm-stat--primary .pm-stat-value { color: var(--ep-accent-d); } .pm-stat--warn { border-color: #FFE7BA; background: linear-gradient(135deg, #FFFBEB 0%, #fff 60%); } .pm-stat--warn .pm-stat-value { color: #B45309; } .pm-stat-label { font-size: 11.5px; color: var(--ink-3); text-transform: uppercase; letter-spacing: .04em; font-weight: 600; } .pm-stat-value { font-size: 30px; font-weight: 600; letter-spacing: -.02em; color: var(--ink); margin: 4px 0 2px; font-variant-numeric: tabular-nums; line-height: 1.1; } .pm-stat-value--sm { font-size: 18px; } .pm-stat-hint { font-size: 12px; color: var(--ink-3); } .pm-stat-action { appearance: none; border: 0; background: transparent; color: #B45309; font-size: 12px; font-weight: 600; padding: 0; margin-top: 6px; cursor: pointer; display: block; font-family: inherit; } .pm-stat-action:hover { text-decoration: underline; } /* Sections */ .pm-section { margin-bottom: 32px; } .pm-section-header { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; } .pm-section-header h2 { font-size: 17px; font-weight: 600; letter-spacing: -.01em; margin: 0; color: var(--ink); } .pm-count-badge { font-size: 11px; font-weight: 600; padding: 3px 8px; border-radius: 999px; background: var(--ep-accent-tint); color: var(--ep-accent-d); } .pm-spacer { flex: 1; } /* Installed list */ .pm-installed { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); overflow: hidden; } .pm-installed-row { display: grid; grid-template-columns: 36px 1fr auto; gap: 14px; align-items: center; padding: 13px 18px; border-bottom: 1px solid var(--line-2); transition: background .15s; } .pm-installed-row:last-child { border-bottom: 0; } .pm-installed-row:hover { background: var(--hover); } .pm-installed-icon { width: 36px; height: 36px; border-radius: var(--r); background: var(--ep-accent-tint); color: var(--ep-accent-d); display: grid; place-items: center; flex-shrink: 0; } .pm-installed-main { min-width: 0; } .pm-installed-title { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; } .pm-installed-desc { font-size: 12.5px; color: var(--ink-3); margin-top: 2px; } .pm-installed-actions { display: flex; gap: 6px; } /* Tags */ .pm-tag { display: inline-flex; align-items: center; font-size: 10.5px; font-weight: 600; padding: 2px 7px; border-radius: 4px; letter-spacing: .02em; text-transform: uppercase; white-space: nowrap; } .pm-tag--core { background: rgba(20,148,116,.12); color: var(--ep-accent-d); border: 1px solid rgba(20,148,116,.3); } .pm-tag--ver { background: var(--line-2); color: var(--ink-2); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; text-transform: none; letter-spacing: 0; font-weight: 500; } .pm-tag--popular { background: rgba(20,148,116,.12); color: var(--ep-accent-d); border: 1px solid rgba(20,148,116,.25); } /* Toolbar (search + sort) */ .pm-toolbar { display: flex; gap: 8px; align-items: center; } .pm-search { position: relative; display: flex; align-items: center; gap: 8px; width: 260px; height: 32px; padding: 0 10px; border-radius: var(--r); background: var(--panel); border: 1px solid var(--line); transition: border-color .15s, box-shadow .15s; } .pm-search:focus-within { border-color: var(--ep-accent); box-shadow: 0 0 0 2px rgba(20,148,116,.15); } .pm-search-icon { color: var(--ink-3); flex-shrink: 0; } .pm-search:focus-within .pm-search-icon { color: var(--ep-accent-d); } .pm-search-input { flex: 1; min-width: 0; border: 0; outline: 0; background: transparent; font-size: 13px; color: var(--ink); padding: 0; height: auto; font-weight: normal; box-shadow: none; } .pm-search-clear { appearance: none; border: 0; width: 18px; height: 18px; border-radius: 4px; background: rgba(0,0,0,.06); display: grid; place-items: center; cursor: pointer; color: var(--ink-3); flex-shrink: 0; padding: 0; } .pm-select { appearance: none; height: 32px; padding: 0 28px 0 10px; border-radius: var(--r); border: 1px solid var(--line); background: var(--panel); font-size: 13px; color: var(--ink); cursor: pointer; font-family: inherit; background-image: url("data:image/svg+xml;utf8,"); background-repeat: no-repeat; background-position: right 10px center; } .pm-select:hover { border-color: var(--ep-accent); } /* Mono name */ .pm-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; } /* Available table — all rules scoped under .pm-table-wrap to beat global table styles */ .pm-table-wrap { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); overflow-x: auto; } .pm-table-wrap table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; box-shadow: none; margin: 0; min-width: 0; font-family: inherit; } .pm-table-wrap table thead tr { font-size: 12px; background-color: #FAFBFA; color: var(--ink-2); } .pm-table-wrap table thead th { text-align: left; font-size: 12px; font-weight: 600; color: var(--ink-2); background: #FAFBFA; padding: 10px 14px; border-bottom: 1px solid var(--line); letter-spacing: .01em; border-radius: 0; } .pm-table-wrap table th:first-child { border-top-left-radius: 0; } .pm-table-wrap table th:last-child { border-top-right-radius: 0; } .pm-table-wrap table tbody tr { border-bottom: none; background-color: var(--panel); } .pm-table-wrap table tbody tr:nth-child(even), .pm-table-wrap table tbody tr:nth-of-type(even) { background-color: var(--panel); } .pm-table-wrap table tbody tr:last-of-type { border-bottom: none; } .pm-table-wrap table tbody td { padding: 13px 14px; border-bottom: 1px solid var(--line-2); vertical-align: middle; color: var(--ink); background: var(--panel); } .pm-table-wrap table tbody tr:last-child td { border-bottom: 0; } .pm-table-wrap table tr:nth-child(even) td { background-color: var(--panel); } .pm-table-wrap table tbody tr:hover td { background: var(--hover); } .pm-table-wrap .pm-cell-name { display: flex; gap: 10px; align-items: center; } .pm-table-wrap .pm-cell-icon { width: 26px; height: 26px; border-radius: var(--r); background: var(--ep-accent-tint); color: var(--ep-accent-d); display: grid; place-items: center; flex-shrink: 0; } .pm-table-wrap .pm-cell-title { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } .pm-table-wrap .pm-cell-desc { color: var(--ink-2); } .pm-table-wrap .pm-num { font-variant-numeric: tabular-nums; text-align: right; color: var(--ink-2); } .pm-table-wrap .pm-cell-date { color: var(--ink-3); font-size: 12.5px; font-variant-numeric: tabular-nums; } .pm-table-wrap .pm-cell-action { text-align: right; } /* Empty state */ .pm-empty { text-align: center; padding: 56px 20px; background: var(--panel); border: 1px dashed var(--line); border-radius: var(--r-lg); } .pm-empty-icon { font-size: 44px; color: var(--ink-4); margin-bottom: 10px; } .pm-empty-title { font-size: 15px; font-weight: 500; color: var(--ink); } /* Responsive */ @media (max-width: 1100px) { .pm-stats { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 760px) { .pm-page { padding: 16px 16px 40px; } .pm-header { flex-direction: column; align-items: flex-start; } .pm-stats { grid-template-columns: 1fr 1fr; } .pm-toolbar { flex-wrap: wrap; } .pm-search { width: 100%; } } /* ═══════════════════════════════════════════════════════════════════════════ Pads page — pm-* extensions ═══════════════════════════════════════════════════════════════════════════ */ /* Filter chips */ .pm-chips { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 0 12px; } .pm-chip { height: 28px; padding: 0 12px; border-radius: 14px; border: 1px solid var(--line-1); background: transparent; color: var(--ink-2); font-size: 12px; font-weight: 500; cursor: pointer; transition: background .15s, color .15s, border-color .15s; } .pm-chip:hover { background: var(--ep-accent-tint); border-color: var(--ep-accent); color: var(--ep-accent); } .pm-chip.is-on { background: var(--ep-accent); border-color: var(--ep-accent); color: #fff; } /* Bulk action bar */ .pm-bulk { display: flex; align-items: center; gap: 8px; padding: 8px 14px; margin-bottom: 8px; background: var(--ep-accent-tint); border: 1px solid color-mix(in srgb, var(--ep-accent) 30%, transparent); border-radius: 8px; font-size: 13px; } .pm-bulk-count { font-weight: 600; color: var(--ep-accent); } /* Danger button */ .pm-btn-danger { background: transparent; color: #c0392b; border: 1px solid #f5c0bb; } .pm-btn-danger:hover { background: #fdf2f2; border-color: #c0392b; } /* Icon-only button */ .pm-btn-icon { width: 30px; height: 30px; padding: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 6px; border: 1px solid var(--line-1); background: transparent; color: var(--ink-2); cursor: pointer; transition: background .15s, color .15s; } .pm-btn-icon:hover { background: var(--panel); color: var(--ink-1); } .pm-btn-icon--danger:hover { background: #fdf2f2; color: #c0392b; border-color: #f5c0bb; } /* Custom checkbox */ .pm-check { display: inline-flex; align-items: center; justify-content: center; cursor: pointer; } .pm-check input[type="checkbox"] { width: 15px; height: 15px; accent-color: var(--ep-accent); cursor: pointer; } /* Pad name cell */ .pm-pad-name { display: flex; align-items: center; gap: 10px; } .pm-pad-mark { flex-shrink: 0; width: 28px; height: 28px; border-radius: 6px; background: color-mix(in srgb, var(--ep-accent) 15%, transparent); color: var(--ep-accent); display: flex; align-items: center; justify-content: center; } .pm-pad-mark[data-empty] { background: var(--panel); color: var(--ink-3); } .pm-pad-title { font-size: 13px; font-weight: 500; color: var(--ink-1); font-family: 'JetBrains Mono', 'Fira Mono', monospace; } .pm-pad-sub { font-size: 11px; color: var(--ink-3); margin-top: 1px; } /* Users pill */ .pm-users-pill { display: inline-flex; align-items: center; gap: 5px; padding: 2px 8px; border-radius: 10px; background: color-mix(in srgb, var(--ep-accent) 12%, transparent); color: var(--ep-accent); font-size: 12px; font-weight: 600; } .pm-users-pill.is-muted { background: var(--panel); color: var(--ink-3); font-weight: 400; } .pm-users-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--ep-accent); animation: pm-pulse 2s ease-in-out infinite; } @keyframes pm-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .4; } } /* Timestamp cell */ .pm-time { display: flex; flex-direction: column; gap: 2px; } .pm-time-rel { font-size: 13px; color: var(--ink-1); } .pm-time-abs { font-size: 11px; color: var(--ink-3); } /* Row actions */ .pm-row-actions { display: flex; align-items: center; gap: 6px; justify-content: flex-end; } /* Selected / empty row tinting */ .pm-table-wrap table tbody tr.is-sel td { background: color-mix(in srgb, var(--ep-accent) 6%, transparent) !important; } .pm-table-wrap table tbody tr.is-empty .pm-pad-title { color: var(--ink-3); } /* Pagination */ .pm-pagination { display: flex; align-items: center; gap: 12px; padding: 16px 0 0; justify-content: center; } .pm-pagination-info { font-size: 13px; color: var(--ink-2); min-width: 60px; text-align: center; } /* ═══════════════════════════════════════════════════════════════════════════ Help page (Hilfestellung) — pm-* extensions ═══════════════════════════════════════════════════════════════════════════ */ /* Version hero block */ .pm-help-version { display: grid; grid-template-columns: 280px 1fr; gap: 24px; background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 22px 24px; margin-bottom: 24px; position: relative; overflow: hidden; } .pm-help-version::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: linear-gradient(180deg, var(--ep-accent) 0%, var(--ep-accent-d) 100%); } .pm-hv-main { display: flex; flex-direction: column; gap: 4px; } .pm-hv-lbl { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--ink-3); } .pm-hv-num { font-size: 42px; font-weight: 600; line-height: 1.05; letter-spacing: -.025em; color: var(--ink); font-variant-numeric: tabular-nums; margin: 4px 0 8px; } .pm-hv-status { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 500; padding: 5px 10px; border-radius: 999px; width: fit-content; } .pm-hv-status.is-ok { background: var(--ep-accent-tint); color: var(--ep-accent-d); } .pm-hv-status.is-warn { background: #FEF3C7; color: #92400E; } .pm-hv-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex-shrink: 0; } .pm-hv-meta { display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px; align-content: center; border-left: 1px solid var(--line); padding-left: 24px; } .pm-hv-cell-lbl { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); margin-bottom: 4px; } .pm-hv-cell-val { font-size: 18px; font-weight: 600; line-height: 1.2; color: var(--ink); display: inline-flex; align-items: center; gap: 6px; font-variant-numeric: tabular-nums; } .pm-mono { font-family: ui-monospace, 'JetBrains Mono', Consolas, monospace; font-size: 14px; } .pm-mini-btn { appearance: none; border: 0; background: var(--line-2); color: var(--ink-3); border-radius: 4px; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: background .15s, color .15s; } .pm-mini-btn:hover { background: var(--ep-accent-tint); color: var(--ep-accent-d); } /* Plugins + Parts two-column grid */ .pm-help-grid { display: grid; grid-template-columns: 1fr 2fr; gap: 16px; align-items: start; } .pm-help-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 18px 20px; } .pm-sec-tight { margin-bottom: 14px; padding-bottom: 0; border-bottom: none; } .pm-sec-tight h2 { font-size: 14px; } /* Tag cloud */ .pm-tag-cloud { display: flex; flex-wrap: wrap; gap: 6px; } /* Pills */ .pm-pill { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 500; padding: 5px 10px; border-radius: 6px; background: var(--line-2); color: var(--ink-2); border: 1px solid transparent; transition: background .15s, color .15s, border-color .15s; } .pm-pill:hover { background: var(--ep-accent-tint); color: var(--ep-accent-d); border-color: var(--ep-accent-tint2); } .pm-pill-mono { font-family: ui-monospace, 'JetBrains Mono', Consolas, monospace; font-size: 11.5px; } .pm-pill-sm { padding: 3px 8px; font-size: 11px; } .pm-pill-ico { width: 14px; height: 14px; display: grid; place-items: center; border-radius: 3px; background: var(--ep-accent); color: #fff; flex-shrink: 0; } .pm-pill-ns { color: var(--ink-3); } .pm-pill-sep { color: var(--ink-4); margin: 0 1px; } .pm-pill:hover .pm-pill-ns { color: var(--ep-accent-d); opacity: .7; } /* Server/Client tab switcher */ .pm-tabs { display: inline-flex; background: var(--line-2); border-radius: var(--r); padding: 3px; gap: 2px; } .pm-tab { appearance: none; border: 0; background: transparent; height: 26px; padding: 0 12px; border-radius: 4px; font-size: 12.5px; font-weight: 500; color: var(--ink-2); cursor: pointer; display: inline-flex; align-items: center; gap: 6px; transition: background .15s, color .15s, box-shadow .15s; } .pm-tab:hover { color: var(--ink); } .pm-tab.is-on { background: var(--panel); color: var(--ep-accent-d); box-shadow: 0 1px 4px rgba(0,0,0,.1); } .pm-tab-n { font-size: 10.5px; font-weight: 600; padding: 1px 5px; border-radius: 999px; background: rgba(0,0,0,.06); color: var(--ink-3); } .pm-tab.is-on .pm-tab-n { background: var(--ep-accent-tint); color: var(--ep-accent-d); } /* Hooks list */ .pm-hooks { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); overflow: hidden; } .pm-hook { padding: 14px 20px; border-bottom: 1px solid var(--line-2); display: grid; grid-template-columns: 220px 1fr; gap: 18px; align-items: start; } .pm-hook:last-child { border-bottom: 0; } .pm-hook:hover { background: var(--hover); } .pm-hook-h { display: flex; flex-direction: column; gap: 3px; } .pm-hook-name { font-family: ui-monospace, 'JetBrains Mono', Consolas, monospace; font-size: 13.5px; font-weight: 600; color: var(--ink); word-break: break-all; } .pm-hook-count { font-size: 11px; color: var(--ink-3); } .pm-hook-parts { display: flex; flex-wrap: wrap; gap: 4px; } @media (max-width: 1100px) { .pm-help-version { grid-template-columns: 1fr; } .pm-hv-meta { border-left: 0; padding-left: 0; padding-top: 16px; border-top: 1px solid var(--line); grid-template-columns: repeat(3, 1fr); } .pm-help-grid { grid-template-columns: 1fr; } .pm-hook { grid-template-columns: 1fr; } }