# Subsystem: include (page 1 of 5)
Pages: [KB_include.md](KB_include.md), [KB_include_p2.md](KB_include_p2.md), [KB_include_p3.md](KB_include_p3.md), [KB_include_p4.md](KB_include_p4.md), [KB_include_p5.md](KB_include_p5.md)

## include/anti_fp.h
- Doc: fp_accept_language_header: #define FP_SEC_FETCH_DEST_NAV  "document" #define...
- Layer: utility
- Language: h
- Symbols:
  - `fp_timer_resolution_ms` (function, line 52) `uint64_t fp_timer_resolution_ms(void);`
  - `fp_coarsen_time_ms` (function, line 53) `uint64_t fp_coarsen_time_ms(uint64_t raw_ms);`
  - `fp_user_agent` (function, line 57) `const char *fp_user_agent(void);`
  - `fp_accept_language` (function, line 58) `const char *fp_accept_language(void);`
  - `fp_accept_language_header` (function, line 59) `const char *fp_accept_language_header(void);`
  - `fp_timezone` (function, line 60) `const char *fp_timezone(void);`
  - `fp_platform` (function, line 61) `const char *fp_platform(void);`
  - `fp_vendor` (function, line 62) `const char *fp_vendor(void);`
  - `fp_hardware_concurrency` (function, line 63) `int fp_hardware_concurrency(void);`
  - `fp_device_memory_gb` (function, line 64) `int fp_device_memory_gb(void);`
  - `properties` (function, line 67) `* Legacy navigator properties (Hito 30b): normalized Firefox values shared by * js_env and the network layer so JS...`
  - `fp_app_code_name` (function, line 71) `const char *fp_app_code_name(void);`
  - `fp_product` (function, line 72) `const char *fp_product(void);`
  - `fp_app_name` (function, line 73) `const char *fp_app_name(void);`
  - `fp_product_sub` (function, line 74) `const char *fp_product_sub(void);`
  - `fp_oscpu` (function, line 75) `const char *fp_oscpu(void);`
  - `fp_build_id` (function, line 76) `const char *fp_build_id(void);`
  - `fp_max_touch_points` (function, line 77) `int fp_max_touch_points(void);`
  - `fp_on_line` (function, line 78) `int fp_on_line(void);`
  - `fp_cookie_enabled` (function, line 79) `int fp_cookie_enabled(void);`
  - `fp_bucket_screen` (function, line 83) `void fp_bucket_screen(int w, int h, int *out_w, int *out_h);`
  - `fp_perturb` (function, line 88) `void fp_perturb(uint8_t *buf, size_t len, uint64_t session_key);`
  - `domain` (function, line 91) `* registrable domain (eTLD+1). Same (session_key, domain) => same key (poisoning * is stable within a site);`
  - `probability` (function, line 93) `* keys with overwhelming probability (canvas/audio noise is not linkable across * sites, defeating cross-origin...`
  - `fp_origin_key` (function, line 98) `uint64_t fp_origin_key(uint64_t session_key, const char *registrable_domain);`
  - `FREEDOM_ANTI_FP_H` (macro, line 2) `#define FREEDOM_ANTI_FP_H`
  - `FP_TIMER_RESOLUTION_MS` (macro, line 22) `#define FP_TIMER_RESOLUTION_MS`
  - `FP_USER_AGENT` (macro, line 31) `#define FP_USER_AGENT`
  - `FP_ACCEPT_LANGUAGE` (macro, line 33) `#define FP_ACCEPT_LANGUAGE`
  - `FP_ACCEPT_LANGUAGE_HEADER` (macro, line 34) `#define FP_ACCEPT_LANGUAGE_HEADER`
  - `FP_ACCEPT_HEADER_NAV` (macro, line 40) `#define FP_ACCEPT_HEADER_NAV`
  - `FP_SEC_FETCH_DEST_NAV` (macro, line 45) `#define FP_SEC_FETCH_DEST_NAV`
  - `FP_SEC_FETCH_MODE_NAV` (macro, line 46) `#define FP_SEC_FETCH_MODE_NAV`
  - `FP_SEC_FETCH_SITE_NONE` (macro, line 47) `#define FP_SEC_FETCH_SITE_NONE`
  - `FP_SEC_FETCH_USER_ON` (macro, line 48) `#define FP_SEC_FETCH_USER_ON`
- Imported by: `include/secure_fetch.h`, `src/anti_fp.c`, `src/identity.c`, `src/js_env.c`, `src/secure_fetch.c`, `src/tab.c`, `tests/test_anti_fp.c`, `tests/test_identity.c`

## include/block_flow.h
- Doc: block_flow (bf_) -- vertical margin collapsing for block-level boxes.
- Layer: utility
- Language: h
- Symbols:
  - `bf_collapse_n` (function, line 33) `* bf_collapse_n((double[])`
  - `ABSENT` (function, line 26) `* as ABSENT (0) rather than propagated: a poisoned length must not spread into * the geometry of the rest of the...`
  - `bf_margins_adjoin` (function, line 43) `int bf_margins_adjoin(double border_px, double padding_px);`
  - `FREEDOM_BLOCK_FLOW_H` (macro, line 11) `#define FREEDOM_BLOCK_FLOW_H`
- Imported by: `gui/browser_ui.c`, `src/block_flow.c`, `tests/test_block_flow.c`

