Restaurado CUARTO
4
.obsidian/appearance.json
vendored
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"theme": "moonstone",
|
||||
"accentColor": "#5f78f1",
|
||||
"accentColor": "#865ff1",
|
||||
"enabledCssSnippets": [
|
||||
"nota",
|
||||
"warning"
|
||||
],
|
||||
"cssTheme": ""
|
||||
"cssTheme": "Adwaita"
|
||||
}
|
||||
2
.obsidian/bookmarks.json
vendored
@@ -3,7 +3,7 @@
|
||||
{
|
||||
"type": "file",
|
||||
"ctime": 1727683811390,
|
||||
"path": "SEGUNDO/DSD ✅/Teoría_2324.md",
|
||||
"path": "SEGUNDO/DSD/Teoría_2324.md",
|
||||
"title": "APUNTES"
|
||||
}
|
||||
]
|
||||
|
||||
7
.obsidian/themes/Adwaita/manifest.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "Adwaita",
|
||||
"version": "0.5.0",
|
||||
"minAppVersion": "1.0.0",
|
||||
"author": "@birneee",
|
||||
"authorUrl": "https://github.com/birneee"
|
||||
}
|
||||
744
.obsidian/themes/Adwaita/theme.css
vendored
Normal file
@@ -0,0 +1,744 @@
|
||||
/* This file is generated; DO NOT EDIT. */
|
||||
/* @settings
|
||||
|
||||
name: Adwaita
|
||||
id: com-github-birneee-obsidian-adwaita
|
||||
settings:
|
||||
-
|
||||
title: Window Buttons
|
||||
description: Style of minimize, maximize and close window buttons
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: adwaita-mod
|
||||
title: Enable
|
||||
description: Whether to use the Adwaita style window buttons
|
||||
type: class-select
|
||||
default: adwaita-mod-linux-only
|
||||
allowEmpty: false
|
||||
options:
|
||||
-
|
||||
label: Always
|
||||
value: adwaita-mod-always
|
||||
-
|
||||
label: Linux Only
|
||||
value: adwaita-mod-linux-only
|
||||
-
|
||||
label: Never
|
||||
value: adwaita-mod-never
|
||||
-
|
||||
id: adwaita-mod-scale
|
||||
title: Scale
|
||||
description:
|
||||
type: variable-number
|
||||
default: 1
|
||||
-
|
||||
id: adwaita-mod-right-margin
|
||||
title: Right Margin
|
||||
type: variable-number
|
||||
default: 8
|
||||
format: px
|
||||
-
|
||||
id: adwaita-window-button-minimize-hide
|
||||
title: Hide minimize button
|
||||
type: class-toggle
|
||||
-
|
||||
id: adwaita-window-button-maximize-hide
|
||||
title: Hide maximize button
|
||||
type: class-toggle
|
||||
-
|
||||
id: adwaita-window-button-close-hide
|
||||
title: Hide close button
|
||||
type: class-toggle
|
||||
|
||||
-
|
||||
title: Tabs
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: adwaita-tabs
|
||||
title: Enable
|
||||
description: Whether to use the Adwaita style tabs
|
||||
type: class-select
|
||||
default: adwaita-tabs-linux-only
|
||||
allowEmpty: false
|
||||
options:
|
||||
-
|
||||
label: Always
|
||||
value: adwaita-tabs-always
|
||||
-
|
||||
label: Linux Only
|
||||
value: adwaita-tabs-linux-only
|
||||
-
|
||||
label: Never
|
||||
value: adwaita-tabs-never
|
||||
-
|
||||
id: adwaita-tabs-short
|
||||
title: Short
|
||||
type: class-toggle
|
||||
|
||||
-
|
||||
title: Colors
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: adwaita-colors
|
||||
title: Enable
|
||||
description: Whether to use the Adwaita colors
|
||||
type: class-select
|
||||
default: adwaita-colors-linux-only
|
||||
allowEmpty: false
|
||||
options:
|
||||
-
|
||||
label: Always
|
||||
value: adwaita-colors-always
|
||||
-
|
||||
label: Linux Only
|
||||
value: adwaita-colors-linux-only
|
||||
-
|
||||
label: Never
|
||||
value: adwaita-colors-never
|
||||
|
||||
-
|
||||
title: Font
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: adwaita-font
|
||||
title: Enable
|
||||
description: Whether to use the Cantarell font (must be installed on system)
|
||||
type: class-select
|
||||
default: adwaita-font-linux-only
|
||||
allowEmpty: false
|
||||
options:
|
||||
-
|
||||
label: Always
|
||||
value: adwaita-font-always
|
||||
-
|
||||
label: Linux Only
|
||||
value: adwaita-font-linux-only
|
||||
-
|
||||
label: Never
|
||||
value: adwaita-font-never
|
||||
|
||||
-
|
||||
title: Icons
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: adwaita-icon
|
||||
title: Enable
|
||||
description: Whether to use the Adwaita icons
|
||||
type: class-select
|
||||
default: adwaita-icons-linux-only
|
||||
allowEmpty: false
|
||||
options:
|
||||
-
|
||||
label: Always
|
||||
value: adwaita-icons-always
|
||||
-
|
||||
label: Linux Only
|
||||
value: adwaita-icons-linux-only
|
||||
-
|
||||
label: Never
|
||||
value: adwaita-icons-never
|
||||
*/
|
||||
:root {
|
||||
--adwaita-mod-scale: 1;
|
||||
--adwaita-mod-right-margin: 8px;
|
||||
/* TODO window radius */ }
|
||||
|
||||
:root {
|
||||
--adwaita-icon-folder-saved-search-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDYuNjA1NDY5IDAuMDU4NTkzOCBjIC0zLjU3ODEyNSAwIC02LjUgMi45MjE4NzUyIC02LjUgNi41MDAwMDAyIHMgMi45MjE4NzUgNi40OTYwOTQgNi41IDYuNDk2MDk0IGMgMS40Mjk2ODcgMCAyLjc1MzkwNiAtMC40NjQ4NDQgMy44MjgxMjUgLTEuMjUzOTA3IGwgMi45NzI2NTYgMi45NzI2NTcgYyAwLjk1NzAzMSAwLjk0MTQwNiAyLjM2MzI4MSAtMC40OTYwOTQgMS40MDYyNSAtMS40Mzc1IGwgLTIuOTU3MDMxIC0yLjk1NzAzMiBjIDAuNzgxMjUgLTEuMDc0MjE4IDEuMjUgLTIuMzk0NTMxIDEuMjUgLTMuODIwMzEyIGMgMCAtMy41NzgxMjUgLTIuOTI1NzgxIC02LjUwMDAwMDIgLTYuNSAtNi41MDAwMDAyIHogbSAwIDIuMDAwMDAwMiBjIDIuNDk2MDkzIDAgNC41IDIuMDAzOTA2IDQuNSA0LjUgcyAtMi4wMDM5MDcgNC40OTYwOTQgLTQuNSA0LjQ5NjA5NCBjIC0yLjUgMCAtNC41IC0yIC00LjUgLTQuNDk2MDk0IHMgMiAtNC41IDQuNSAtNC41IHogbSAwIDAiIGZpbGw9IiMyZTM0MzYiLz4KPC9zdmc+Cg==");
|
||||
--adwaita-icon-folder-visiting-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDMgMSBjIC0xLjY0NDUzMSAwIC0zIDEuMzU1NDY5IC0zIDMgdiA4IGMgMCAxLjY0NDUzMSAxLjM1NTQ2OSAzIDMgMyBoIDEwIGMgMS42NDQ1MzEgMCAzIC0xLjM1NTQ2OSAzIC0zIHYgLTYgYyAwIC0xLjY0NDUzMSAtMS4zNTU0NjkgLTMgLTMgLTMgaCAtMy41ODU5MzggbCAtMS43MDcwMzEgLTEuNzA3MDMxIGMgLTAuMTg3NSAtMC4xODc1IC0wLjQ0MTQwNiAtMC4yOTI5NjkgLTAuNzA3MDMxIC0wLjI5Mjk2OSB6IG0gMCAyIGggMy41ODU5MzggbCAxLjcwNzAzMSAxLjcwNzAzMSBjIDAuMTg3NSAwLjE4NzUgMC40NDE0MDYgMC4yOTI5NjkgMC43MDcwMzEgMC4yOTI5NjkgaCA0IGMgMC41NjI1IDAgMSAwLjQzNzUgMSAxIHYgNiBjIDAgMC41NjY0MDYgLTAuNDM3NSAxIC0xIDEgaCAtMTAgYyAtMC41NjI1IDAgLTEgLTAuNDMzNTk0IC0xIC0xIHYgLTggYyAwIC0wLjU2MjUgMC40Mzc1IC0xIDEgLTEgeiBtIDAgMCIgZmlsbD0iIzJlMzQzNiIvPgo8L3N2Zz4K");
|
||||
--adwaita-icon-go-down-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDEgNSBjIDAgLTAuMjY1NjI1IDAuMTA1NDY5IC0wLjUxOTUzMSAwLjI5Mjk2OSAtMC43MDcwMzEgYyAwLjM5MDYyNSAtMC4zOTA2MjUgMS4wMjM0MzcgLTAuMzkwNjI1IDEuNDE0MDYyIDAgbCA1LjI5Mjk2OSA1LjI5Mjk2OSBsIDUuMjkyOTY5IC01LjI5Mjk2OSBjIDAuMzkwNjI1IC0wLjM5MDYyNSAxLjAyMzQzNyAtMC4zOTA2MjUgMS40MTQwNjIgMCBjIDAuMTg3NSAwLjE4NzUgMC4yOTI5NjkgMC40NDE0MDYgMC4yOTI5NjkgMC43MDcwMzEgcyAtMC4xMDU0NjkgMC41MTk1MzEgLTAuMjkyOTY5IDAuNzA3MDMxIGwgLTYgNiBjIC0wLjM5MDYyNSAwLjM5MDYyNSAtMS4wMjM0MzcgMC4zOTA2MjUgLTEuNDE0MDYyIDAgbCAtNiAtNiBjIC0wLjE4NzUgLTAuMTg3NSAtMC4yOTI5NjkgLTAuNDQxNDA2IC0wLjI5Mjk2OSAtMC43MDcwMzEgeiBtIDAgMCIgZmlsbD0iIzJlMzQzNiIvPgo8L3N2Zz4K");
|
||||
--adwaita-icon-sidebar-show-right-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBmaWxsPSIjMmUzNDM2Ij4KICAgICAgICA8cGF0aCBkPSJtIDkuNSAxNCB2IC0xMiBoIDUgdiAxMiB6IG0gMCAwIiBmaWxsLW9wYWNpdHk9IjAuMzQ5MDIiLz4KICAgICAgICA8cGF0aCBkPSJtIDEzIDEgYyAxLjY0NDUzMSAwIDMgMS4zNTU0NjkgMyAzIHYgOCBjIDAgMS42NDQ1MzEgLTEuMzU1NDY5IDMgLTMgMyBoIC0xMCBjIC0xLjY0NDUzMSAwIC0zIC0xLjM1NTQ2OSAtMyAtMyB2IC04IGMgMCAtMS42NDQ1MzEgMS4zNTU0NjkgLTMgMyAtMyB6IG0gMCAyIGggLTEwIGMgLTAuNTcwMzEyIDAgLTEgMC40Mjk2ODggLTEgMSB2IDggYyAwIDAuNTcwMzEyIDAuNDI5Njg4IDEgMSAxIGggMTAgYyAwLjU3MDMxMiAwIDEgLTAuNDI5Njg4IDEgLTEgdiAtOCBjIDAgLTAuNTcwMzEyIC0wLjQyOTY4OCAtMSAtMSAtMSB6IG0gMCAwIi8+CiAgICAgICAgPHBhdGggZD0ibSAxMCAyIGggLTEgdiAxMiBoIDEgeiBtIDAgMCIvPgogICAgPC9nPgo8L3N2Zz4K");
|
||||
--adwaita-icon-sidebar-show-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBmaWxsPSIjMmUzNDM2Ij4KICAgICAgICA8cGF0aCBkPSJtIDYuNSAxNCB2IC0xMiBoIC01IHYgMTIgeiBtIDAgMCIgZmlsbC1vcGFjaXR5PSIwLjM0OTAyIi8+CiAgICAgICAgPHBhdGggZD0ibSAzIDEgYyAtMS42NDQ1MzEgMCAtMyAxLjM1NTQ2OSAtMyAzIHYgOCBjIDAgMS42NDQ1MzEgMS4zNTU0NjkgMyAzIDMgaCAxMCBjIDEuNjQ0NTMxIDAgMyAtMS4zNTU0NjkgMyAtMyB2IC04IGMgMCAtMS42NDQ1MzEgLTEuMzU1NDY5IC0zIC0zIC0zIHogbSAwIDIgaCAxMCBjIDAuNTcwMzEyIDAgMSAwLjQyOTY4OCAxIDEgdiA4IGMgMCAwLjU3MDMxMiAtMC40Mjk2ODggMSAtMSAxIGggLTEwIGMgLTAuNTcwMzEyIDAgLTEgLTAuNDI5Njg4IC0xIC0xIHYgLTggYyAwIC0wLjU3MDMxMiAwLjQyOTY4OCAtMSAxIC0xIHogbSAwIDAiLz4KICAgICAgICA8cGF0aCBkPSJtIDYgMiBoIDEgdiAxMiBoIC0xIHogbSAwIDAiLz4KICAgIDwvZz4KPC9zdmc+Cg==");
|
||||
--adwaita-icon-tab-new-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBmaWxsPSIjMmUzNDM2Ij4KICAgICAgICA8cGF0aCBkPSJtIDMgMCBjIC0xLjY0NDUzMSAwIC0zIDEuMzU1NDY5IC0zIDMgdiAxMCBjIDAgMS42NDQ1MzEgMS4zNTU0NjkgMyAzIDMgaCAxMCBjIDEuNjQ0NTMxIDAgMyAtMS4zNTU0NjkgMyAtMyB2IC0xMCBjIDAgLTEuNjQ0NTMxIC0xLjM1NTQ2OSAtMyAtMyAtMyB6IG0gMCAyIGggMTAgYyAwLjU3MDMxMiAwIDEgMC40Mjk2ODggMSAxIHYgMTAgYyAwIDAuNTcwMzEyIC0wLjQyOTY4OCAxIC0xIDEgaCAtMTAgYyAtMC41NzAzMTIgMCAtMSAtMC40Mjk2ODggLTEgLTEgdiAtMTAgYyAwIC0wLjU3MDMxMiAwLjQyOTY4OCAtMSAxIC0xIHogbSAwIDAiLz4KICAgICAgICA8cGF0aCBkPSJtIDQgNyBoIDggdiAyIGggLTggeiBtIDAgMCIvPgogICAgICAgIDxwYXRoIGQ9Im0gOSA0IHYgOCBoIC0yIHYgLTggeiBtIDAgMCIvPgogICAgPC9nPgo8L3N2Zz4K");
|
||||
--adwaita-icon-view-more-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDcuOTk2MDk0IDAgYyAtMS4xMDU0NjkgMCAtMiAwLjg5NDUzMSAtMiAyIHMgMC44OTQ1MzEgMiAyIDIgYyAxLjEwMTU2MiAwIDIgLTAuODk0NTMxIDIgLTIgcyAtMC44OTg0MzggLTIgLTIgLTIgeiBtIDAgNiBjIC0xLjEwNTQ2OSAwIC0yIDAuODk0NTMxIC0yIDIgcyAwLjg5NDUzMSAyIDIgMiBjIDEuMTAxNTYyIDAgMiAtMC44OTQ1MzEgMiAtMiBzIC0wLjg5ODQzOCAtMiAtMiAtMiB6IG0gMCA2IGMgLTEuMTA1NDY5IDAgLTIgMC44OTQ1MzEgLTIgMiBzIDAuODk0NTMxIDIgMiAyIGMgMS4xMDE1NjIgMCAyIC0wLjg5NDUzMSAyIC0yIHMgLTAuODk4NDM4IC0yIC0yIC0yIHogbSAwIDAiIGZpbGw9IiMyZTM0MzYiLz4KPC9zdmc+Cg==");
|
||||
--adwaita-icon-window-close-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDQgNCBoIDEgaCAwLjAzMTI1IGMgMC4yNTM5MDYgMC4wMTE3MTkgMC41MTE3MTkgMC4xMjg5MDYgMC42ODc1IDAuMzEyNSBsIDIuMjgxMjUgMi4yODEyNSBsIDIuMzEyNSAtMi4yODEyNSBjIDAuMjY1NjI1IC0wLjIzMDQ2OSAwLjQ0NTMxMiAtMC4zMDQ2ODggMC42ODc1IC0wLjMxMjUgaCAxIHYgMSBjIDAgMC4yODUxNTYgLTAuMDM1MTU2IDAuNTUwNzgxIC0wLjI1IDAuNzUgbCAtMi4yODEyNSAyLjI4MTI1IGwgMi4yNSAyLjI1IGMgMC4xODc1IDAuMTg3NSAwLjI4MTI1IDAuNDUzMTI1IDAuMjgxMjUgMC43MTg3NSB2IDEgaCAtMSBjIC0wLjI2NTYyNSAwIC0wLjUzMTI1IC0wLjA5Mzc1IC0wLjcxODc1IC0wLjI4MTI1IGwgLTIuMjgxMjUgLTIuMjgxMjUgbCAtMi4yODEyNSAyLjI4MTI1IGMgLTAuMTg3NSAwLjE4NzUgLTAuNDUzMTI1IDAuMjgxMjUgLTAuNzE4NzUgMC4yODEyNSBoIC0xIHYgLTEgYyAwIC0wLjI2NTYyNSAwLjA5Mzc1IC0wLjUzMTI1IDAuMjgxMjUgLTAuNzE4NzUgbCAyLjI4MTI1IC0yLjI1IGwgLTIuMjgxMjUgLTIuMjgxMjUgYyAtMC4yMTA5MzggLTAuMTk1MzEyIC0wLjMwNDY4OCAtMC40Njg3NSAtMC4yODEyNSAtMC43NSB6IG0gMCAwIiBmaWxsPSIjMmUzNDM2Ii8+Cjwvc3ZnPgo=");
|
||||
--adwaita-icon-window-maximize-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDMuOTg4MjgxIDMuOTkyMTg4IHYgOC4wMTE3MTggaCA4LjAxMTcxOSB2IC04LjAxMTcxOCB6IG0gMiAyIGggNC4wMTE3MTkgdiA0LjAxMTcxOCBoIC00LjAxMTcxOSB6IG0gMCAwIiBmaWxsPSIjMmUzNDM2Ii8+Cjwvc3ZnPgo=");
|
||||
--adwaita-icon-window-minimize-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDQgMTAuMDA3ODEyIGggOCB2IDEuOTg4MjgyIGggLTggeiBtIDAgMCIgZmlsbD0iIzJlMzQzNiIvPgo8L3N2Zz4K"); }
|
||||
|
||||
body {
|
||||
--adwaita-blue-1: #99c1f1;
|
||||
--adwaita-blue-2: #62a0ea;
|
||||
--adwaita-blue-3: #3584e4;
|
||||
--adwaita-blue-4: #1c71d8;
|
||||
--adwaita-blue-5: #1a5fb4;
|
||||
--adwaita-green-1: #8ff0a4;
|
||||
--adwaita-green-2: #57e389;
|
||||
--adwaita-green-3: #33d17a;
|
||||
--adwaita-green-4: #2ec27e;
|
||||
--adwaita-green-5: #26a269;
|
||||
--adwaita-yellow-1: #f9f06b;
|
||||
--adwaita-yellow-2: #f8e45c;
|
||||
--adwaita-yellow-3: #f6d32d;
|
||||
--adwaita-yellow-4: #f5c211;
|
||||
--adwaita-yellow-5: #e5a50a;
|
||||
--adwaita-orange-1: #ffbe6f;
|
||||
--adwaita-orange-2: #ffa348;
|
||||
--adwaita-orange-3: #ff7800;
|
||||
--adwaita-orange-4: #e66100;
|
||||
--adwaita-orange-5: #c64600;
|
||||
--adwaita-red-1: #f66151;
|
||||
--adwaita-red-2: #ed333b;
|
||||
--adwaita-red-3: #e01b24;
|
||||
--adwaita-red-4: #c01c28;
|
||||
--adwaita-red-5: #a51d2d;
|
||||
--adwaita-purple-1: #dc8add;
|
||||
--adwaita-purple-2: #c061cb;
|
||||
--adwaita-purple-3: #9141ac;
|
||||
--adwaita-purple-4: #813d9c;
|
||||
--adwaita-purple-5: #613583;
|
||||
--adwaita-brown-2: #b5835a;
|
||||
--adwaita-brown-1: #cdab8f;
|
||||
--adwaita-brown-3: #986a44;
|
||||
--adwaita-brown-4: #865e3c;
|
||||
--adwaita-brown-5: #63452c;
|
||||
--adwaita-light-1: #ffffff;
|
||||
--adwaita-light-2: #f6f5f4;
|
||||
--adwaita-light-3: #deddda;
|
||||
--adwaita-light-4: #c0bfbc;
|
||||
--adwaita-light-5: #9a9996;
|
||||
--adwaita-dark-1: #77767b;
|
||||
--adwaita-dark-2: #5e5c64;
|
||||
--adwaita-dark-3: #3d3846;
|
||||
--adwaita-dark-4: #241f31;
|
||||
--adwaita-dark-5: #000000; }
|
||||
body.theme-dark {
|
||||
--adwaita-accent-color: #78aeed;
|
||||
--adwaita-accent-bg-color: #3584e4;
|
||||
--adwaita-accent-fg-color: #ffffff;
|
||||
--adwaita-destructive-color: #ff7b63;
|
||||
--adwaita-destructive-bg-color: #c01c28;
|
||||
--adwaita-destructive-fg-color: #ffffff;
|
||||
--adwaita-success-color: #8ff0a4;
|
||||
--adwaita-success-bg-color: #26a269;
|
||||
--adwaita-success-fg-color: #ffffff;
|
||||
--adwaita-warning-color: #f8e45c;
|
||||
--adwaita-warning-bg-color: #cd9309;
|
||||
--adwaita-warning-fg-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-error-color: #ff7b63;
|
||||
--adwaita-error-bg-color: #c01c28;
|
||||
--adwaita-error-fg-color: #ffffff;
|
||||
--adwaita-window-bg-color: #242424;
|
||||
--adwaita-window-fg-color: #ffffff;
|
||||
--adwaita-view-bg-color: #1e1e1e;
|
||||
--adwaita-view-fg-color: #ffffff;
|
||||
--adwaita-headerbar-bg-color: #303030;
|
||||
--adwaita-headerbar-fg-color: #ffffff;
|
||||
--adwaita-headerbar-border-color: #ffffff;
|
||||
--adwaita-headerbar-backdrop-color: #242424;
|
||||
--adwaita-headerbar-shade-color: rgba(0, 0, 0, 0.36);
|
||||
--adwaita-card-bg-color: rgba(255, 255, 255, 0.08);
|
||||
--adwaita-card-fg-color: #ffffff;
|
||||
--adwaita-card-shade-color: rgba(0, 0, 0, 0.36);
|
||||
--adwaita-dialog-bg-color: #383838;
|
||||
--adwaita-dialog-fg-color: #ffffff;
|
||||
--adwaita-popover-bg-color: #383838;
|
||||
--adwaita-popover-fg-color: #ffffff;
|
||||
--adwaita-popover-shader-color: rgba(0, 0, 0, 0.36);
|
||||
--adwaita-shade-color: rgba(0, 0, 0, 0.36);
|
||||
--adwaita-scrollbar-outline-color: rgba(0, 0, 0, 0.5); }
|
||||
body.theme-light {
|
||||
--adwaita-accent-color: #1c71d8;
|
||||
--adwaita-accent-bg-color: #3584e4;
|
||||
--adwaita-accent-fg-color: #ffffff;
|
||||
--adwaita-destructive-color: #c01c28;
|
||||
--adwaita-destructive-bg-color: #e01b24;
|
||||
--adwaita-destructive-fg-color: #ffffff;
|
||||
--adwaita-success-color: #1b8553;
|
||||
--adwaita-success-bg-color: #2ec27e;
|
||||
--adwaita-success-fg-color: #ffffff;
|
||||
--adwaita-warning-color: #9c6e03;
|
||||
--adwaita-warning-bg-color: #e5a50a;
|
||||
--adwaita-warning-fg-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-error-color: #c01c28;
|
||||
--adwaita-error-bg-color: #e01b24;
|
||||
--adwaita-error-fg-color: #ffffff;
|
||||
--adwaita-window-bg-color: #fafafa;
|
||||
--adwaita-window-fg-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-view-bg-color: #ffffff;
|
||||
--adwaita-view-fg-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-headerbar-bg-color: #ffffff;
|
||||
--adwaita-headerbar-fg-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-headerbar-border-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-headerbar-backdrop-color: #fafafa;
|
||||
--adwaita-headerbar-shade-color: rgba(0, 0, 0, 0.12);
|
||||
--adwaita-card-bg-color: #ffffff;
|
||||
--adwaita-card-fg-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-card-shade-color: rgba(0, 0, 0, 0.07);
|
||||
--adwaita-dialog-bg-color: #ffffff;
|
||||
--adwaita-dialog-fg-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-popover-bg-color: #fafafa;
|
||||
--adwaita-popover-fg-color: rgba(0, 0, 0, 0.8);
|
||||
--adwaita-popover-shader-color: rgba(0, 0, 0, 0.07);
|
||||
--adwaita-shade-color: rgba(0, 0, 0, 0.07);
|
||||
--adwaita-scrollbar-outline-color: #ffffff; }
|
||||
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux,
|
||||
body.adwaita-colors-always,
|
||||
body.adwaita-colors-linux-only.mod-linux {
|
||||
--titlebar-background: var(--adwaita-headerbar-backdrop-color);
|
||||
--titlebar-background-focused: var(--adwaita-headerbar-bg-color);
|
||||
--titlebar-text-color-focused: var(--adwaita-headerbar-fg-color);
|
||||
--text-normal: var(--adwaita-view-fg-color); }
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.is-focused .sidebar-toggle-button,
|
||||
body.adwaita-colors-always.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body.adwaita-colors-always.is-focused .sidebar-toggle-button,
|
||||
body.adwaita-colors-linux-only.mod-linux.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body.adwaita-colors-linux-only.mod-linux.is-focused .sidebar-toggle-button {
|
||||
--icon-color: var(--adwaita-headerbar-fg-color);
|
||||
--icon-color-hover: var(--adwaita-headerbar-fg-color);
|
||||
--icon-color-focused: var(--adwaita-headerbar-fg-color);
|
||||
--tab-text-color-focused: var(--adwaita-headerbar-fg-color);
|
||||
--tab-text-color-focused-active-current: var(--adwaita-headerbar-fg-color); }
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-dark,
|
||||
body.adwaita-colors-always.theme-dark,
|
||||
body.adwaita-colors-linux-only.mod-linux.theme-dark {
|
||||
--titlebar-text-color: #919191;
|
||||
--icon-color: #929292;
|
||||
--icon-color-hover: #929292;
|
||||
--icon-color-focused: #929292;
|
||||
--tab-text-color: #929292;
|
||||
--tab-text-color-focused: #8a8a8a;
|
||||
--tab-text-color-focused-active-current: #8a8a8a;
|
||||
--background-modifier-hover: #323232; }
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-dark.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-dark.is-focused .sidebar-toggle-button,
|
||||
body.adwaita-colors-always.theme-dark.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body.adwaita-colors-always.theme-dark.is-focused .sidebar-toggle-button,
|
||||
body.adwaita-colors-linux-only.mod-linux.theme-dark.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body.adwaita-colors-linux-only.mod-linux.theme-dark.is-focused .sidebar-toggle-button {
|
||||
--background-modifier-hover: #464646; }
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-light,
|
||||
body.adwaita-colors-always.theme-light,
|
||||
body.adwaita-colors-linux-only.mod-linux.theme-light {
|
||||
--titlebar-text-color: #8c8c8c;
|
||||
--icon-color: #939393;
|
||||
--icon-color-hover: #939393;
|
||||
--icon-color-focused: #939393;
|
||||
--tab-text-color: #939393;
|
||||
--tab-text-color-focused: #939393;
|
||||
--tab-text-color-focused-active-current: #939393;
|
||||
--background-modifier-hover: #f0f0f0; }
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-light.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-light.is-focused .sidebar-toggle-button,
|
||||
body.adwaita-colors-always.theme-light.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body.adwaita-colors-always.theme-light.is-focused .sidebar-toggle-button,
|
||||
body.adwaita-colors-linux-only.mod-linux.theme-light.is-focused .workspace-tabs.mod-top .workspace-tab-header-container,
|
||||
body.adwaita-colors-linux-only.mod-linux.theme-light.is-focused .sidebar-toggle-button {
|
||||
--background-modifier-hover: #d8d8d8; }
|
||||
body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux .titlebar-button.mod-logo:hover,
|
||||
body.adwaita-colors-always .titlebar-button.mod-logo:hover,
|
||||
body.adwaita-colors-linux-only.mod-linux .titlebar-button.mod-logo:hover {
|
||||
background-color: inherit; }
|
||||
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux,
|
||||
body.adwaita-mod-always,
|
||||
body.adwaita-mod-linux-only.mod-linux {
|
||||
--frame-right-space: calc(var(--adwaita-mod-scale) * 120px);
|
||||
--adwaita-mod-foreground-focus: var(--adwaita-headerbar-fg-color); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.theme-dark,
|
||||
body.adwaita-mod-always.theme-dark,
|
||||
body.adwaita-mod-linux-only.mod-linux.theme-dark {
|
||||
--adwaita-mod-background: #2e2e2e;
|
||||
--adwaita-mod-background-focus: #444444;
|
||||
--adwaita-mod-background-hover: #4f4f4f;
|
||||
--adwaita-mod-background-active: #6e6e6e;
|
||||
--adwaita-mod-foreground: #929292; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.theme-light,
|
||||
body.adwaita-mod-always.theme-light,
|
||||
body.adwaita-mod-linux-only.mod-linux.theme-light {
|
||||
--adwaita-mod-background: #efefef;
|
||||
--adwaita-mod-background-focus: #d8d8d8;
|
||||
--adwaita-mod-background-hover: #cfcfcf;
|
||||
--adwaita-mod-background-active: #b3b3b3;
|
||||
--adwaita-mod-foreground: #949494; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-minimize-hide .titlebar-button-container.mod-right .titlebar-button.mod-minimize,
|
||||
body.adwaita-mod-always.adwaita-window-button-minimize-hide .titlebar-button-container.mod-right .titlebar-button.mod-minimize,
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-minimize-hide .titlebar-button-container.mod-right .titlebar-button.mod-minimize {
|
||||
display: none; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-maximize-hide .titlebar-button-container.mod-right .titlebar-button.mod-maximize,
|
||||
body.adwaita-mod-always.adwaita-window-button-maximize-hide .titlebar-button-container.mod-right .titlebar-button.mod-maximize,
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-maximize-hide .titlebar-button-container.mod-right .titlebar-button.mod-maximize {
|
||||
display: none; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-close-hide .titlebar-button-container.mod-right .titlebar-button.mod-close,
|
||||
body.adwaita-mod-always.adwaita-window-button-close-hide .titlebar-button-container.mod-right .titlebar-button.mod-close,
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-close-hide .titlebar-button-container.mod-right .titlebar-button.mod-close {
|
||||
display: none; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide), body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide), body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide),
|
||||
body.adwaita-mod-always.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide),
|
||||
body.adwaita-mod-always.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide),
|
||||
body.adwaita-mod-always.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide),
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide),
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide),
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide) {
|
||||
--frame-right-space: calc(var(--adwaita-mod-scale) * (120px - 38px)); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide), body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide), body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide),
|
||||
body.adwaita-mod-always.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide),
|
||||
body.adwaita-mod-always.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide),
|
||||
body.adwaita-mod-always.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide),
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide),
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide),
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide) {
|
||||
--frame-right-space: calc(var(--adwaita-mod-scale) * (120px - 38px - 38px)); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide,
|
||||
body.adwaita-mod-always.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide,
|
||||
body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide {
|
||||
--frame-right-space: calc(var(--adwaita-mod-scale) * (120px - 38px - 38px - 38px)); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right {
|
||||
transform: scale(var(--adwaita-mod-scale));
|
||||
margin-right: var(--adwaita-mod-right-margin);
|
||||
transform-origin: right; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
border-radius: 12px;
|
||||
padding: 0;
|
||||
margin: auto 0 auto 14px;
|
||||
background: var(--adwaita-mod-background);
|
||||
color: var(--adwaita-mod-foreground); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-minimize svg, body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-maximize svg, body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-close svg,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-minimize svg,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-maximize svg,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-close svg,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-minimize svg,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-maximize svg,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-close svg {
|
||||
display: none; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button::after,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button::after,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button::after {
|
||||
content: '';
|
||||
background-color: currentColor;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-minimize::after,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-minimize::after,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-minimize::after {
|
||||
-webkit-mask-image: var(--adwaita-icon-window-minimize-symbolic);
|
||||
mask-image: var(--adwaita-icon-window-minimize-symbolic); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-maximize::after,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-maximize::after,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-maximize::after {
|
||||
-webkit-mask-image: var(--adwaita-icon-window-maximize-symbolic);
|
||||
mask-image: var(--adwaita-icon-window-maximize-symbolic); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-close::after,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-close::after,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-close::after {
|
||||
-webkit-mask-image: var(--adwaita-icon-window-close-symbolic);
|
||||
mask-image: var(--adwaita-icon-window-close-symbolic); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button:hover,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button:hover,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button:hover {
|
||||
background: var(--adwaita-mod-background) !important; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button svg,
|
||||
body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button svg,
|
||||
body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button svg {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
margin: auto; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button,
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .modal-close-button,
|
||||
body.adwaita-mod-always.is-focused .titlebar-button-container.mod-right .titlebar-button,
|
||||
body.adwaita-mod-always.is-focused .modal-close-button,
|
||||
body.adwaita-mod-linux-only.mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button,
|
||||
body.adwaita-mod-linux-only.mod-linux.is-focused .modal-close-button {
|
||||
background: var(--adwaita-mod-background-focus);
|
||||
color: var(--adwaita-mod-foreground-focus); }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button:hover,
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .modal-close-button:hover,
|
||||
body.adwaita-mod-always.is-focused .titlebar-button-container.mod-right .titlebar-button:hover,
|
||||
body.adwaita-mod-always.is-focused .modal-close-button:hover,
|
||||
body.adwaita-mod-linux-only.mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button:hover,
|
||||
body.adwaita-mod-linux-only.mod-linux.is-focused .modal-close-button:hover {
|
||||
background: var(--adwaita-mod-background-hover) !important; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button:active,
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .modal-close-button:active,
|
||||
body.adwaita-mod-always.is-focused .titlebar-button-container.mod-right .titlebar-button:active,
|
||||
body.adwaita-mod-always.is-focused .modal-close-button:active,
|
||||
body.adwaita-mod-linux-only.mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button:active,
|
||||
body.adwaita-mod-linux-only.mod-linux.is-focused .modal-close-button:active {
|
||||
background: var(--adwaita-mod-background-active) !important; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .modal-close-button,
|
||||
body.adwaita-mod-always .modal-close-button,
|
||||
body.adwaita-mod-linux-only.mod-linux .modal-close-button {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
border-radius: 12px;
|
||||
color: var(--adwaita-mod-foreground);
|
||||
background: var(--adwaita-mod-background);
|
||||
transform: scale(var(--adwaita-mod-scale));
|
||||
transform-origin: right; }
|
||||
body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .modal-close-button:before,
|
||||
body.adwaita-mod-always .modal-close-button:before,
|
||||
body.adwaita-mod-linux-only.mod-linux .modal-close-button:before {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto;
|
||||
top: 50%;
|
||||
position: absolute;
|
||||
transform: translateY(-50%);
|
||||
-webkit-mask-image: var(--adwaita-icon-window-close-symbolic);
|
||||
mask-image: var(--adwaita-icon-window-close-symbolic);
|
||||
background-color: currentColor; }
|
||||
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux,
|
||||
body.adwaita-tabs-always,
|
||||
body.adwaita-tabs-linux-only.mod-linux {
|
||||
--tab-radius-active: 4px; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux:not(.adwaita-tabs-short),
|
||||
body.adwaita-tabs-always:not(.adwaita-tabs-short),
|
||||
body.adwaita-tabs-linux-only.mod-linux:not(.adwaita-tabs-short) {
|
||||
--tab-width: 10000px;
|
||||
/* infinite width */
|
||||
--tab-max-width: none; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux.theme-dark,
|
||||
body.adwaita-tabs-always.theme-dark,
|
||||
body.adwaita-tabs-linux-only.mod-linux.theme-dark {
|
||||
--tab-background-active: #323232; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux.theme-dark.is-focused,
|
||||
body.adwaita-tabs-always.theme-dark.is-focused,
|
||||
body.adwaita-tabs-linux-only.mod-linux.theme-dark.is-focused {
|
||||
--tab-background-active: #464646; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux.theme-light,
|
||||
body.adwaita-tabs-always.theme-light,
|
||||
body.adwaita-tabs-linux-only.mod-linux.theme-light {
|
||||
--tab-background-active: #f0f0f0; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux.theme-light.is-focused,
|
||||
body.adwaita-tabs-always.theme-light.is-focused,
|
||||
body.adwaita-tabs-linux-only.mod-linux.theme-light.is-focused {
|
||||
--tab-background-active: #d8d8d8; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .workspace-tab-header-container .workspace-tab-header-container-inner,
|
||||
body.adwaita-tabs-always .workspace-tab-header-container .workspace-tab-header-container-inner,
|
||||
body.adwaita-tabs-linux-only.mod-linux .workspace-tab-header-container .workspace-tab-header-container-inner {
|
||||
--tab-outline-width: 0; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .workspace-tab-header-container .workspace-tab-header-new-tab,
|
||||
body.adwaita-tabs-always .workspace-tab-header-container .workspace-tab-header-new-tab,
|
||||
body.adwaita-tabs-linux-only.mod-linux .workspace-tab-header-container .workspace-tab-header-new-tab {
|
||||
margin-right: var(--size-4-1); }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .workspace-tab-header-new-tab,
|
||||
body.adwaita-tabs-always .workspace-tab-header-new-tab,
|
||||
body.adwaita-tabs-linux-only.mod-linux .workspace-tab-header-new-tab {
|
||||
order: 1; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .workspace-tab-header-tab-list,
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .sidebar-toggle-button.mod-right,
|
||||
body.adwaita-tabs-always .workspace-tab-header-tab-list,
|
||||
body.adwaita-tabs-always .sidebar-toggle-button.mod-right,
|
||||
body.adwaita-tabs-linux-only.mod-linux .workspace-tab-header-tab-list,
|
||||
body.adwaita-tabs-linux-only.mod-linux .sidebar-toggle-button.mod-right {
|
||||
order: 2; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header {
|
||||
padding: 0;
|
||||
margin: 5px 3px 5px 2px; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active {
|
||||
color: var(--tab-text-color-focused); }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:before, body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:after,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:before,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:after,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:before,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:after {
|
||||
content: none; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner::after,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner::after,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner::after {
|
||||
right: -6px; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-title,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-title,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-title {
|
||||
padding-left: 20px;
|
||||
text-align: center; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:last-child .workspace-tab-header-inner::after,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:last-child .workspace-tab-header-inner::after,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:last-child .workspace-tab-header-inner::after {
|
||||
content: none; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-close-button,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-close-button,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-close-button {
|
||||
opacity: 0;
|
||||
display: flex; }
|
||||
body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button, body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header :hover .workspace-tab-header-inner-close-button,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button,
|
||||
body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header :hover .workspace-tab-header-inner-close-button,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button,
|
||||
body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header :hover .workspace-tab-header-inner-close-button {
|
||||
opacity: 1; }
|
||||
|
||||
body:not(.adwaita-font-always, .adwaita-font-linux-only, .adwaita-font-never).mod-linux,
|
||||
body.adwaita-font-always,
|
||||
body.adwaita-font-linux-only.mod-linux {
|
||||
--titlebar-height: 45px;
|
||||
--font-interface-theme: Cantarell;
|
||||
--font-ui-small: 15px;
|
||||
--h1-weight: 900; }
|
||||
body:not(.adwaita-font-always, .adwaita-font-linux-only, .adwaita-font-never).mod-linux .titlebar-text,
|
||||
body.adwaita-font-always .titlebar-text,
|
||||
body.adwaita-font-linux-only.mod-linux .titlebar-text {
|
||||
top: 10px;
|
||||
height: auto; }
|
||||
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux,
|
||||
body.adwaita-icons-always,
|
||||
body.adwaita-icons-linux-only.mod-linux {
|
||||
--titlebar-height: 45px;
|
||||
--header-height: 46px; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux svg.logo-wireframe,
|
||||
body.adwaita-icons-always svg.logo-wireframe,
|
||||
body.adwaita-icons-linux-only.mod-linux svg.logo-wireframe {
|
||||
stroke-width: 45; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux.is-frameless:not(.is-hidden-frameless) .app-container,
|
||||
body.adwaita-icons-always.is-frameless:not(.is-hidden-frameless) .app-container,
|
||||
body.adwaita-icons-linux-only.mod-linux.is-frameless:not(.is-hidden-frameless) .app-container {
|
||||
margin-top: -9px;
|
||||
height: calc(100% + 9px); }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button,
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-new-tab,
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-tab-list,
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .mod-left-split .workspace-tabs .workspace-tab-header-container-inner,
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .mod-right-split .workspace-tabs .workspace-tab-header-container-inner,
|
||||
body.adwaita-icons-always .sidebar-toggle-button,
|
||||
body.adwaita-icons-always .workspace-tab-header-new-tab,
|
||||
body.adwaita-icons-always .workspace-tab-header-tab-list,
|
||||
body.adwaita-icons-always .mod-left-split .workspace-tabs .workspace-tab-header-container-inner,
|
||||
body.adwaita-icons-always .mod-right-split .workspace-tabs .workspace-tab-header-container-inner,
|
||||
body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-new-tab,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-tab-list,
|
||||
body.adwaita-icons-linux-only.mod-linux .mod-left-split .workspace-tabs .workspace-tab-header-container-inner,
|
||||
body.adwaita-icons-linux-only.mod-linux .mod-right-split .workspace-tabs .workspace-tab-header-container-inner {
|
||||
margin-top: 0;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .mod-left-split .workspace-tabs .workspace-tab-header,
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .mod-right-split .workspace-tabs .workspace-tab-header,
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button .clickable-icon,
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tabs.mod-top .workspace-tab-header-container .clickable-icon,
|
||||
body.adwaita-icons-always .mod-left-split .workspace-tabs .workspace-tab-header,
|
||||
body.adwaita-icons-always .mod-right-split .workspace-tabs .workspace-tab-header,
|
||||
body.adwaita-icons-always .sidebar-toggle-button .clickable-icon,
|
||||
body.adwaita-icons-always .workspace-tabs.mod-top .workspace-tab-header-container .clickable-icon,
|
||||
body.adwaita-icons-linux-only.mod-linux .mod-left-split .workspace-tabs .workspace-tab-header,
|
||||
body.adwaita-icons-linux-only.mod-linux .mod-right-split .workspace-tabs .workspace-tab-header,
|
||||
body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button .clickable-icon,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tabs.mod-top .workspace-tab-header-container .clickable-icon {
|
||||
height: 34px;
|
||||
min-width: 34px;
|
||||
margin-top: auto;
|
||||
margin-bottom: auto; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button.mod-left .clickable-icon svg,
|
||||
body.adwaita-icons-always .sidebar-toggle-button.mod-left .clickable-icon svg,
|
||||
body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button.mod-left .clickable-icon svg {
|
||||
display: none; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button.mod-left .clickable-icon::after,
|
||||
body.adwaita-icons-always .sidebar-toggle-button.mod-left .clickable-icon::after,
|
||||
body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button.mod-left .clickable-icon::after {
|
||||
content: '';
|
||||
background-color: currentColor !important;
|
||||
-webkit-mask-image: var(--adwaita-icon-sidebar-show-symbolic);
|
||||
mask-image: var(--adwaita-icon-sidebar-show-symbolic);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button.mod-right .clickable-icon svg,
|
||||
body.adwaita-icons-always .sidebar-toggle-button.mod-right .clickable-icon svg,
|
||||
body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button.mod-right .clickable-icon svg {
|
||||
display: none; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button.mod-right .clickable-icon::after,
|
||||
body.adwaita-icons-always .sidebar-toggle-button.mod-right .clickable-icon::after,
|
||||
body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button.mod-right .clickable-icon::after {
|
||||
content: '';
|
||||
background-color: currentColor !important;
|
||||
-webkit-mask-image: var(--adwaita-icon-sidebar-show-right-symbolic);
|
||||
mask-image: var(--adwaita-icon-sidebar-show-right-symbolic);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-new-tab .clickable-icon svg,
|
||||
body.adwaita-icons-always .workspace-tab-header-new-tab .clickable-icon svg,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-new-tab .clickable-icon svg {
|
||||
display: none; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-new-tab .clickable-icon::after,
|
||||
body.adwaita-icons-always .workspace-tab-header-new-tab .clickable-icon::after,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-new-tab .clickable-icon::after {
|
||||
content: '';
|
||||
background-color: currentColor !important;
|
||||
-webkit-mask-image: var(--adwaita-icon-tab-new-symbolic);
|
||||
mask-image: var(--adwaita-icon-tab-new-symbolic);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-tab-list .clickable-icon svg,
|
||||
body.adwaita-icons-always .workspace-tab-header-tab-list .clickable-icon svg,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-tab-list .clickable-icon svg {
|
||||
display: none; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-tab-list .clickable-icon::after,
|
||||
body.adwaita-icons-always .workspace-tab-header-tab-list .clickable-icon::after,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-tab-list .clickable-icon::after {
|
||||
content: '';
|
||||
background-color: currentColor !important;
|
||||
-webkit-mask-image: var(--adwaita-icon-go-down-symbolic);
|
||||
mask-image: var(--adwaita-icon-go-down-symbolic);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-inner-close-button svg,
|
||||
body.adwaita-icons-always .workspace-tab-header-inner-close-button svg,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-inner-close-button svg {
|
||||
display: none; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-inner-close-button::after,
|
||||
body.adwaita-icons-always .workspace-tab-header-inner-close-button::after,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-inner-close-button::after {
|
||||
content: '';
|
||||
background-color: currentColor !important;
|
||||
-webkit-mask-image: var(--adwaita-icon-window-close-symbolic);
|
||||
mask-image: var(--adwaita-icon-window-close-symbolic);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon svg,
|
||||
body.adwaita-icons-always .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon svg,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon svg {
|
||||
display: none; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon::after,
|
||||
body.adwaita-icons-always .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon::after,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon::after {
|
||||
content: '';
|
||||
background-color: currentColor !important;
|
||||
-webkit-mask-image: var(--adwaita-icon-folder-visiting-symbolic);
|
||||
mask-image: var(--adwaita-icon-folder-visiting-symbolic);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon svg,
|
||||
body.adwaita-icons-always .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon svg,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon svg {
|
||||
display: none; }
|
||||
body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon::after,
|
||||
body.adwaita-icons-always .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon::after,
|
||||
body.adwaita-icons-linux-only.mod-linux .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon::after {
|
||||
content: '';
|
||||
background-color: currentColor !important;
|
||||
-webkit-mask-image: var(--adwaita-icon-folder-saved-search-symbolic);
|
||||
mask-image: var(--adwaita-icon-folder-saved-search-symbolic);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: auto; }
|
||||
109
.obsidian/workspace.json
vendored
@@ -4,21 +4,21 @@
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "f529bcc516060bd1",
|
||||
"id": "ffb01f10867b2c5c",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "77e11ebaf654ab31",
|
||||
"id": "f76c0dfd568461ec",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "TERCERO/SETR1/EXAMEN.md",
|
||||
"file": "CUARTO/SSII/Teoria_2526.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "EXAMEN"
|
||||
"title": "Teoria_2526"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -150,73 +150,84 @@
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of EXAMEN"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "9af787c64f613ca6",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "git-view",
|
||||
"state": {},
|
||||
"icon": "git-pull-request",
|
||||
"title": "Source Control"
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
"currentTab": 4
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
"width": 300
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"table-editor-obsidian:Advanced Tables Toolbar": false,
|
||||
"obsidian-git:Open Git source control": false,
|
||||
"bases:Create new base": false,
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"table-editor-obsidian:Advanced Tables Toolbar": false,
|
||||
"obsidian-git:Open Git source control": false
|
||||
"command-palette:Open command palette": false
|
||||
}
|
||||
},
|
||||
"active": "77e11ebaf654ab31",
|
||||
"active": "fc5a3261425cb48f",
|
||||
"lastOpenFiles": [
|
||||
"CUARTO/SETR2/Teoria_2526.md",
|
||||
"CUARTO/SSII/Teoria_2526.md",
|
||||
"Untitled 1.md",
|
||||
"Untitled.md",
|
||||
"CUARTO/LDH/Teoria_2526.md",
|
||||
"CUARTO/LDH/images/Pasted image 20251009170238.png",
|
||||
"CUARTO/LDH/images/Pasted image 20251009171446.png",
|
||||
"CUARTO/LDH/images",
|
||||
"CUARTO/LDH/images/Pasted image 20251009171435.png",
|
||||
"CUARTO/LDH/images/Pasted image 20251009171228.png",
|
||||
"CUARTO/LDH/images/Pasted image 20251009170726.png",
|
||||
"CUARTO/LDH/images/Pasted image 20251009184115.png",
|
||||
"CUARTO/LDH/images/Pasted image 20251009173436.png",
|
||||
"CUARTO/LDH/images/Pasted image 20251009173344.png",
|
||||
"CUARTO/LDH/images/Pasted image 20251009171614.png",
|
||||
"CUARTO/LDH/images/Pasted image 20251009171540.png",
|
||||
"SEGUNDO/DSD/Teoría_2324.md",
|
||||
"CUARTO/SSII",
|
||||
"CUARTO/LDH",
|
||||
"CUARTO/SETR2",
|
||||
"CUARTO/Untitled.md",
|
||||
"Untitled",
|
||||
"CUARTO",
|
||||
"SEGUNDO/MD/Apuntes Sage.md",
|
||||
"SEGUNDO/SO/Teoría_2324.md",
|
||||
"SEGUNDO/TC/Teoría_2324.md",
|
||||
"TERCERO/DAD/Teoria_2425.md",
|
||||
"TERCERO/TG",
|
||||
"TERCERO/SETR1/EXAMEN.md",
|
||||
"TERCERO/SETR1/Teoria_2425.md",
|
||||
"TERCERO/SPD/Teoría_2425.md",
|
||||
"TERCERO/SPD/P4_SPD.md",
|
||||
"PRIMERO/AE",
|
||||
"PRIMERO/FFI",
|
||||
"PRIMERO",
|
||||
"TERCERO/TG",
|
||||
"TERCERO/IA ✅/Teoría_2425.md",
|
||||
"TERCERO/IA ✅/Apuntes Julia.md",
|
||||
"TERCERO/PI ✅/Teoria_2425.md",
|
||||
"CUARTO/SSII",
|
||||
"CUARTO/LDH",
|
||||
"CUARTO/PGPI",
|
||||
"CUARTO/SETR2",
|
||||
"CUARTO/C",
|
||||
"CUARTO",
|
||||
"Untitled.md",
|
||||
"TERCERO/ATR2 ✅/Teoria_2425.md",
|
||||
"SEGUNDO/RC ✅/Teoría_2324.md",
|
||||
"TERCERO/SETR1/EXAMEN.md",
|
||||
"TERCERO/IA/Teoría_2425.md",
|
||||
"TERCERO/IA/Apuntes Julia.md",
|
||||
"TERCERO/PI/Teoria_2425.md",
|
||||
"TERCERO/ATR2/Teoria_2425.md",
|
||||
"SEGUNDO/RC/Teoría_2324.md",
|
||||
"TERCERO/SETR1/Presentación 24-25.md",
|
||||
"TERCERO/PI ✅/EXAMEN PI.md",
|
||||
"TERCERO/SS ✅/SS 24-25.md",
|
||||
"TERCERO/SS ✅/SS Lab.md",
|
||||
"TERCERO/DAD ✅/Teoria_2425.md",
|
||||
"TERCERO/ATR1 ✅/Teoría_2425.md",
|
||||
"TERCERO/ATR1 ✅/Resolución 1 Parcial ATR1.md",
|
||||
"SEGUNDO/TC ✅/Teoría_2324.md",
|
||||
"SEGUNDO/SO ✅/Teoría_2324.md",
|
||||
"SEGUNDO/MD ✅/Apuntes Sage.md",
|
||||
"SEGUNDO/IISSI2 ✅/Teoría_2324.md",
|
||||
"SEGUNDO/IISSI1 ✅/Teoría_2324.md",
|
||||
"SEGUNDO/DSD ✅/Teoría_2324.md",
|
||||
"SEGUNDO/AC/Teoría_2324.md",
|
||||
"SEGUNDO/ADDA ✅/Teoría_2324.md",
|
||||
"SEGUNDO/ADDA ✅/images/Pasted image 20231106183346.png",
|
||||
"SEGUNDO/ADDA ✅/images/Pasted image 20231009184410.png",
|
||||
"TERCERO/SETR1/images/Screenshot_2025-05-20-22-44-15-771_com.myscript.nebo.png",
|
||||
"TERCERO/SETR1/images/Screenshot_2025-05-21-00-40-48-110_com.myscript.nebo.png",
|
||||
"TERCERO/SETR1/images/Screenshot_2025-05-20-23-17-28-779_com.myscript.nebo.png",
|
||||
"TERCERO/SETR1/images/Screenshot_2025-05-20-22-54-00-843_com.myscript.nebo.png",
|
||||
"TERCERO/SETR1/images/Screenshot_2025-05-20-22-47-13-012_com.myscript.nebo.png",
|
||||
"TERCERO/SETR1/images/Screenshot_2025-05-20-22-46-01-773_com.myscript.nebo.png",
|
||||
"TERCERO/SETR1/images/Pasted image 20250521015758.png",
|
||||
"TERCERO/SETR1/images/Pasted image 20250521015738.png"
|
||||
"TERCERO/PI/EXAMEN PI.md",
|
||||
"TERCERO/SS/SS 24-25.md",
|
||||
"TERCERO/SS/SS Lab.md",
|
||||
"TERCERO/ATR1/Teoría_2425.md",
|
||||
"TERCERO/ATR1/Resolución 1 Parcial ATR1.md"
|
||||
]
|
||||
}
|
||||
163
CUARTO/LDH/Teoria_2526.md
Normal file
@@ -0,0 +1,163 @@
|
||||
# <mark style="background: #FFF3A3A6;">TEMA 1: Visión general del desarrollo de hardware</mark>
|
||||
## <mark style="background: #ADCCFFA6;">1. Introducción al hardware</mark>
|
||||
El hardware es la parte tangible de un sistema informático. Es importante destacar que hardware y software son **indisolubles**. El desarrollo de hardware y software conjuntos se atribuye a la **Ingeniería de Computadores**.
|
||||
### <mark style="background: #FFB86CA6;">Paradigma del hardware: smartphones</mark>
|
||||
El componente principal de un smartphone es la **PCB (Printed Circuit Board)**. A su vez, el componente principal de la PCB es el **SoC (System on Chip)**. El SoC habitualmente integra núcleos de CPU y GPU, RAM, ROM, drivers USB, tecnología inalámbrica, etc.
|
||||
#### <mark style="background: #D2B3FFA6;">Modelo de fabricación de un smartphone</mark>
|
||||
- **Empresa diseñadora/comercializadora:** diseño final, componentes principales, ensamblaje, venta.
|
||||
- **Empresa proveedora de SoCs y demás componentes:** diseñan los circuitos integrados y los comercializan. Pueden ser **foundry** o **fabless**.
|
||||
- **Empresa diseñadora de IPs:** diseñan los componentes que conforman un IC.
|
||||
- **Empresa fabricante de ICs:** fabrican los ICs diseñados para ellos y otros o exclusivamente para otros (para las fabless generalmente).
|
||||
## <mark style="background: #ADCCFFA6;">2. Plataformas SoC principales</mark>
|
||||
Un SoC incluye gran cantidad de componentes. Lo importante no es sólo diseñar el **hardware**, sino también el **software**. El software de un SoC consiste en el kernel de un SO que pueda ejecutarse en el/las CPU/s; y los drivers de cada uno de los periféricos. Se suelen diseñar a partir de **IP Cores**.
|
||||
### <mark style="background: #FFB86CA6;">IP Cores: Intellectual Property Cores</mark>
|
||||
Componentes o celdas lógicas reutilizables en múltiples diseños. Se pueden usar dentro de ASIC o de FPGA. Se pueden dividir en varios tipos según:
|
||||
#### <mark style="background: #D2B3FFA6;">Implementación</mark>
|
||||
- **Soft Cores:** componentes implementados a nivel RTL, normalmente en lenguajes de descripción de hardware. También se pueden ofrecer en diseño a nivel de puertas lógicas.
|
||||
- **Hard Cores:** implementación del core a nivel de transistores.
|
||||
#### <mark style="background: #D2B3FFA6;">Licencia de uso</mark>
|
||||
- **Propietarias:** requieren de una licencia comercial para su uso (legal). Por ejemplo: ARM.
|
||||
- **Abiertas:** equivale al OSS. Por ejemplo: RISC-V.
|
||||
## <mark style="background: #ADCCFFA6;">3. Plataformas PCB de desarrollo de hardware</mark>
|
||||
El diseño final consiste en interconectar todos los componentes necesarios, SoC, memorias, etc, entre sí en una PCB. Surge la necesidad de tener PCB para desarrollo a nivel de prototipado. Estas PCB pueden ser microcontrolador, SoC o FPGA y pueden tener los periféricos más habituales ya integrados. El conjunto de la PCB de desarrollo y sus herramientas software forman el **kit de desarrollo**. Se pueden clasificar en tres tipos:
|
||||
### <mark style="background: #FFB86CA6;">SBM: Single Board Microcontroller</mark>
|
||||
Hay un gran número por el bajo coste que conlleva fabricar PCB y microcontroladores.
|
||||
#### <mark style="background: #D2B3FFA6;">STM32 MCU Discovery Kits</mark>
|
||||
Desarrolladas por STM. Son microcontroladores de 32 bits de arquitectura ARM Cortex.
|
||||
#### <mark style="background: #D2B3FFA6;">Texas Instruments</mark>
|
||||
Desarrolladas por TI. Incorporan microcontroladores de la familia msp430 o ARM Cortex. Disponen de una especie de placas de expansión llamadas **booster packs**.
|
||||
#### <mark style="background: #D2B3FFA6;">ESPRESSIF</mark>
|
||||
Plataformas desarrolladas por ESPRESSIF que incorporan algún microcontrolador diseñado como empresa fabless por ellos mismos.
|
||||
#### <mark style="background: #D2B3FFA6;">Wiring</mark>
|
||||
De esta plataforma deriva arduino.
|
||||
#### <mark style="background: #D2B3FFA6;">Arduino</mark>
|
||||
Plataforma hardware de desarrollo abierta, basada principalmente en AVR 8 y ARM Cortex. Tienen placas de expansión llamadas **shields**.
|
||||
### <mark style="background: #FFB86CA6;">SBC: Single Board Computer</mark>
|
||||
En el diseño de sistemas empotrados en general se han venido empleando plataformas basadas en microcontroladores. Sin embargo, la evolución tecnológica ha permitido tener microprocesadores de alta capacidad (32/64 bits) y memorias grandes. Se les denomina: Single-Board Computers.
|
||||
### <mark style="background: #FFB86CA6;">FPGA</mark>
|
||||
Field Programmable Gate Array. Son básicamente arrays de puertas lógicas programables.
|
||||
# <mark style="background: #FFF3A3A6;">TEMA 2: Proyecto MySensors</mark>
|
||||
## <mark style="background: #ADCCFFA6;">1. Introducción a IoT</mark>
|
||||
El IoT (Internet of Things) es la aplicación de la tecnología para interconectar mediante internet varias cosas que hace años no tenían conexión a internet. Existen varios entornos para aplicaciones IoT, como pueden ser el cuerpo humano, el hogar, las oficinas de trabajo, las fábricas, etc.
|
||||
### <mark style="background: #FFB86CA6;">Arquitectura de sistemas IoT</mark>
|
||||
Un sistema IoT se compone de las cosas (things) que proporcionan datos a través de sensores, las redes por las que se transfieren dichos datos y un procesamiento de ellos en un controlador para su posterior uso.
|
||||
### <mark style="background: #FFB86CA6;">Redes para conexiones IoT</mark>
|
||||
- WPAN: Wireless Personal Area Network
|
||||
- WLAN: Wireless Local Area Network
|
||||
- WMAN: Wireless Metropoly Area Network
|
||||
- WWAN: Worldwide Wireless Area Network
|
||||
Se clasifican según dos características principales: **rango de cobertura** y **consumo de potencia**. Hay varias redes muy usadas para corto rango en aplicaciones IoT:
|
||||
- Bluetooth (Standard y LE)
|
||||
- Zigbee
|
||||
- RFID
|
||||
- RF4CE
|
||||
- NRF24
|
||||
- Thread
|
||||
- WiFi
|
||||
También hay de largo alcance:
|
||||
- LP-WAN: Low Power WAN
|
||||
- **Espectro sin licencia:**
|
||||
- LORAWAN
|
||||
- SIGFOX
|
||||
- **Espectro con licencia:**
|
||||
- LTE-M
|
||||
- NB-IoT
|
||||
## <mark style="background: #ADCCFFA6;">2. Proyecto MySensors</mark>
|
||||
Proyecto OSH/S (Open Source Hardware/Software) enfocado al IoT DIY (Do-It-Yourself). MySensors es una red de sensores y actuadores que se intercomunican entre sí y también a través de un **gateway** con algún **controlador**. Su arquitectura es la siguiente:
|
||||
- **Nodos sensores/actuadores:** leen información del sensor y tratan de transmitirla al gateway o reciben órdenes del controlador hacia el actuador.
|
||||
- **Nodos repetidores:** si un nodo sensor está fuera del alcance del gateway, se comunica con este a través de un repetidor.
|
||||
- **Gateway:** recibe los datos de los sensores y los pasa al controlador.
|
||||
### <mark style="background: #FFB86CA6;">Protocolo de comunicación</mark>
|
||||
`<node-id>;<child-sensor-id>;<command>;<ack>;<type>;<payload>`
|
||||
# <mark style="background: #FFF3A3A6;">TEMA 3: Diseño y fabricación de PCBs</mark>
|
||||
## <mark style="background: #ADCCFFA6;">1. ¿Qué es una PCB?</mark>
|
||||
<div class="nota"><h3>PCB: Printed Circuit Board</h3></div>
|
||||
Son placas de sustrato no conductor que se emplean para el montaje e interconexión de componentes electrónicos a través de pistas de un material conductor.
|
||||
### <mark style="background: #FFB86CA6;">Alternativa a la PCB</mark>
|
||||
Para prototipar se pueden usar protoboards (o regletas), perfboards, stripboards.
|
||||
## <mark style="background: #ADCCFFA6;">2. Clasificación de las PCB</mark>
|
||||
### <mark style="background: #FFB86CA6;">Single-sided PCB</mark>
|
||||
Se interconectan los elementos en una sola cara del substrato, la cara de soldadura (solder side). Los componentes se colocan en la otra. Se emplea para circuitos simples y para minimizar costes. Se suelen fabricar por impresión o por troquelado.
|
||||
### <mark style="background: #FFB86CA6;">Double-sided PCB</mark>
|
||||
Se interconectan los elementos en las dos caras del substrato. Generalmente una es la de soldadura y la otra la de componentes. Se emplean en circuitos de mayor densidad de componentes y pistas. Los agujeros de una cara a otra pueden ser con **PTH (plated through-hole)** o sin.
|
||||
![[Pasted image 20251009170238.png]]
|
||||
#### <mark style="background: #D2B3FFA6;">Double-sided sin PTH</mark>
|
||||
La circuitería de ambas caras se realiza o bien soldando en ambas caras o bien con cables a través de agujeros o con algún tipo de ojales (eyelets). Se aconseja minimizar el número de componentes soldados a ambas caras para facilitar el cambio y por la dificultad que supone soldar en la cara de componentes.
|
||||
#### <mark style="background: #D2B3FFA6;">Double-sided con PTH</mark>
|
||||
La circuitería de ambas caras se interconecta con la metalización de las paredes de los agujeros metalizados que atraviesan el substrato. Es la más utilizada cuando el circuito es complejo.
|
||||
![[Pasted image 20251009170726.png]]
|
||||
### <mark style="background: #FFB86CA6;">Multi-layer PCB</mark>
|
||||
Los circuitos **VLSI (Very Large Scale Integration)** han aumentado drásticamente la densidad de empaquetado y pistas debido al gran número de pines I/O de algunos chips. Surgen, por tanto, nuevos problemas como el ruido, cross-talk, capacidades parásitas, caídas de tensión, etc. Se emplean láminas de substrato más finas junto con capas de material aislante conocido como **pre-preg (láminas de fibras pre-impregnadas)**. Se usa PTH para interconexión entre capas.
|
||||
![[Pasted image 20251009171228.png]]
|
||||
### <mark style="background: #FFB86CA6;">Otros tipos de PCB</mark>
|
||||
#### <mark style="background: #D2B3FFA6;">Flexibles</mark>
|
||||
![[Pasted image 20251009171435.png]]
|
||||
![[Pasted image 20251009171446.png]]
|
||||
#### <mark style="background: #D2B3FFA6;">HDI (High-Density Interconnect)</mark>
|
||||
![[Pasted image 20251009171540.png]]
|
||||
#### <mark style="background: #D2B3FFA6;">IC substrate</mark>
|
||||
![[Pasted image 20251009171614.png]]
|
||||
## <mark style="background: #ADCCFFA6;">3. Proceso de implementación en PCB</mark>
|
||||
### <mark style="background: #FFB86CA6;">1. Diseño</mark>
|
||||
En esta fase se crea el layout de la PCB mediante la herramienta software adecuada. Se empieza con el esquemático del circuito.
|
||||
![[Pasted image 20251009173344.png]]
|
||||
Seguidamente, la herramienta genera el layout con las footprints de los componentes y las pistas entre estos.
|
||||
![[Pasted image 20251009173436.png]]
|
||||
Hay varios procesos en la fase de diseño:
|
||||
- **Creación de librerías de componentes:** antes de realizar un esquemático y posterior layout, es necesario asegurarse de tener todos los símbolos (esquemático) y huellas (footprints) de los componentes a usar.
|
||||
- **Diseño del esquemático:** se realiza el diseño del esquemático. La mayoría de herramientas permite realizar un **ERC (Electrical Rules Check)** para detectar posibles errores.
|
||||
- **Diseño del layout:** a partir del esquemático, las herramientas generan un primer layout que habrá que modificar para colocar los componentes en la posición deseada así como enrutar las pistas entre estos. Las herramientas suelen incorporar un **DRC (Design Rule Check)**.
|
||||
- **Generación de GERBERS:** los archivos GERBER indican la información geométrica de la placa:
|
||||
- Gerber de la solder side
|
||||
- Gerber de la component side
|
||||
- Gerber de los taladros usados
|
||||
- Gerber de los agujeros (drills)
|
||||
- Gerber de la dimensión de la PCB
|
||||
- ...
|
||||
### <mark style="background: #FFB86CA6;">2. Fabricación</mark>
|
||||
Se fabrica la PCB en el substrato. El substrato debe de tener diferentes características:
|
||||
- Mecánicas: rígidos para mantener los componentes, fáciles de taladrar, suficientemente gruesas (entre 0.8mm y 3.2mm pero típico de 1.6mm).
|
||||
- Químicas: metalizado de los taladros, retardante de las llamas (FR), no absorber demasiada humedad
|
||||
- Térmicas: disipar el calor, capaz de soportar el calor al soldar
|
||||
- Eléctricas: constante dieléctrica baja para tener pocas pérdidas a altas frecuencias, punto de ruptura dieléctrica alto
|
||||
#### <mark style="background: #D2B3FFA6;">Traslado del patrón de circuito al substrato</mark>
|
||||
**Impresión serigráfica**
|
||||
Se utilizan tintas especiales resistentes al grabado para marcar el patrón en la capa de cobre. La pintura se puede aplicar con plantillas o un plotter específico para PCBs. Posteriormente se elimina el cobre sobrante no cubierto por la tinta con químicos. También se puede imprimir con tinta conductora usando máquinas como las Voltera.
|
||||
|
||||
**Fotograbado**
|
||||
Usa una transparencia del patrón en negativo para transferirlo a la placa con UV. Requiere placas fotosensibles (el cobre cubierto con resina fotosensible) para que cuando se transfiera, en las zonas que dejen pasar la luz, la resina reaccione.
|
||||
|
||||
**Por revelado**
|
||||
La resina desaparecerá de la placa menos en las zonas del patrón aplicado. Posteriormente se elimina el cobre sin resina con químicos.
|
||||
|
||||
**Insoladora**
|
||||
Caja que dispone de varios tubos fluorescentes de luz UV separados de la superficie por un cristal esmerilado.
|
||||
|
||||
**Fresado**
|
||||
Una máquina tipo plotter hace un "dibujo" sobre la placa empleando fresas que eliminan el cobre de la misma.
|
||||
|
||||
**Impresión en material termosensible**
|
||||
Se imprime el diseño del circuito sobre un papel fotográfico y luego aplicando calor se transfiere a la placa. El cobre no cubierto se elimina con químicos.
|
||||
#### <mark style="background: #D2B3FFA6;">Metalización o pasta de soldadura</mark>
|
||||
**STENCIL**: es la mascara que se superpone a la placa dejando al descubierto los pads/vías que deben metalizarse. Suelen estar hechos de acero inoxidable o níquel.
|
||||
#### <mark style="background: #D2B3FFA6;">Máscara de soldadura</mark>
|
||||
Para proteger el cobre de la oxidación del aire, se recubre la PCB con un material aislante y no oxidante, dejando al descubierto zonas de soldadura solamente. Le da el color característico a las PCB.
|
||||
#### <mark style="background: #D2B3FFA6;">Silkscreen</mark>
|
||||
Capa sobre la máscara de soldadura con tinta no conductora para imprimir texto o información de los componentes sobre la placa.
|
||||
### <mark style="background: #FFB86CA6;">3. Ensamblaje</mark>
|
||||
Se montan los componentes en la PCB (ya sean THT o SMD) y se sueldan (con soldadura
|
||||
blanda <450ºC o dura >450ºC para plata, oro o acero).
|
||||
#### <mark style="background: #D2B3FFA6;">Soldadura</mark>
|
||||
Durante la soldadura, se dice que el metal de soldadura **"moja al otro metal" (wetted-metal)**, es decir, se adhiere bien al calentarse. En la unión Cu-Sn se forman capas cristalinas cuya resistencia depende de la temperatura y tiempo de calentado (espesor ideal 0.5µm).
|
||||
Las variables claves de la soldadura son la temperatura, el tiempo, la limpieza, el tipo de flux y la aleación.
|
||||
#### <mark style="background: #D2B3FFA6;">Uso de flux</mark>
|
||||
Es como un detergente metálico; limpia óxidos y baja la tensión superficial, ayudando al Sn a extenderse bien.
|
||||
<div class="nota">El grosor del hilo de Sn debe ser ~1/2 del diámetro del pad</div>
|
||||
#### <mark style="background: #D2B3FFA6;">Herramientas de soldadura</mark>
|
||||
- **Soldador:** debe generar el calor necesario para calentar superficies y fundir el material de soldadura. Consta del mango, del elemento de transferencia de calor y de una punta (tip).
|
||||
- **Soporte del soldador:** se deja encendido el soldador apoyado en el soporte hasta que se caliente para empezar a soldar.
|
||||
- **Esponja:** esponja de malla de latón o esponja mojada con agua destilada (para no oxidar) para limpiar la punta.
|
||||
### <mark style="background: #FFB86CA6;">4. Test</mark>
|
||||
Se somete a la PCB a tests para probar su correcto funcionamiento.
|
||||
- Sin componentes: a nivel de pistas y con el polímetro
|
||||
- Con componentes: probar los componentes sobre la placa
|
||||
BIN
CUARTO/LDH/images/Pasted image 20251009170238.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009170726.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009171228.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009171435.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009171446.png
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009171540.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009171614.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009173344.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009173436.png
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
CUARTO/LDH/images/Pasted image 20251009184115.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
227
CUARTO/SETR2/Teoria_2526.md
Normal file
@@ -0,0 +1,227 @@
|
||||
# <mark style="background: #FFF3A3A6;">TEMA 1: Introducción a ARM</mark>
|
||||
## <mark style="background: #ADCCFFA6;">1. Introducción</mark>
|
||||
ARM (Advanced RISC Machines) nació en 1990 en Inglaterra con una idea clara: procesadores **RISC**, simples y eficientes, frente a los **CISC** de Intel y compañía.
|
||||
No fabrican chips, **venden licencias** de sus diseños, así que empresas como ST, NXP, Texas Instruments o Microchip integran sus núcleos en sus propios micros.
|
||||
|
||||
Las arquitecturas ARM se dividen en:
|
||||
- **Cortex-A**: para sistemas potentes (Android, Linux, etc.).
|
||||
- **Cortex-R**: para sistemas de tiempo real críticos (automoción, industria).
|
||||
- **Cortex-M**: para microcontroladores de bajo consumo y control embebido (como los STM32).
|
||||
|
||||
El **Cortex-M4** es un modelo intermedio: más potente que el M0/M3, pero más eficiente que el M7. Tiene soporte para **operaciones en coma flotante** y un rendimiento excelente en control digital y procesamiento de señales (DSP).
|
||||
## <mark style="background: #ADCCFFA6;">2. Estructura general del Cortex-M4 y sus registros</mark>
|
||||
El núcleo **Cortex-M4** es de **32 bits**, arquitectura **RISC**, y usa una versión reducida del conjunto de instrucciones ARM llamada **Thumb-2**, que combina instrucciones de 16 y 32 bits para optimizar memoria sin perder rendimiento.
|
||||
### <mark style="background: #FFB86CA6;">Registros generales</mark>
|
||||
- **R0–R12** → registros de propósito general (datos, direcciones, etc.).
|
||||
- **R13 (SP)** → *Stack Pointer*, apunta a la cima de la pila.
|
||||
- **R14 (LR)** → *Link Register*, guarda la dirección de retorno tras una llamada a subrutina.
|
||||
- **R15 (PC)** → *Program Counter*, indica la instrucción actual.
|
||||
### <mark style="background: #FFB86CA6;">Registros de estado</mark>
|
||||
- **PSR (Program Status Register)** → conjunto de tres registros (APSR, IPSR, EPSR) que indican el estado del procesador, la instrucción en ejecución y las interrupciones activas.
|
||||
- **CONTROL** → define el nivel de privilegio, la pila activa y si la **FPU** está disponible.
|
||||
### <mark style="background: #FFB86CA6;">Registros de coma flotante</mark>
|
||||
- 32 registros de 32 bits (**S0–S31**) → precisión simple.
|
||||
- 16 registros de 64 bits (**D0–D15**) → precisión doble (empaquetados en los S).
|
||||
- **FPSCR** → contiene flags como negativo, cero, overflow, NaN o modo de redondeo.
|
||||
Este diseño permite al Cortex-M4 realizar cálculos complejos en tiempo real sin depender de software lento, ideal para audio, sensores o controladores PID.
|
||||
## <mark style="background: #ADCCFFA6;">3. Ejecución de instrucciones: Pipeline, modos Thumb y eficiencia</mark>
|
||||
El **pipeline** (tubería de ejecución) del Cortex-M4 tiene 3 etapas:
|
||||
1. **IF (Instruction Fetch)** – Se lee la instrucción de memoria.
|
||||
2. **ID (Instruction Decode)** – Se decodifica.
|
||||
3. **EX (Execute)** – Se ejecuta.
|
||||
Esto permite solapar instrucciones, mejorando el rendimiento (una instrucción por ciclo en el mejor caso).
|
||||
### <mark style="background: #FFB86CA6;">Instrucciones Thumb y Thumb-2</mark>
|
||||
ARM clásico usa instrucciones de 32 bits (rápidas, pero grandes).
|
||||
**Thumb (16 bits)** mejora la densidad de código (programas más pequeños), aunque algo más lentos (~20% más).
|
||||
**Thumb-2** mezcla ambas: usa 16 bits para instrucciones simples y 32 bits para las complejas. Así:
|
||||
- Se ahorra **≈30% de memoria**.
|
||||
- Se mantiene **rendimiento casi igual** al modo ARM.
|
||||
En sistemas embebidos donde la memoria Flash es limitada, esta diferencia es clave.
|
||||
## <mark style="background: #ADCCFFA6;">4. Memoria y organización interna</mark>
|
||||
Los **ARM Cortex-M** trabajan con una organización de memoria **alineada a 32 bits**, aunque el M4 admite accesos desalineados, lo que mejora el aprovechamiento de la RAM.
|
||||
### <mark style="background: #FFB86CA6;">Bit-band Mapping</mark>
|
||||
Permite acceder a **bits individuales** de una palabra mediante direcciones alias.
|
||||
Por ejemplo: escribir directamente el bit 0 de un registro sin usar máscaras.
|
||||
Esto facilita muchísimo el control de GPIO o flags sin operaciones lógicas extra.
|
||||
### <mark style="background: #FFB86CA6;">Jerarquía de buses en STM32F4</mark>
|
||||
Dentro del micro, los distintos módulos (CPU, DMA, periféricos, memorias) se conectan por una red de buses:
|
||||
- **AHB1/AHB2 (168 MHz):** periféricos rápidos (GPIO, USB FS, DMA).
|
||||
- **APB2 (84 MHz):** periféricos intermedios (ADC, timers).
|
||||
- **APB1 (42 MHz):** periféricos lentos (USART, I2C).
|
||||
Esto evita cuellos de botella y permite que la CPU y el DMA trabajen en paralelo.
|
||||
## <mark style="background: #ADCCFFA6;">5. Interrupciones, excepciones y control del sistema</mark>
|
||||
El Cortex-M4 incluye varios módulos clave para gestionar eventos externos o internos:
|
||||
### <mark style="background: #FFB86CA6;">NVIC (Nested Vector Interrupt Controller)</mark>
|
||||
- Permite **interrupciones anidadas** con diferentes niveles de prioridad (hasta 150 líneas).
|
||||
- Las más prioritarias pueden **interrumpir** a otras de menor prioridad.
|
||||
- Soporta cambio rápido de contexto (“tail-chaining”) y evita restauraciones innecesarias.
|
||||
- También gestiona **Late-Arrival**, cuando llega una interrupción urgente en medio del cambio de contexto.
|
||||
### <mark style="background: #FFB86CA6;">SCB (System Control Block)</mark>
|
||||
Contiene info del sistema, versión del core, vector de interrupciones, etc.
|
||||
### <mark style="background: #FFB86CA6;">MPU (Memory Protection Unit)</mark>
|
||||
Define zonas de memoria con permisos específicos, previniendo accesos indebidos (muy útil con RTOS).
|
||||
### <mark style="background: #FFB86CA6;">SysTick</mark>
|
||||
Temporizador de 24 bits que genera interrupciones periódicas.
|
||||
En RTOS se usa como *tick del sistema* para planificar tareas.
|
||||
### <mark style="background: #FFB86CA6;">Tipos de excepciones más comunes</mark>
|
||||
- **Reset:** reinicia el procesador.
|
||||
- **HardFault:** error grave (por ejemplo, ISR no definida).
|
||||
- **MemManage / BusFault / UsageFault:** fallos de acceso o ejecución.
|
||||
También hay **interrupciones software**, disparadas desde código:
|
||||
- **SVCall:** llamada a supervisor (modo privilegiado).
|
||||
- **PendSV:** cambio de contexto entre tareas (RTOS).
|
||||
- **SysTick:** temporizador base del sistema operativo.
|
||||
## <mark style="background: #ADCCFFA6;">6. STM32F407: el ejemplo clásico del Cortex-M4</mark>
|
||||
El **STM32F407** de STMicroelectronics es el ejemplo típico para este núcleo:
|
||||
- Frecuencia máxima: **168 MHz** (≈210 DMIPS).
|
||||
- **1 MB Flash / 192 KB SRAM**.
|
||||
- **3 ADC de 12 bits**, **2 DAC**, **17 timers**, **2 DMA**.
|
||||
- **Interfaces**: USB OTG, CAN, SPI, I²C, USART, SDIO, Ethernet, cámara digital.
|
||||
- **FSMC:** permite usar memorias externas (Flash, SRAM).
|
||||
La memoria Flash es relativamente lenta (4 ciclos de lectura por palabra), pero ST lo soluciona con el **ART Accelerator**:
|
||||
### <mark style="background: #FFB86CA6;"> ART Accelerator</mark>
|
||||
- Usa una **prefetch queue** para precargar bloques de instrucciones.
|
||||
- Tiene **predictor de saltos** y **branch cache**, reduciendo esperas.
|
||||
- Si la predicción acierta, el procesador no pierde ciclos y mantiene **CPI ≈ 1**.
|
||||
## <mark style="background: #ADCCFFA6;">7. Arranque, reloj y desarrollo</mark>
|
||||
### <mark style="background: #FFB86CA6;">Modos de arranque (BOOT0 y BOOT1)</mark>
|
||||
- **Modo 0:** arranca desde la Flash (modo normal).
|
||||
- **Modo 1:** arranca desde el Bootloader interno (permite reprogramar por USB, UART, etc.).
|
||||
- **Modo 3:** arranque desde memoria externa.
|
||||
El Bootloader es esencial para recuperar un micro "brickeado" o actualizar firmware sin programador.
|
||||
### <mark style="background: #FFB86CA6;">Sistema de relojes</mark>
|
||||
- **HSI (16 MHz interno)** y **HSE (4–26 MHz externo)**.
|
||||
- **PLL** multiplica frecuencia hasta 168 MHz (para core y buses).
|
||||
- Algunos periféricos (USB, SDIO, I2S) necesitan la precisión del HSE.
|
||||
### <mark style="background: #FFB86CA6;">Entorno de desarrollo</mark>
|
||||
- **Keil MDK-ARM:** compilador comercial, muy optimizado (pago).
|
||||
- **STM32CubeIDE:** gratuito, basado en Eclipse + GCC, integra configuración, generación de código y depuración.
|
||||
- **MEMS Studio / X-CUBE-AI / NanoEdge AI:** herramientas de ST para sensores, IA y análisis de datos.
|
||||
## <mark style="background: #ADCCFFA6;">8. Ecosistema STM32 y placas de desarrollo</mark>
|
||||
ST ofrece un entorno completo para prototipar y desarrollar:
|
||||
- **Placas Discovery** (como STM32F4-Discovery): traen periféricos, LEDs y sensores.
|
||||
- **Nucleo Boards**: diferentes tamaños (32, 64, 144 pines), con compatibilidad Arduino.
|
||||
- **DISCO-L475VG-IOT01A**: ideal para proyectos IoT, con sensores, WiFi y BLE.
|
||||
- Nuevos modelos como **STM32MP157** (dual-core con Linux) y **STM32N6** para IA y edge computing.
|
||||
# <mark style="background: #FFF3A3A6;">Tema 2 – Sistemas en Tiempo Real</mark>
|
||||
|
||||
## <mark style="background: #ADCCFFA6;">1. Qué es un Sistema en Tiempo Real (STR)</mark>
|
||||
Un sistema en tiempo real (**RTS**, Real-Time System) es aquel en el que **la validez del resultado depende no solo de que sea correcto, sino de que se obtenga dentro de un plazo concreto (deadline)**. No basta con que funcione, debe hacerlo *a tiempo*.
|
||||
|
||||
En sistemas de propósito general lo importante es la **exactitud del resultado**, mientras que en tiempo real lo crucial es **cumplir los plazos de respuesta**, buscando comportamiento determinista más que potencia bruta.
|
||||
(Ejemplo: un STM32 a 168 MHz puede ser más fiable que un i9 a 4.5 GHz si debe garantizar tiempos exactos).
|
||||
### <mark style="background: #FFB86CA6;">Tipos de sistemas en tiempo real</mark>
|
||||
- **Tiempo real duro:** el incumplimiento del plazo provoca fallo catastrófico (ej: marcapasos).
|
||||
- **Tiempo real firme:** el retraso degrada el sistema, pero no lo destruye (ej: router).
|
||||
- **Tiempo real blando:** el retraso resta utilidad, pero el resultado sigue siendo válido (ej: termómetro).
|
||||
## <mark style="background: #ADCCFFA6;">2. Modelos de programación</mark>
|
||||
|
||||
### <mark style="background: #FFB86CA6;">Procesamiento secuencial (bucle de scan)</mark>
|
||||
Estructura básica:
|
||||
```C
|
||||
while(1)
|
||||
{
|
||||
Task1();
|
||||
Task2();
|
||||
...
|
||||
TaskN();
|
||||
}
|
||||
```
|
||||
- Todas las tareas se ejecutan una tras otra.
|
||||
- No se permiten esperas bloqueantes ni interrupciones largas.
|
||||
- El periodo total del sistema equivale a la duración del bucle.
|
||||
- Comunicación entre tareas mediante **variables globales**.
|
||||
- Tiene **variabilidad temporal**, ya que no todas las tareas tardan lo mismo.
|
||||
### <mark style="background: #FFB86CA6;">Primer plano / segundo plano (Foreground / Background)</mark>
|
||||
- Es un superloop con **interrupciones**.
|
||||
- Problemas comunes:
|
||||
- Accesos simultáneos a variables globales (condiciones de carrera).
|
||||
- Evitar esperas bloqueantes dentro del bucle.
|
||||
- Aparece el fenómeno de **Loop Jitter**: el tiempo del ciclo varía según interrupciones, caché o condiciones de código.
|
||||
### <mark style="background: #FFB86CA6;">Multitarea</mark>
|
||||
Uso de **múltiples tareas concurrentes** coordinadas por un **RTOS (Real-Time Operating System)**.
|
||||
Cada tarea puede bloquearse esperando eventos, y el planificador decide cuál se ejecuta en cada instante.
|
||||
## <mark style="background: #ADCCFFA6;">3. Cuándo usar un RTOS</mark>
|
||||
Un RTOS se emplea cuando la aplicación requiere:
|
||||
- **Determinismo:** misma respuesta ante el mismo estímulo.
|
||||
- **Fiabilidad:** detección y recuperación de errores.
|
||||
- **Complejidad:** demasiadas funciones para un simple superloop.
|
||||
- **Operación fail-soft:** capacidad de degradarse sin colapsar.
|
||||
- **Múltiples tareas concurrentes o temporizadas.**
|
||||
### <mark style="background: #FFB86CA6;">Ventajas del RTOS</mark>
|
||||
- **Modularidad:** código dividido en tareas independientes.
|
||||
- **Mantenibilidad y extensibilidad:** fácil de modificar o ampliar.
|
||||
- **Reusabilidad y portabilidad:** las tareas pueden migrar entre plataformas.
|
||||
- **Trabajo en equipo:** distintos devs trabajan en tareas separadas.
|
||||
- **Facilidad de testeo:** permite probar tareas por separado.
|
||||
- **Eficiencia energética:** evita esperas activas y permite modos de bajo consumo.
|
||||
## <mark style="background: #ADCCFFA6;">4. Núcleo y planificación de tareas</mark>
|
||||
|
||||
### <mark style="background: #FFB86CA6;">El planificador</mark>
|
||||
El **planificador** es el núcleo del RTOS y decide qué tarea se ejecuta en cada momento.
|
||||
Se ejecuta:
|
||||
- Periódicamente (por interrupción SysTick).
|
||||
- Cuando una tarea se bloquea o libera un recurso.
|
||||
Debe ser **rápido, determinista y eficiente** (normalmente implementado en ensamblador).
|
||||
### <mark style="background: #FFB86CA6;">Políticas de planificación</mark>
|
||||
- **Dinámicas:** cambian prioridades en tiempo de ejecución (ej: EDF – *Earliest Deadline First*).
|
||||
- Alta precisión pero poca estabilidad en sobrecarga.
|
||||
- **Estáticas:** prioridades fijas asignadas al compilar.
|
||||
- **Colaborativas:** la tarea decide cuándo ceder la CPU (yield).
|
||||
- Simples pero poco fiables; una tarea puede bloquear todo.
|
||||
- **Apropiativas:** la CPU pasa automáticamente a la tarea de mayor prioridad lista.
|
||||
- Determinismo alto, ideal para sistemas embebidos.
|
||||
## <mark style="background: #ADCCFFA6;">5. Tareas en un RTOS</mark>
|
||||
|
||||
### <mark style="background: #FFB86CA6;">Concepto general</mark>
|
||||
Una **tarea** es un bucle infinito que ejecuta su código y luego se bloquea esperando un evento.
|
||||
El planificador ejecuta siempre la tarea lista con mayor prioridad.
|
||||
Si varias tienen la misma prioridad → **round-robin** (rotación en cada tick).
|
||||
**Bloqueos posibles:**
|
||||
- Semáforos, colas, notificaciones.
|
||||
- Esperas temporales (por ticks o tiempo real).
|
||||
### <mark style="background: #FFB86CA6;">Tipos de tareas</mark>
|
||||
- **Cíclicas:** se repiten indefinidamente.
|
||||
- **Periódicas:** ejecutadas con una frecuencia fija.
|
||||
- **Eventuales:** activadas por eventos externos.
|
||||
- **One-Shot:** se crean, ejecutan una vez y se destruyen.
|
||||
## <mark style="background: #ADCCFFA6;">6. Control de tareas y memoria</mark>
|
||||
### <mark style="background: #FFB86CA6;">Estados de una tarea</mark>
|
||||
Estados principales:
|
||||
- **Ready:** lista para ejecutarse.
|
||||
- **Running:** ejecutándose.
|
||||
- **Blocked:** esperando evento o tiempo.
|
||||
- **Suspended/Deleted:** detenida o eliminada.
|
||||
El planificador mueve las tareas entre estos estados según su situación.
|
||||
### <mark style="background: #FFB86CA6;">Bloques de Control de Tareas (TCB)</mark>
|
||||
Cada tarea tiene un **TCB (Task Control Block)** con:
|
||||
- Puntero a pila y código.
|
||||
- Prioridad y estado.
|
||||
- Datos de uso de CPU/pila.
|
||||
- Enlaces a otras tareas (listas enlazadas).
|
||||
### <mark style="background: #FFB86CA6;">Memoria y pila</mark>
|
||||
- Cada tarea tiene su **propia pila**, donde se guarda su **contexto** (variables locales, direcciones de retorno, registros).
|
||||
- Las variables globales se almacenan en una memoria común.
|
||||
**Detección de desbordes:**
|
||||
1. **Software:** el kernel revisa el uso de pila y lanza excepción si se supera.
|
||||
2. **Hardware:** MPU/MMU detecta accesos fuera de rango y genera una excepción.
|
||||
## <mark style="background: #ADCCFFA6;">7. Hooks del RTOS y gestión de errores</mark>
|
||||
|
||||
### <mark style="background: #FFB86CA6;">Hooks</mark>
|
||||
Tareas internas del RTOS que reaccionan a eventos especiales:
|
||||
- **Idle Task:** se ejecuta cuando no hay ninguna tarea lista; no puede bloquearse.
|
||||
- **Stack Overflow Hook:** se lanza al detectar desbordamiento de pila.
|
||||
Suspende la tarea afectada y permite ejecutar acciones como reset, aviso o modo seguro.
|
||||
## <mark style="background: #ADCCFFA6;">8. Timers Software</mark>
|
||||
|
||||
### <mark style="background: #FFB86CA6;">Qué son</mark>
|
||||
Un **timer software** es una función que se ejecuta con una **periodicidad fija**.
|
||||
No pueden usar llamadas bloqueantes del RTOS.
|
||||
**Tipos:**
|
||||
- **One-Shot:** se ejecuta una sola vez tras un tiempo (ej: WatchDog).
|
||||
- **Periódico:** se repite cada cierto periodo.
|
||||
### <mark style="background: #FFB86CA6;">Gestión interna</mark>
|
||||
- Controlados por la tarea interna **TimerServiceTask**.
|
||||
- No usan timers hardware, sino el **tick del sistema**.
|
||||
- Cada timer se gestiona con una **cola de mensajes interna**.
|
||||
- Los callbacks usan la pila de TimerServiceTask (configurable).
|
||||
53
CUARTO/SSII/Teoria_2526.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# <mark style="background: #FFF3A3A6;">TEMA 1: Introducción a la Seguridad</mark>
|
||||
## <mark style="background: #ADCCFFA6;">1. Conceptos Fundamentales</mark>
|
||||
### <mark style="background: #FFB86CA6;">Seguridad Informática e Información</mark>
|
||||
Seguridad informática protege infraestructuras tecnológicas y de comunicación, mientras que la seguridad de la información abarca cualquier soporte y las personas que la gestionan. El activo más importante es la información, que debe ser clasificada y protegida.
|
||||
### <mark style="background: #FFB86CA6;">Gestión y Estrategias</mark>
|
||||
Defensa en profundidad emplea capas de salvaguardas. La seguridad por oscuridad usa el secreto en los detalles. Security by design asume que el diseño puede ser conocido y la clave es el único secreto. Moving-target defense incrementa la dificultad introduciendo cambios continuos en la configuración.
|
||||
### <mark style="background: #FFB86CA6;">Consecuencias de Mala Gestión</mark>
|
||||
La falta de gobierno en seguridad implica riesgos legales, pérdida de datos, perjuicio reputacional, bloqueo de servicios y delitos como fraude, sabotaje, chantaje o suplantación de identidad.
|
||||
## <mark style="background: #ADCCFFA6;">2. Requisitos de la Seguridad</mark>
|
||||
- Integridad: evitar cambios no autorizados o accidentales.
|
||||
- Confidencialidad: solo los autorizados acceden a información.
|
||||
- Disponibilidad: acceso garantizado a usuarios legítimos.
|
||||
- Identificación, autenticación y autorización como pilares del control de acceso.
|
||||
- No repudio y auditoría para asegurar responsabilidades.
|
||||
# <mark style="background: #FFF3A3A6;">TEMA 2: Integridad de la Información</mark>
|
||||
## <mark style="background: #ADCCFFA6;">1. Definición y Objetivos</mark>
|
||||
Prevenir, detectar y responder a ataques que comprometan la información. Implementar medidas para monitorización y respuesta en caso de incidentes.
|
||||
## <mark style="background: #ADCCFFA6;">2. Hash y Funciones Resumen</mark>
|
||||
Las funciones hash crean resúmenes únicos para detectar alteraciones. Los algoritmos clásicos incluyen MD5, SHA-1 y los más robustos: SHA-224, SHA-256, SHA-384, SHA-512 y SHA-3. MD5 y SHA-1 son vulnerables frente a colisiones hoy día.
|
||||
### <mark style="background: #FFB86CA6;">Propiedades de un Hash Seguro</mark>
|
||||
- Fácil cálculo
|
||||
- Unidireccionalidad
|
||||
- Resistencia a colisiones e inversión
|
||||
## <mark style="background: #ADCCFFA6;">3. Implementación Práctica</mark>
|
||||
Lenguajes modernos (Java, Python) proveen librerías para generar y verificar hashes. Ejemplos: MessageDigest en Java, hashlib en Python.
|
||||
## <mark style="background: #ADCCFFA6;">4. Integridad en Almacenamiento</mark>
|
||||
La monitorización de integridad de ficheros (Tripwire, VeriSys, Nikto) es clave para detectar cambios no autorizados. Se recomienda almacenar los resúmenes en lugares protegidos.
|
||||
## <mark style="background: #ADCCFFA6;">5. Contraseñas y Salting</mark>
|
||||
El uso de salt (valor aleatorio añadido a la contraseña antes del hash) previene ataques de diccionario y rainbow tables. Se recomienda salt variable. Funciones de key stretching como PBKDF2, Bcrypt y Scrypt aumentan la seguridad.
|
||||
## <mark style="background: #ADCCFFA6;">6. Aplicaciones y Utilidades</mark>
|
||||
- Cadena de custodia en análisis forense.
|
||||
- Identificación rápida de archivos (Git, Dropbox).
|
||||
- Antivirus y descarga segura de software.
|
||||
- Blockchain y sellado de documentos digitales.
|
||||
- Limpieza segura y recuperación de datos (Eraser, Data Shredder, Photorec).
|
||||
# <mark style="background: #FFF3A3A6;">TEMA 3: Confidencialidad de la Información</mark>
|
||||
## <mark style="background: #ADCCFFA6;">1. Cifrado Simétrico</mark>
|
||||
Usa una clave secreta compartida. Ejemplos: DES, 3DES, Blowfish, AES, Camellia. AES es el estándar moderno, eficiente y robusto. Existen cifradores de bloque y flujo.
|
||||
### <mark style="background: #FFB86CA6;">Modos de Operación</mark>
|
||||
ECB cifra bloques independientemente (menos seguro), CBC usa XOR con el bloque anterior (más seguro), CFB y OFB adecuados para streaming. Los modos de relleno permiten cifrar mensajes no múltiplos del tamaño de bloque.
|
||||
## <mark style="background: #ADCCFFA6;">2. Cifrado Asimétrico</mark>
|
||||
Emplea un par de claves pública/privada (RSA, DSA, ElGamal, ECC). La clave pública puede ser divulgada libremente; la clave privada debe mantenerse secreta.
|
||||
### <mark style="background: #FFB86CA6;">Características del Cifrado Asimétrico</mark>
|
||||
- Más seguro para intercambio de claves, pero más lento y requiere claves más largas.
|
||||
- Problemas: autenticidad de claves públicas, compromiso de la clave privada, pérdida y lentitud.
|
||||
## <mark style="background: #ADCCFFA6;">3. Acuerdo de Claves y Protocolos</mark>
|
||||
Protocolos como Diffie-Hellman permiten que dos partes acuerden una clave común sin compartirla explícitamente por el canal. Usados en VPN y otros entornos seguros.
|
||||
## <mark style="background: #ADCCFFA6;">4. Protocolos Criptográficos</mark>
|
||||
SSL/TLS y SSH combinan criptografía simétrica y asimétrica para autenticación y transmisión segura. WS utilizan XML Encryption para proteger mensajes a nivel de aplicación.
|
||||
### <mark style="background: #FFB86CA6;">Implementación en Java y OpenSSL</mark>
|
||||
Java proporciona clases específicas (Cipher, KeyPairGenerator, SecureRandom). OpenSSL es el toolkit estándar para SSL/TLS.
|
||||
## <mark style="background: #ADCCFFA6;">5. Esteganografía</mark>
|
||||
Técnica para ocultar información dentro de otros contenidos. Puede emplearse junto a la criptografía para incrementar la confidencialidad.
|
||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 220 KiB After Width: | Height: | Size: 220 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 420 KiB After Width: | Height: | Size: 420 KiB |
|
Before Width: | Height: | Size: 420 KiB After Width: | Height: | Size: 420 KiB |
|
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 279 KiB |
|
Before Width: | Height: | Size: 342 KiB After Width: | Height: | Size: 342 KiB |
|
Before Width: | Height: | Size: 283 KiB After Width: | Height: | Size: 283 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 409 KiB After Width: | Height: | Size: 409 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 438 KiB After Width: | Height: | Size: 438 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 230 KiB |
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 183 KiB |
|
Before Width: | Height: | Size: 313 KiB After Width: | Height: | Size: 313 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 197 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 139 KiB |