mirror of
https://github.com/monapdx/obsidian-skeletal.git
synced 2026-07-22 08:32:09 +00:00
Add local deployment workflow and docs: .env.local.example, scripts/deploy-local.mjs, deploy:local npm script, screenshots, and CHANGELOG.md. Update README with deployment, screenshots, usage, and development instructions. Update .gitignore to exclude local env, logs, and build outputs. Polish UI and layout: refactor TemplateBrowserModal structure and update styles.css for responsive modal/pane scrolling. Small metadata changes: manifest/package.json author/description and LICENSE copyright.
313 lines
6 KiB
CSS
313 lines
6 KiB
CSS
/* Modal shell: stay within Obsidian workspace; no hard-coded screen heights */
|
|
.modal.skeletal-modal-dialog {
|
|
display: flex;
|
|
flex-direction: column;
|
|
width: min(960px, 96vw);
|
|
max-width: 96vw;
|
|
height: min(820px, calc(100vh - 2rem));
|
|
max-height: calc(100vh - 2rem);
|
|
max-height: calc(100dvh - 2rem);
|
|
margin-top: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.skeletal-modal-dialog .modal-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex: 1 1 auto;
|
|
min-height: 0;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
.skeletal-modal {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.75rem;
|
|
flex: 1 1 auto;
|
|
min-height: 0;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.skeletal-modal-header {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.75rem;
|
|
flex: 0 0 auto;
|
|
min-width: 0;
|
|
}
|
|
|
|
.skeletal-modal-title {
|
|
margin: 0;
|
|
}
|
|
|
|
.skeletal-search-row {
|
|
display: flex;
|
|
}
|
|
|
|
.skeletal-search-input {
|
|
width: 100%;
|
|
padding: 0.5rem 0.75rem;
|
|
border-radius: 6px;
|
|
border: 1px solid var(--background-modifier-border);
|
|
background: var(--background-primary);
|
|
color: var(--text-normal);
|
|
}
|
|
|
|
.skeletal-category-nav {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 0.35rem;
|
|
max-height: 4.5rem;
|
|
overflow: auto;
|
|
}
|
|
|
|
.skeletal-category-btn {
|
|
border: 1px solid var(--background-modifier-border);
|
|
background: var(--background-secondary);
|
|
color: var(--text-muted);
|
|
border-radius: 999px;
|
|
padding: 0.2rem 0.65rem;
|
|
cursor: pointer;
|
|
font-size: var(--font-ui-small);
|
|
}
|
|
|
|
.skeletal-category-btn.is-active,
|
|
.skeletal-category-btn:hover {
|
|
color: var(--text-normal);
|
|
background: var(--background-modifier-hover);
|
|
border-color: var(--interactive-accent);
|
|
}
|
|
|
|
/* Middle region fills leftover space; panes scroll independently */
|
|
.skeletal-modal-body {
|
|
display: grid;
|
|
grid-template-columns: minmax(180px, 280px) minmax(0, 1fr);
|
|
gap: 0.75rem;
|
|
flex: 1 1 auto;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.skeletal-pane {
|
|
min-height: 0;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
border: 1px solid var(--background-modifier-border);
|
|
border-radius: 8px;
|
|
background: var(--background-primary);
|
|
}
|
|
|
|
.skeletal-pane-list {
|
|
padding: 0.35rem;
|
|
overflow: auto;
|
|
}
|
|
|
|
.skeletal-pane-detail {
|
|
padding: 0.75rem;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.75rem;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* Controls scroll; preview stays pinned below them inside the detail pane */
|
|
.skeletal-detail-scroll {
|
|
flex: 1 1 auto;
|
|
min-height: 0;
|
|
overflow: auto;
|
|
padding-bottom: 0.25rem;
|
|
}
|
|
|
|
.skeletal-preview-section {
|
|
flex: 0 0 auto;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.35rem;
|
|
min-height: 0;
|
|
border-top: 1px solid var(--background-modifier-border);
|
|
padding-top: 0.65rem;
|
|
}
|
|
|
|
.skeletal-template-item {
|
|
padding: 0.55rem 0.65rem;
|
|
border-radius: 6px;
|
|
cursor: pointer;
|
|
border: 1px solid transparent;
|
|
}
|
|
|
|
.skeletal-template-item:hover,
|
|
.skeletal-template-item:focus-visible {
|
|
background: var(--background-modifier-hover);
|
|
outline: none;
|
|
}
|
|
|
|
.skeletal-template-item.is-selected {
|
|
background: var(--background-modifier-hover);
|
|
border-color: var(--interactive-accent);
|
|
}
|
|
|
|
.skeletal-template-item-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.skeletal-template-item-name {
|
|
font-weight: 600;
|
|
color: var(--text-normal);
|
|
}
|
|
|
|
.skeletal-template-item-category {
|
|
font-size: var(--font-ui-smaller);
|
|
color: var(--text-muted);
|
|
text-transform: capitalize;
|
|
margin-top: 0.1rem;
|
|
}
|
|
|
|
.skeletal-template-item-desc {
|
|
font-size: var(--font-ui-small);
|
|
color: var(--text-muted);
|
|
margin-top: 0.25rem;
|
|
}
|
|
|
|
.skeletal-favorite-btn {
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
padding: 0 0.2rem;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
.skeletal-favorite-btn.is-favorite {
|
|
color: var(--text-accent);
|
|
}
|
|
|
|
.skeletal-detail-title {
|
|
margin: 0 0 0.25rem;
|
|
}
|
|
|
|
.skeletal-detail-desc {
|
|
color: var(--text-muted);
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.skeletal-controls .setting-item {
|
|
border-top: none;
|
|
padding: 0.45rem 0;
|
|
}
|
|
|
|
.skeletal-textarea {
|
|
width: 100%;
|
|
min-height: 4.5rem;
|
|
}
|
|
|
|
.skeletal-char-input {
|
|
width: 3.5rem !important;
|
|
}
|
|
|
|
.skeletal-preview-toolbar {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 0.35rem;
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
.skeletal-preview-tab {
|
|
border: 1px solid var(--background-modifier-border);
|
|
background: var(--background-secondary);
|
|
color: var(--text-muted);
|
|
border-radius: 6px;
|
|
padding: 0.25rem 0.6rem;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.skeletal-preview-tab.is-active {
|
|
color: var(--text-normal);
|
|
border-color: var(--interactive-accent);
|
|
}
|
|
|
|
.skeletal-preview-host,
|
|
.skeletal-preview {
|
|
min-height: 7rem;
|
|
max-height: min(12rem, 22vh);
|
|
overflow: auto;
|
|
border: 1px solid var(--background-modifier-border);
|
|
border-radius: 6px;
|
|
padding: 0.65rem;
|
|
background: var(--background-secondary);
|
|
}
|
|
|
|
.skeletal-preview-raw {
|
|
margin: 0;
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
font-family: var(--font-monospace);
|
|
font-size: var(--font-ui-small);
|
|
}
|
|
|
|
/* Action bar stays outside the scroll region; never overlays content */
|
|
.skeletal-actions {
|
|
flex: 0 0 auto;
|
|
border-top: 1px solid var(--background-modifier-border);
|
|
padding-top: 0.5rem;
|
|
padding-bottom: 0.15rem;
|
|
background: var(--background-primary);
|
|
z-index: 1;
|
|
}
|
|
|
|
.skeletal-actions .setting-item {
|
|
border: none;
|
|
padding: 0.25rem 0;
|
|
margin: 0;
|
|
}
|
|
|
|
.skeletal-actions .setting-item-control {
|
|
flex-wrap: wrap;
|
|
gap: 0.35rem;
|
|
}
|
|
|
|
.skeletal-empty {
|
|
color: var(--text-muted);
|
|
padding: 0.75rem;
|
|
}
|
|
|
|
@media (max-width: 720px) {
|
|
.modal.skeletal-modal-dialog {
|
|
width: min(960px, 96vw);
|
|
height: min(920px, calc(100vh - 1rem));
|
|
max-height: calc(100vh - 1rem);
|
|
max-height: calc(100dvh - 1rem);
|
|
}
|
|
|
|
.skeletal-modal-body {
|
|
grid-template-columns: 1fr;
|
|
grid-template-rows: minmax(7rem, 28%) minmax(0, 1fr);
|
|
}
|
|
|
|
.skeletal-preview-host,
|
|
.skeletal-preview {
|
|
max-height: min(10rem, 20vh);
|
|
}
|
|
}
|
|
|
|
@media (max-height: 700px) {
|
|
.skeletal-modal {
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.skeletal-pane-detail {
|
|
gap: 0.5rem;
|
|
padding: 0.5rem;
|
|
}
|
|
|
|
.skeletal-preview-host,
|
|
.skeletal-preview {
|
|
min-height: 5rem;
|
|
max-height: min(8rem, 18vh);
|
|
}
|
|
}
|