## include/box_blur.h
- Doc: Gaussian blur of an 8-bit alpha mask by three box passes per axis (spec/box_blur.md).
- Layer: utility
- Language: h
- Symbols:
  - `bb_box_sizes` (function, line 16) `int bb_box_sizes(double sigma, int sizes[3]);`
  - `BB_MAX_PIXELS` (function, line 20) `* arguments or a mask larger than BB_MAX_PIXELS (buffer untouched). */ int bb_blur_a8(unsigned char *buf, int w, int...`
  - `alpha` (function, line 26) `* no pixel has alpha (nothing to blur), 1 otherwise. Everything outside rect stays 0 after the blur, * so blurring...`
  - `FREEDOM_BOX_BLUR_H` (macro, line 2) `#define FREEDOM_BOX_BLUR_H`
  - `BB_MAX_PIXELS` (macro, line 12) `#define BB_MAX_PIXELS`
- Imported by: `gui/browser_ui.c`, `src/box_blur.c`, `tests/test_box_blur.c`

## include/box_style.h
- Doc: bx_edges: anything longer fails closed instead of truncating into a wrong match. #define...
- Layer: utility
- Language: h
- Symbols:
  - `bx_edges` (struct, line 46)
  - `bx_box` (struct, line 50)
  - `bx_hplace` (struct, line 63)
  - `bx_bg_layer` (struct, line 321)
  - `bx_display` (enum, line 35)
  - `bx_status` (enum, line 56)
  - `bx_ua_tag` (enum, line 84)
  - `bx_table_role` (enum, line 127)
  - `left` (type_alias, line 46) `typedef struct bx_edges { double top, right, bottom, left;`
  - `display` (type_alias, line 49) `typedef struct bx_box { bx_display display;`
  - `x_off` (type_alias, line 63) `typedef struct bx_hplace { double x_off;`
  - `nat_h` (type_alias, line 321) `typedef struct bx_bg_layer { double nat_w, nat_h;`
  - `box` (function, line 115) `* in_list nonzero when the block sits inside a list item: it then takes * the <li> box (zero margin), keeping items...`
  - `BX_TROLE_NONE` (function, line 144) `* BX_TROLE_NONE (an unrecognised element joins no table -- fail closed). */ bx_table_role bx_table_role_of(const...`
  - `bx_display_name` (function, line 156) `const char *bx_display_name(bx_display d);`
  - `bx_width_cap` (function, line 182) `double bx_width_cap(int w_px, int w_pct, double avail_w);`
  - `bx_width_cap2` (function, line 187) `double bx_width_cap2(int w_px, int w_pct, int mw_px, int mw_pct, double avail_w);`
  - `bx_replaced_box` (function, line 206) `int bx_replaced_box(int w_px, int w_pct, int aspect_num, int aspect_den, double avail_w, double *out_w, double *out_h);`
  - `bx_border_box_h` (function, line 220) `double bx_border_box_h(double declared_h, int border_box, double pad_t, double pad_b, double bord_t, double bord_b);`
  - `block` (function, line 226) `* indefinite containing block (cb_h < 0) the value behaves as auto: -1. * Without a percentage it is px_val...`
  - `bx_line_height_px` (function, line 239) `double bx_line_height_px(int line_scale, double font_px);`
  - `bx_definite_content_h` (function, line 241) `double bx_definite_content_h(double h, double min_h, double max_h, int border_box, double v_edges);`
  - `page` (function, line 245) `* instead of letting it extend the page (CSS 2.1 section 10.7 + 11.1.1). That * is the case unless BOTH overflow...`
  - `bx_lp_px` (function, line 267) `double bx_lp_px(int px_val, int pct_pm, double basis);`
  - `bx_content_cap` (function, line 275) `double bx_content_cap(double width_cap, int border_box, double pad_l, double pad_r, double bord_l, double bord_r);`
  - `bx_border_span` (function, line 286) `double bx_border_span(double width_cap, int border_box, double pad_l, double pad_r, double bord_l, double bord_r);`
  - `bx_flex_max_clamp` (function, line 292) `double bx_flex_max_clamp(double outer_basis, double mw_cap, int border_box, double pad_bord_h, double margin_h);`
  - `bx_flex_min_clamp` (function, line 298) `double bx_flex_min_clamp(double outer_basis, double min_w, int border_box, double pad_bord_h, double margin_h);`
  - `bx_background_layer` (function, line 331) `int bx_background_layer(const bx_bg_layer *in, double *out_w, double *out_h, double *out_x, double *out_y);`
  - `FREEDOM_BOX_STYLE_H` (macro, line 2) `#define FREEDOM_BOX_STYLE_H`
  - `BX_TAG_NAME_MAX` (macro, line 33) `#define BX_TAG_NAME_MAX`
- Depends on: `include/css.h`
- Imported by: `gui/browser_ui.c`, `gui/bui_mask_img.c`, `include/box_tree.h`, `src/box_style.c`, `src/box_tree.c`, `src/dom_debug.c`, `src/page_view.c`, `src/render_doc.c`, `tests/test_box_style.c`, `tests/test_dom_debug.c`, `tests/test_page_view.c`, `tests/test_render_doc.c`

## include/box_tree.h
- Doc: bt_positioned: Stage 2: one positioned box in the final paint order.
- Layer: utility
- Language: h
- Symbols:
  - `bt_node` (struct, line 67)
  - `bt_positioned` (struct, line 146)
  - `bt_status` (enum, line 153)
  - `display` (type_alias, line 66) `typedef struct bt_node { bx_display display;`
  - `box_index` (type_alias, line 146) `typedef struct bt_positioned { size_t box_index;`
  - `closed` (function, line 34) `* fails closed (BT_ERR_RANGE) instead of overflowing the stack. */ #define BT_MAX_DEPTH 64u #define BT_MAX_CHILDREN...`
  - `one` (function, line 99) `* of forcing them all onto one (flex-wrap);`
  - `line` (function, line 115) `* its line (already resolved from align-self / the * container's align-items by the caller). */ /* this node as a...`
  - `node` (function, line 162) `* node (x/y parent-relative, w/h border-box). display:none nodes get a zero rect and * take no space. The caller...`
  - `flow` (function, line 201) `* position is where the box would have started in flow (CSS 2.2 §10.3.7/§10.6.4);`
  - `bottom` (function, line 208) `* bottom with auto top still anchors bottom (R8). * `placed` (may be NULL) marks which boxes have an in-flow rect in...`
  - `placed` (function, line 215) `* box counts as placed (legacy behaviour). * bt_resolve_positioning delegates with NULL arrays (legacy behaviour)....`
  - `bt_box_hidden` (function, line 233) `int bt_box_hidden(const pv_box_def *boxes, size_t nbox, size_t bid);`
  - `bt_in_subtree` (function, line 239) `int bt_in_subtree(const pv_box_def *boxes, size_t nbox, size_t root, size_t bid);`
  - `bt_oof_anchor` (function, line 253) `int bt_oof_anchor(const pv_box_def *boxes, size_t nbox, int bid);`
  - `bt_oof_root` (function, line 254) `int bt_oof_root(const pv_box_def *boxes, size_t nbox, int bid);`
  - `insets` (function, line 258) `* minus the two insets (px half + per-mille half of cb), an auto/unset inset * counting 0, never below 0. *both (may...`
  - `bt_containing_block` (function, line 268) `void bt_containing_block(const pv_box_def *boxes, size_t nbox, size_t i, const double *box_x, const double *box_y...`
  - `bt_defer_roots` (function, line 291) `size_t bt_defer_roots(const pv_box_def *boxes, size_t nbox, const bt_positioned *pos, size_t npos, const char...`
  - `FREEDOM_BOX_TREE_H` (macro, line 2) `#define FREEDOM_BOX_TREE_H`
  - `BT_MAX_DEPTH` (macro, line 35) `#define BT_MAX_DEPTH`
  - `BT_MAX_CHILDREN` (macro, line 36) `#define BT_MAX_CHILDREN`
  - `BT_MAX_POSITIONED` (macro, line 42) `#define BT_MAX_POSITIONED`
  - `BT_POS_STATIC` (macro, line 47) `#define BT_POS_STATIC`
  - `BT_POS_RELATIVE` (macro, line 48) `#define BT_POS_RELATIVE`
  - `BT_POS_ABSOLUTE` (macro, line 49) `#define BT_POS_ABSOLUTE`
  - `BT_POS_FIXED` (macro, line 50) `#define BT_POS_FIXED`
  - `BT_POS_STICKY` (macro, line 51) `#define BT_POS_STICKY`
  - `BT_ALIGN_START` (macro, line 58) `#define BT_ALIGN_START`
  - `BT_ALIGN_CENTER` (macro, line 59) `#define BT_ALIGN_CENTER`
  - `BT_ALIGN_END` (macro, line 60) `#define BT_ALIGN_END`
  - `BT_ALIGN_STRETCH` (macro, line 61) `#define BT_ALIGN_STRETCH`
  - `BT_MAUTO_LEFT` (macro, line 64) `#define BT_MAUTO_LEFT`
  - `BT_MAUTO_RIGHT` (macro, line 65) `#define BT_MAUTO_RIGHT`
- Depends on: `include/box_style.h`, `include/flex_layout.h`, `include/page_view.h`
- Imported by: `gui/browser_ui.c`, `src/box_tree.c`, `src/page_view.c`, `src/tab.c`, `tests/test_box_tree.c`

## include/browser.h
- Doc: browser_free: Zero-initialise or reset a state.
- Layer: utility
- Language: h
- Symbols:
  - `browser_state` (struct, line 27)
  - `browser_status` (enum, line 52)
  - `state` (function, line 62) `* state (frees old history and page buffers). */ browser_status browser_init(browser_state *bs);`
  - `browser_free` (function, line 66) `void browser_free(browser_state *bs);`
  - `browser_set_page` (function, line 71) `* browser_set_page() with the result. */ browser_status browser_navigate(browser_state *bs, const char *url);`
  - `browser_entry_doc` (function, line 87) `int browser_entry_doc(const browser_state *bs, size_t pos);`
  - `browser_doc_index` (function, line 91) `int browser_doc_index(const browser_state *bs);`
  - `browser_can_back` (function, line 94) `int browser_can_back(const browser_state *bs);`
  - `browser_can_forward` (function, line 95) `int browser_can_forward(const browser_state *bs);`
  - `browser_current_url` (function, line 96) `const char *browser_current_url(const browser_state *bs);`
  - `browser_is_exception` (function, line 99) `int browser_is_exception(const browser_state *bs, const char *host);`
  - `browser_url_bar_selection` (function, line 131) `int browser_url_bar_selection(const browser_state *bs, size_t *start, size_t *len);`
  - `browser_url_bar_delete_selection` (function, line 135) `int browser_url_bar_delete_selection(browser_state *bs);`
  - `copied` (function, line 143) `* copied (truncated to fit) and shown until now_ms reaches the expiry * (now_ms + BROWSER_STATUS_DURATION_MS). A...`
  - `browser_status_text` (function, line 150) `const char *browser_status_text(const browser_state *bs, uint64_t now_ms);`
  - `FREEDOM_BROWSER_H` (macro, line 2) `#define FREEDOM_BROWSER_H`
  - `BROWSER_URL_MAX` (macro, line 21) `#define BROWSER_URL_MAX`
  - `BROWSER_STATUS_MAX` (macro, line 24) `#define BROWSER_STATUS_MAX`
  - `BROWSER_STATUS_DURATION_MS` (macro, line 25) `#define BROWSER_STATUS_DURATION_MS`
- Imported by: `gui/browser_ui.c`, `src/browser.c`, `tests/test_browser.c`

## include/cached_fetch.h
- Doc: cf_set_store: Cache-aware GET.
- Layer: infrastructure
- Language: h
- Symbols:
  - `cf_set_store` (function, line 30) `void cf_set_store(hc_store *store);`
  - `cf_store` (function, line 31) `hc_store *cf_store(void);`
  - `cf_attach_redirect_memory` (function, line 38) `void cf_attach_redirect_memory(hc_store *store);`
  - `FREEDOM_CACHED_FETCH_H` (macro, line 2) `#define FREEDOM_CACHED_FETCH_H`
- Depends on: `include/http_cache.h`, `include/secure_fetch.h`
- Imported by: `gui/browser_ui.c`, `src/cached_fetch.c`, `tests/test_cached_fetch.c`

## include/compositor.h
- Doc: cx_style: A box's resolved style, in the SAME value-spaces as css.h: position uses css_position...
- Layer: utility
- Language: h
- Symbols:
  - `cx_style` (struct, line 46)
  - `cx_item` (struct, line 69)
  - `cx_layer` (enum, line 27)
  - `position` (type_alias, line 46) `typedef struct cx_style { int position;`
  - `layer` (type_alias, line 69) `typedef struct cx_item { cx_layer layer;`
  - `cx_forms_stacking_context` (function, line 60) `int cx_forms_stacking_context(const cx_style *s);`
  - `cx_item_compare` (function, line 80) `int cx_item_compare(const cx_item *a, const cx_item *b);`
  - `cx_sort` (function, line 84) `void cx_sort(cx_item *items, size_t n);`
  - `FREEDOM_COMPOSITOR_H` (macro, line 2) `#define FREEDOM_COMPOSITOR_H`
- Imported by: `gui/browser_ui.c`, `src/box_tree.c`, `src/compositor.c`, `tests/test_compositor.c`

## include/css.h
- Doc: css_style: A resolved presentation.
- Layer: utility
- Language: h
- Symbols:
  - `css_style` (struct, line 599)
  - `css_sel` (struct, line 1013)
  - `css_media` (struct, line 1015)
  - `css_drop` (struct, line 1083)
  - `css_drop_log` (struct, line 1095)
  - `css_attr` (struct, line 1124)
  - `css_element` (struct, line 1134)
  - `cvr_table` (struct, line 1202)
  - `css_status` (enum, line 29)
  - `css_align` (enum, line 35)
  - `css_display` (enum, line 43)
  - `css_justify` (enum, line 70)
  - `css_font_family` (enum, line 119)
  - `css_text_transform` (enum, line 125)
  - `css_valign` (enum, line 130)
  - `css_white_space` (enum, line 136)
  - `css_list_style` (enum, line 142)
  - `css_position` (enum, line 154)
  - `css_box_sizing` (enum, line 161)
  - `css_border_style` (enum, line 168)
  - `css_flex_direction` (enum, line 175)
  - `css_flex_wrap` (enum, line 181)
  - `css_align_kw` (enum, line 187)
  - `css_grid_flow` (enum, line 194)
  - `css_float` (enum, line 200)
  - `css_clear` (enum, line 206)
  - `css_visibility` (enum, line 214)
  - `css_overflow` (enum, line 223)
  - `css_cursor` (enum, line 233)
  - `css_text_overflow` (enum, line 246)
  - `css_word_break` (enum, line 260)
  - `css_text_decoration_style` (enum, line 267)
  - `css_direction` (enum, line 274)
  - `css_border_collapse` (enum, line 280)
  - `css_empty_cells` (enum, line 286)
  - `css_caption_side` (enum, line 292)
  - `css_table_layout` (enum, line 298)
  - `css_font_variant` (enum, line 304)
  - `css_hyphens` (enum, line 310)
  - `css_user_select` (enum, line 316)
  - `css_appearance` (enum, line 322)
  - `css_pointer_events` (enum, line 328)
  - `css_bg_repeat` (enum, line 333)
  - `css_bg_size` (enum, line 338)
  - `css_bg_clip` (enum, line 342)
  - `css_bg_origin` (enum, line 347)
  - `css_bg_attachment` (enum, line 351)
  - `css_isolation` (enum, line 355)
  - `css_content_visibility` (enum, line 364)
  - `css_image_rendering` (enum, line 368)
  - `css_color_scheme` (enum, line 372)
  - `css_print_color_adjust` (enum, line 376)
  - `css_forced_color_adjust` (enum, line 380)
  - `css_mix_blend` (enum, line 385)
  - `css_object_fit` (enum, line 393)
  - `css_list_pos` (enum, line 405)
  - `css_font_kerning` (enum, line 409)
  - `css_text_rendering` (enum, line 413)
  - `css_font_stretch` (enum, line 418)
  - `css_resize` (enum, line 424)
  - `css_scroll_behavior` (enum, line 428)
  - `css_touch_action` (enum, line 432)
  - `css_overscroll` (enum, line 436)
  - `css_column_fill` (enum, line 441)
  - `css_column_span` (enum, line 446)
  - `css_backface` (enum, line 450)
  - `css_pct_slot` (enum, line 527)
  - `css_drop_cause` (enum, line 1070)
  - `color` (type_alias, line 599) `typedef struct css_style { int color;`
  - `css_sheet` (type_alias, line 1007) `typedef struct css_sheet css_sheet;`
  - `prefers_dark` (type_alias, line 1014) `typedef struct css_media { int prefers_dark;`
  - `prop` (type_alias, line 1083) `typedef struct css_drop { char prop[CSS_DROP_PROP_MAX];`
  - `verbatim` (function, line 85) `* the quoted row strings verbatim (flex_layout parses them);`
  - `POINTER` (function, line 228) `* POINTER (shows the hand cursor already used for links) from every other value * (shows the default arrow);`
  - `family` (function, line 710) `* LOCAL family (spec/text_shape.md section 7);`
  - `translate` (function, line 881) `* translate()/translateX()/translateY();`
  - `scaleY` (function, line 882) `* scaleY() as a PERCENT of identity (100 = scale(1), matching font_scale's * convention);`
  - `declared` (function, line 886) `* function was not declared (identity: 0 offset / 100% scale / 0deg). * Percentage translate arguments are not...`
  - `element` (function, line 891) `* so two different rules matching the same element (e.g. one setting * translate, a more specific one setting...`
  - `slots` (function, line 898) `* parse time into ALL seven slots (singular matrices fail closed);`
  - `css_sheet_uses_counters` (function, line 1043) `int css_sheet_uses_counters(const css_sheet *sheet);`
  - `palette` (function, line 1060) `* so an inactive theme * palette (a dark palette in a light render) can never clobber the active one. *...`
  - `css_free` (function, line 1110) `void css_free(css_sheet *s);`
  - `order` (function, line 1113) `* cascade order (specificity, then document order), then the element's own * inline_style (which wins)....`
  - `inherited_px` (function, line 1226) `* whose PARENT computes to inherited_px (<= 0 = unknown -> the CSS initial). * * Exported because the caller that...`
  - `css_ua_heading_em` (function, line 1238) `double css_ua_heading_em(int level);`
  - `name` (function, line 1243) `* name (NULL = not a heading). */ double css_computed_font_size_for_tag(const css_style *o, double inherited_px...`
  - `css_font_face_count` (function, line 1253) `size_t css_font_face_count(const css_sheet *sheet);`
  - `css_font_face_at` (function, line 1254) `int css_font_face_at(const css_sheet *sheet, size_t i, char *family, size_t fam_cap, char *src_url, size_t url_cap);`
  - `css_resolve_anim_keyframes` (function, line 1262) `void css_resolve_anim_keyframes(css_style *s, const css_sheet *sheet);`
  - `FREEDOM_CSS_H` (macro, line 2) `#define FREEDOM_CSS_H`
  - `CSS_GAP_MAX` (macro, line 81) `#define CSS_GAP_MAX`
  - `CSS_GRID_COLS_MAX` (macro, line 82) `#define CSS_GRID_COLS_MAX`
  - `CSS_GRID_TRACKS_MAX` (macro, line 83) `#define CSS_GRID_TRACKS_MAX`
  - `CSS_GRID_AREAS_MAX` (macro, line 89) `#define CSS_GRID_AREAS_MAX`
  - `CSS_GRAD_STOPS_MAX` (macro, line 90) `#define CSS_GRAD_STOPS_MAX`
  - `CSS_LINE_MIN` (macro, line 91) `#define CSS_LINE_MIN`
  - `CSS_LINE_MAX` (macro, line 92) `#define CSS_LINE_MAX`
  - `CSS_LINE_ABS_BASE` (macro, line 97) `#define CSS_LINE_ABS_BASE`
  - `CSS_LINE_ABS_MAX_PX` (macro, line 98) `#define CSS_LINE_ABS_MAX_PX`
  - `CSS_SVG_PAINT_NONE` (macro, line 99) `#define CSS_SVG_PAINT_NONE`
  - `CSS_FONT_LIST_MAX` (macro, line 100) `#define CSS_FONT_LIST_MAX`
  - `CSS_URL_MAX` (macro, line 101) `#define CSS_URL_MAX`
  - `CSS_DECO_UNDERLINE` (macro, line 113) `#define CSS_DECO_UNDERLINE`
  - `CSS_DECO_LINE_THROUGH` (macro, line 114) `#define CSS_DECO_LINE_THROUGH`
  - `CSS_DECO_OVERLINE` (macro, line 115) `#define CSS_DECO_OVERLINE`
  - `CSS_CONTAIN_SIZE` (macro, line 359) `#define CSS_CONTAIN_SIZE`
  - `CSS_CONTAIN_LAYOUT` (macro, line 360) `#define CSS_CONTAIN_LAYOUT`
  - `CSS_CONTAIN_STYLE` (macro, line 361) `#define CSS_CONTAIN_STYLE`
  - `CSS_CONTAIN_PAINT` (macro, line 362) `#define CSS_CONTAIN_PAINT`
  - `CSS_OBJPOS_PACK` (macro, line 401) `#define CSS_OBJPOS_PACK(x_pm, y_pm)`
  - `CSS_OBJPOS_X` (macro, line 402) `#define CSS_OBJPOS_X(p)`
  - `CSS_OBJPOS_Y` (macro, line 403) `#define CSS_OBJPOS_Y(p)`
  - `CSS_BORDER_W_MAX` (macro, line 457) `#define CSS_BORDER_W_MAX`
  - `CSS_BORDER_SPACING_MAX` (macro, line 458) `#define CSS_BORDER_SPACING_MAX`
  - `CSS_FLEX_FACTOR_MAX` (macro, line 459) `#define CSS_FLEX_FACTOR_MAX`
  - `CSS_GRID_SPAN_MAX` (macro, line 460) `#define CSS_GRID_SPAN_MAX`
  - `CSS_SPACING_MAX` (macro, line 464) `#define CSS_SPACING_MAX`
  - `CSS_SHADOW_MAX` (macro, line 465) `#define CSS_SHADOW_MAX`
  - `CSS_BSHADOW_LAYERS` (macro, line 466) `#define CSS_BSHADOW_LAYERS`
  - `CSS_LEN_MAX` (macro, line 471) `#define CSS_LEN_MAX`
  - `CSS_LEN_UNSET` (macro, line 472) `#define CSS_LEN_UNSET`
  - `CSS_LEN_AUTO` (macro, line 473) `#define CSS_LEN_AUTO`
  - `CSS_LEN_END` (macro, line 474) `#define CSS_LEN_END`
  - `CSS_LEN_MIN_CONTENT` (macro, line 481) `#define CSS_LEN_MIN_CONTENT`
  - `CSS_LEN_MAX_CONTENT` (macro, line 482) `#define CSS_LEN_MAX_CONTENT`
  - `CSS_LEN_FIT_CONTENT` (macro, line 483) `#define CSS_LEN_FIT_CONTENT`
  - `CSS_LEN_IS_INTRINSIC` (macro, line 486) `#define CSS_LEN_IS_INTRINSIC(v)`
  - `CSS_PCT_MAX` (macro, line 509) `#define CSS_PCT_MAX`
  - `CSS_EM_MILLI_MAX` (macro, line 515) `#define CSS_EM_MILLI_MAX`
  - `CSS_FONT_SIZE_MAX` (macro, line 521) `#define CSS_FONT_SIZE_MAX`
  - `CSS_COLUMN_COUNT_MAX` (macro, line 525) `#define CSS_COLUMN_COUNT_MAX`
  - `CSS_MAX_COMPOUNDS` (macro, line 580) `#define CSS_MAX_COMPOUNDS`
  - `CSS_MAX_ATTR_SEL` (macro, line 584) `#define CSS_MAX_ATTR_SEL`
  - `CSS_MAX_PSEUDO_SEL` (macro, line 588) `#define CSS_MAX_PSEUDO_SEL`
  - `CSS_NTH_MAX` (macro, line 592) `#define CSS_NTH_MAX`
  - `CSS_MAX_KF_STOPS` (macro, line 921) `#define CSS_MAX_KF_STOPS`
  - `CSS_MEDIA_DEFAULT_WIDTH` (macro, line 1027) `#define CSS_MEDIA_DEFAULT_WIDTH`
  - `CSS_MEDIA_DEFAULT_HEIGHT` (macro, line 1032) `#define CSS_MEDIA_DEFAULT_HEIGHT`
  - `CSS_DROP_PROP_MAX` (macro, line 1075) `#define CSS_DROP_PROP_MAX`
  - `CSS_DROP_VAL_MAX` (macro, line 1076) `#define CSS_DROP_VAL_MAX`
  - `CSS_PSEUDO_BEFORE` (macro, line 1212) `#define CSS_PSEUDO_BEFORE`
  - `CSS_PSEUDO_AFTER` (macro, line 1213) `#define CSS_PSEUDO_AFTER`
  - `CSS_PSEUDO_PLACEHOLDER` (macro, line 1214) `#define CSS_PSEUDO_PLACEHOLDER`
- Depends on: `include/css_color.h`, `include/css_counter.h`
- Imported by: `gui/browser_ui.c`, `gui/bui_mask_img.c`, `gui/bui_theme.c`, `include/box_style.h`, `include/css_chain.h`, `include/css_computed.h`, `include/css_decl.h`, `include/css_select.h`, `include/page_view.h`, `src/box_tree.c`, `src/compositor.c`, `src/css.c`, `src/css_box.c`, `src/css_length.c`, `src/css_text.c`, `src/css_values.c`, `src/dom_debug.c`, `src/page_view.c`, `src/render_doc.c`, `src/tab.c`, `src/text_case.c`, `src/text_shape.c`, `tests/test_box_tree.c`, `tests/test_compositor.c`, `tests/test_css.c`, `tests/test_css_drops.c`, `tests/test_css_gradient.c`, `tests/test_css_length.c`, `tests/test_css_text.c`, `tests/test_css_values.c`, `tests/test_dom_debug.c`, `tests/test_page_view.c`, `tests/test_render_doc.c`, `tests/test_tab.c`, `tests/test_text_case.c`, `tests/test_text_shape.c`, `tests/test_webfont_load.c`

## include/css_atrule.h
- Doc: car_ops: The questions @supports asks the caller's own engine. prop is lowercased and * both...
- Layer: utility
- Language: h
- Symbols:
  - `car_ops` (struct, line 22)
  - `car_layers` (struct, line 31)
  - `car_supports` (function, line 29) `int car_supports(const char *s, size_t a, size_t b, const car_ops *ops);`
  - `car_layer_rank` (function, line 40) `int car_layer_rank(car_layers *L, const char *name, size_t len);`
  - `car_effective_spec` (function, line 44) `int car_effective_spec(int spec, int layer, int important);`
  - `FREEDOM_CSS_ATRULE_H` (macro, line 2) `#define FREEDOM_CSS_ATRULE_H`
  - `CAR_MAX_DEPTH` (macro, line 15) `#define CAR_MAX_DEPTH`
  - `CAR_MAX_LAYERS` (macro, line 16) `#define CAR_MAX_LAYERS`
  - `CAR_LAYER_NAME_MAX` (macro, line 17) `#define CAR_LAYER_NAME_MAX`
  - `CAR_INLINE_SPEC` (macro, line 18) `#define CAR_INLINE_SPEC`
- Imported by: `src/css.c`, `src/css_atrule.c`, `tests/test_css_atrule.c`

## include/css_box.h
- Layer: utility
- Language: h
- Symbols:
  - `cb_length_px` (function, line 15) `int cb_length_px(const char *v, double *px);`
  - `cb_interp_len` (function, line 16) `int cb_interp_len(const char *v, int allow_auto, int *out);`
  - `cb_emit_len` (function, line 17) `int cb_emit_len(css_decl *dst, int cap, int slot, const char *val, int allow_auto, int allow_neg);`
  - `cb_expand_box4` (function, line 19) `int cb_expand_box4(const char *val, int slot_top, int allow_auto, int allow_neg, css_decl *dst, int cap);`
  - `cb_expand_box2` (function, line 21) `int cb_expand_box2(const char *val, int slot_start, int slot_end, int allow_auto, int allow_neg, css_decl *dst, int...`
  - `cb_interp_lp` (function, line 23) `int cb_interp_lp(const char *v, int allow_auto, int allow_pct, int *out_px, int *out_pm);`
  - `cb_value_em_milli` (function, line 25) `int cb_value_em_milli(const char *v);`
  - `rectangle` (function, line 27) `* rectangle (top, right, bottom, left): px[i] + pm[i]/1000 of the border box (height for * top/bottom, width for...`
  - `cb_lp_can_be_nonneg` (function, line 31) `int cb_lp_can_be_nonneg(int px_val, int pct_pm);`
  - `cb_next_ws_token` (function, line 32) `int cb_next_ws_token(const char **p, char *tok, size_t cap);`
  - `cb_interp_align` (function, line 33) `int cb_interp_align(const char *v);`
  - `cb_interp_fontsize_ex` (function, line 34) `int cb_interp_fontsize_ex(const char *v, int *abs_out);`
  - `cb_interp_lineheight` (function, line 35) `int cb_interp_lineheight(const char *v);`
  - `cb_interp_weight` (function, line 36) `int cb_interp_weight(const char *v);`
  - `cb_interp_style` (function, line 37) `int cb_interp_style(const char *v);`
  - `cb_interp_textdeco` (function, line 38) `int cb_interp_textdeco(const char *v);`
  - `cb_interp_display` (function, line 39) `int cb_interp_display(const char *v);`
  - `cb_interp_gap` (function, line 40) `int cb_interp_gap(const char *v);`
  - `cb_interp_justify` (function, line 41) `int cb_interp_justify(const char *v);`
  - `cb_interp_gridcols` (function, line 42) `int cb_interp_gridcols(const char *v);`
  - `cb_expand_grid_template_cols` (function, line 43) `int cb_expand_grid_template_cols(const char *val, css_decl *dst, int cap);`
  - `strings` (function, line 45) `* Quoted area strings (the grid-template shorthand's row half) are skipped. */ int...`
  - `FREEDOM_CSS_BOX_H` (macro, line 2) `#define FREEDOM_CSS_BOX_H`
  - `CB_AUTO_REJECT` (macro, line 10) `#define CB_AUTO_REJECT`
  - `CB_AUTO_VALUE` (macro, line 11) `#define CB_AUTO_VALUE`
  - `CB_AUTO_RESET` (macro, line 12) `#define CB_AUTO_RESET`
  - `CB_AUTO_RESET_NONE` (macro, line 13) `#define CB_AUTO_RESET_NONE`
- Depends on: `include/css_decl.h`
- Imported by: `src/css.c`, `src/css_box.c`, `src/css_text.c`, `tests/test_css_box.c`

## include/css_chain.h
- Doc: cch_element_matches: Nonzero iff the parsed selector *sel matches element `el`, built against...
- Layer: utility
- Language: h
- Symbols:
  - `cvr_chain` (struct, line 51)
  - `cvr_table` (struct, line 52)
  - `cch_path` (type_alias, line 69) `typedef struct cch_path cch_path;`
  - `cch_path_new` (function, line 70) `cch_path *cch_path_new(void);`
  - `cch_path_free` (function, line 71) `void cch_path_free(cch_path *pa);`
  - `cch_element_matches` (function, line 81) `int cch_element_matches(lxb_dom_element_t *el, const css_sel *sel);`
  - `lacks` (function, line 85) `* the element lacks (csel's subj_req) is rejected before the ancestor chain is built: on a * query that scans a...`
  - `box` (function, line 91) `* generated box (css_resolve_pseudo) against the same element context. * font_size is el's own COMPUTED font-size...`
  - `FREEDOM_CSS_CHAIN_H` (macro, line 2) `#define FREEDOM_CSS_CHAIN_H`
  - `CCH_CHAIN_MAX` (macro, line 26) `#define CCH_CHAIN_MAX`
  - `CCH_SIB_MAX` (macro, line 27) `#define CCH_SIB_MAX`
  - `CCH_NTH_MAX` (macro, line 28) `#define CCH_NTH_MAX`
- Depends on: `include/css.h`, `include/css_select.h`
- Imported by: `src/css_chain.c`, `src/dom.c`, `src/page_view.c`, `tests/test_page_view.c`

## include/css_color.h
- Doc: cc_pack: Packs a color into a non-negative 0x00RRGGBB integer (suitable for transport * and for...
- Layer: utility
- Language: h
- Symbols:
  - `cc_rgb` (struct, line 27)
  - `cc_status` (enum, line 31)
  - `b` (type_alias, line 26) `typedef struct cc_rgb { unsigned char r, g, b;`
  - `cc_pack` (function, line 49) `int cc_pack(cc_rgb c);`
  - `FREEDOM_CSS_COLOR_H` (macro, line 2) `#define FREEDOM_CSS_COLOR_H`
  - `CC_COLOR_CURRENT` (macro, line 59) `#define CC_COLOR_CURRENT`
  - `CC_COLOR_TRANSPARENT` (macro, line 60) `#define CC_COLOR_TRANSPARENT`
- Imported by: `gui/browser_ui.c`, `gui/bui_theme.c`, `include/css.h`, `src/css.c`, `src/css_box.c`, `src/css_color.c`, `src/css_gradient.c`, `src/css_text.c`, `src/css_values.c`, `src/page_view.c`, `src/svg_paint.c`, `src/svg_render.c`, `tests/test_css_color.c`

## include/css_computed.h
- Doc: ccm_get: Writes the computed value of the kebab-case property `prop` into out (cap bytes, NUL...
- Layer: utility
- Language: h
- Symbols:
  - `ccm_input` (struct, line 19)
  - `ccm_get` (function, line 29) `size_t ccm_get(const ccm_input *in, const char *prop, char *out, size_t cap);`
  - `ccm_property_count` (function, line 32) `size_t ccm_property_count(void);`
  - `ccm_property_name` (function, line 33) `const char *ccm_property_name(size_t i);`
  - `FREEDOM_CSS_COMPUTED_H` (macro, line 2) `#define FREEDOM_CSS_COMPUTED_H`
  - `CCM_VALUE_MAX` (macro, line 17) `#define CCM_VALUE_MAX`
- Depends on: `include/css.h`
- Imported by: `src/css_computed.c`, `src/tab.c`, `tests/test_css_computed.c`

## include/css_counter.h
- Doc: cnt_hash: FNV-1a over `len` bytes of an identifier, ASCII case preserved (identifiers are *...
- Layer: utility
- Language: h
- Symbols:
  - `cnt_decl` (struct, line 21)
  - `cnt_style` (enum, line 26)
  - `name` (type_alias, line 20) `typedef struct cnt_decl { unsigned name;`
  - `cnt_state` (type_alias, line 50) `typedef struct cnt_state cnt_state;`
  - `cnt_hash` (function, line 34) `unsigned cnt_hash(const char *name, size_t len);`
  - `written` (function, line 37) `* written (0 for `none`) or -1 when invalid. `dflt` is the value of an entry with no * integer: 0 for reset, 1 for...`
  - `cnt_parse_content` (function, line 44) `int cnt_parse_content(const char *val, char *out, size_t cap);`
  - `cnt_is_marker` (function, line 45) `int cnt_is_marker(const char *s);`
  - `cnt_format` (function, line 49) `size_t cnt_format(int style, long value, char *out, size_t cap);`
  - `cnt_state_new` (function, line 52) `cnt_state *cnt_state_new(void);`
  - `cnt_state_free` (function, line 53) `void cnt_state_free(cnt_state *s);`
  - `cnt_reset` (function, line 56) `void cnt_reset(cnt_state *s, int depth, const cnt_decl *d, int n);`
  - `cnt_increment` (function, line 57) `void cnt_increment(cnt_state *s, int depth, const cnt_decl *d, int n);`
  - `cnt_leave` (function, line 60) `void cnt_leave(cnt_state *s, int depth);`
  - `cnt_resolve` (function, line 67) `size_t cnt_resolve(const cnt_state *s, const char *marker, cnt_attr_fn attr, void *ctx, char *out, size_t cap);`
  - `FREEDOM_CSS_COUNTER_H` (macro, line 9) `#define FREEDOM_CSS_COUNTER_H`
  - `CNT_MAX_DECL` (macro, line 17) `#define CNT_MAX_DECL`
  - `CNT_MAX_INSTANCES` (macro, line 18) `#define CNT_MAX_INSTANCES`
  - `CNT_NAME_MAX` (macro, line 19) `#define CNT_NAME_MAX`
- Imported by: `include/css.h`, `src/css_counter.c`, `tests/test_css_counter.c`


Next: [KB_include_p2.md](KB_include_p2.md)
